阻止模式音訊 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 會話