树莓派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

至此就结束了,希望可以帮助到大家!

经验分享 程序员 微信小程序 职场和发展