我需要在Python中生成正弦波聲音,並且我需要能夠控制頻率,持續時間和相對音量。 '生成'我的意思是我希望它立即通過揚聲器播放,而不是保存到文件。在Python中生成正弦波聲音
這樣做最簡單的方法是什麼?
我需要在Python中生成正弦波聲音,並且我需要能夠控制頻率,持續時間和相對音量。 '生成'我的意思是我希望它立即通過揚聲器播放,而不是保存到文件。在Python中生成正弦波聲音
這樣做最簡單的方法是什麼?
在Python中安裝聲音處理方法的一個比較一致的方法是Pygame多媒體庫。
我推薦使用它 - 有pygame.sndarray子模塊,它允許你操縱數據向量中的數字,成爲可以在pygame.mixer模塊中播放的高級聲音對象。
pygame.org網站上的文檔應該足以使用sndarray模塊。
我的bregman lab toolbox你有一套完全按你想要的功能。這Python模塊是有點馬車,但你能適應這個代碼來獲取自己的函數
404錯誤 - 頁面未找到 - https://github.com/bregmanstudio/BregmanToolkit – scls
import pyaudio
import numpy as np
p = pyaudio.PyAudio()
volume = 0.5 # range [0.0, 1.0]
fs = 44100 # sampling rate, Hz, must be integer
duration = 1.0 # in seconds, may be float
f = 440.0 # sine frequency, Hz, may be float
# generate samples, note conversion to float32 array
samples = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32)
# for paFloat32 sample values must be in range [-1.0, 1.0]
stream = p.open(format=pyaudio.paFloat32,
channels=1,
rate=fs,
output=True)
# play. May repeat with different volume values (if done interactively)
stream.write(volume*samples)
stream.stop_stream()
stream.close()
p.terminate()
伊萬 - onys之前做
sudo apt-get install python3-all-dev portaudio19-dev
給了一個很好的答案,但有一點除了它: 這個腳本會產生比預期短4倍的聲音,因爲Pyaudio寫入方法需要float32的字符串數據,但是當您將numpy數組傳遞給此方法時,它會將整個數組作爲實體轉換爲字符串,因此您必須轉換在numpy的陣列到自己的字節序列像這樣的數據:
samples = (np.sin(2*np.pi*np.arange(fs*duration)*f/fs)).astype(np.float32).tobytes()
,你必須改變這一行,以及:
stream.write(samples)
什麼平臺(S),你定位? –
主要是MacOS X - 我應該指定這個,對不起! – astrofrog
這個問題類似於http://stackoverflow.com/questions/307305/play-a-sound-with-python和http://stackoverflow.com/questions/260738/play-audio-with-python –