我将使用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
现在我想在不保存的情况下播放它。我不知道该怎么做。
答案 0 :(得分:1)
浏览了PyAudio Documentation后,您已经完成了所有内容,但您忘记了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()
答案 1 :(得分:0)
我不喜欢这个库尝试'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)