树莓派3B+指南(十三)pyaudio录音与播放
pyaudio录音与播放
在网上有很多范例,但是在播放wav文件的时候,总是卡在循环中出不来,最后在官方的文档中找到了正确的使用方法。 官方文档:
以下是结合网上的范例和官方的文档做出的可以在树莓派使用的方法:
import wave
from pyaudio import PyAudio,paInt16
framerate=16000
NUM_SAMPLES=2000
chunk=2014
channels=1
sampwidth=2
TIME=20 #ms
#保存
def save_wave_file(filename,data):
save the date to the wavfile
wf=wave.open(filename,wb)
wf.setnchannels(channels)
wf.setsampwidth(sampwidth)
wf.setframerate(framerate)
wf.writeframes(b"".join(data))
wf.close()
#录音
def my_record():
pa=PyAudio()
stream=pa.open(format = paInt16,channels=1,
rate=framerate,input=True,
frames_per_buffer=NUM_SAMPLES)
my_buf=[]
count=0
while count<TIME:
string_audio_data = stream.read(NUM_SAMPLES)
my_buf.append(string_audio_data)
count+=1
print(.)
save_wave_file(01.wav,my_buf)
stream.close()
#播放
def play():
wf=wave.open(r"my.wav",rb)
p=PyAudio()
stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels= wf.getnchannels()
rate=wf.getframerate(),
output=True)
data=wf.readframes(chunk)
while len(data) > 0:
stream.write(data)
data = wf.readframes(CHUNK)
stream.stop_stream()
stream.close()
p.terminate()
if __name__ == __main__:
my_record()
print(Over!)
play()
如果在多个程序中使用pyaudio,可能会报错:
IOError: [Errno -9985] Device unavailable
或者其他的类似于设备不能使用的错误,可以试试以下代码
sudo apt-get install pulseaudio pulseaudio --start
至此就结束了,希望可以帮助到大家!
