阻止模式音訊 IO
msgstr“”“PyAudio 示例:播放波形檔案。”“
import pyaudio
import wave
import sys
CHUNK = 1024
if len(sys.argv) < 2:
print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
sys.exit(-1)
wf = wave.open(sys.argv[1], 'rb')
# instantiate PyAudio (1)
p = pyaudio.PyAudio()
# open stream (2)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels=wf.getnchannels(),
rate=wf.getframerate(),
output=True)
# read data
data = wf.readframes(CHUNK)
# play stream (3)
while len(data) > 0:
stream.write(data)
data = wf.readframes(CHUNK)
# stop stream (4)
stream.stop_stream()
stream.close()
# close PyAudio (5)
p.terminate()
要使用 PyAudio,首先使用 pyaudio.PyAudio() (1) 例項化 PyAudio,它設定 portaudio 系統。
要錄製或播放音訊,請使用 pyaudio.PyAudio.open() (2) 在所需裝置上使用所需音訊引數開啟流。這會設定一個 pyaudio.Stream 來播放或錄製音訊。
通過使用音訊資料寫入到該流播放音訊 pyaudio.Stream.write() ,或讀取使用從流中的音訊資料 pyaudio.Stream.read() 。 (3)
請注意,在阻塞模式下,每個 pyaudio.Stream.write() 或 pyaudio.Stream.read() 都會阻塞,直到播放/錄製了所有給定/請求的幀。或者,要動態生成音訊資料或立即處理錄製的音訊資料,請使用回撥模式( 請參閱回叫模式下的示例 )
使用 pyaudio.Stream.stop_stream() 暫停播放/錄製,使用 pyaudio.Stream.close() 來終止播放。 (4)
最後,使用 pyaudio.PyAudio.terminate() (5) 終止 portaudio 會話