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