我想編寫一個非常基本的應用程序,將麥克風的音頻傳遞給揚聲器。在https://people.csail.mit.edu/hubert/pyaudio/中描述的pyaudio非常簡單。PyAudio - 如何將波形文件混合成連續流
def passthrough():
WIDTH = 2
CHANNELS = 1
RATE = 44100
p = pyaudio.PyAudio()
def callback(in_data, frame_count, time_info, status):
return (in_data, pyaudio.paContinue)
stream = p.open(format=p.get_format_from_width(WIDTH),
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
stream_callback=callback)
stream.start_stream()
while stream.is_active():
time.sleep(0.1)
stream.stop_stream()
stream.close()
p.terminate()
但是現在我嘗試在發生事件時將波形文件混合到此流中。這就是我現在被卡住的地方。播放波形文件似乎也很容易。
def play_wave(wav_file):
wf = wave.open(wav_file, 'rb')
sample_width=wf.getsampwidth()
channels=wf.getnchannels()
rate=wf.getframerate()
second=sample_width*channels*rate
def callback(in_data, frame_count, time_info, status):
data = wf.readframes(frame_count)
return (data, pyaudio.paContinue)
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(sample_width),
channels=channels,
rate=int(rate),
output=True,
stream_callback=callback)
stream.start_stream()
while stream.is_active():
time.sleep(0.1)
stream.stop_stream()
stream.close()
wf.close()
p.terminate()
在這個時候,我有兩個問題。
- 怎樣波輸出混合到連續流
- 我怎樣才能觸發1.基於事件
希望有人能照亮黑暗的地下室,我在現在的。
編輯:假設波形文件具有相同數量的通道和相同的速率,所以不需要轉換。