记录并播放音频 - Python

4
我将使用Python实现语音聊天。我看到了一些示例,了解如何播放声音和录制声音。在许多示例中,他们使用了pyAudio库。
我能够录制声音并将其保存在.wav文件中。我也能够播放.wav文件。但是我想要录制5秒钟的声音然后播放它。我不想将其保存到文件中再播放,这对于语音聊天来说不好。
以下是我的音频记录代码:
p = pyaudio.PyAudio()
    stream = p.open(format=FORMAT, channels=1, rate=RATE,
        input=True, output=True,
        frames_per_buffer=CHUNK_SIZE)
num_silent = 0
snd_started = False

r = array('h')

while 1:
    # little endian, signed short
    snd_data = array('h', stream.read(CHUNK_SIZE))
    if byteorder == 'big':
        snd_data.byteswap()
    r.extend(snd_data)

    silent = is_silent(snd_data)

    if silent and snd_started:
        num_silent += 1
    elif not silent and not snd_started:
        snd_started = True

    if snd_started and num_silent > 30:
        break

现在我想在不保存的情况下进行游戏。我不知道如何做。
2个回答

2
我不喜欢这个库,可以尝试使用 'sounddevice' 和 'soundfile',它们非常易于使用和实现。要录制和播放声音,请使用以下代码:'
import sounddevice as sd
import soundfile as sf 


sr = 44100
duration = 5
myrecording = sd.rec(int(duration * sr), samplerate=sr, channels=2)
sd.wait()  
sd.play(myrecording, sr)
sf.write("New Record.wav", myrecording, sr)

1
经过查看PyAudio文档,你已经做得很好了,但你忘记了一个重要的事情,那就是stream是一个双工描述符。这意味着你可以从中读取以录制声音(就像你使用stream.read一样),也可以向其中写入以播放声音(使用stream.write)。
因此,你示例代码的最后几行应该是:
# Play back collected sound.
stream.write(r)

# Cleanup the stream and stop PyAudio
stream.stop_stream()
stream.close()
p.terminate()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接