CSDN广告邮件太多了,邮箱已经屏蔽了CSDN,留言请转SegmentFault:https://segmentfault.com/a/1190000013854294 有的时候我们想让树莓派能够录音,以实现语音控制等功能。所以今天我们总结一下用在树莓派上使用Python录音的过程。 准备硬件树莓派上自带的3.5mm接口只能作为语音输出口,不能接麦克风。所以我们需要另外购买USB声卡,某宝上5元左右就能买到,当然你还需要一个麦克风。总费用应该在20元以内。 检查硬件是否正常使用arecord -l可以列出所有录音设备,一般输出如下: arecord -l
同样地,aplay -l可以列出所有播放设备,输出中也能找到形如 我们可以直接在命令行执行Linux自带的录音/播放命令,测试硬件是否正常: arecord -D hw:1,0 -t wav -c 1 -r 44100 -f S16_LE test.wav aplay -D hw:0,0 test.wav
*****如果你发现录制的音频内没有声音,只有细微的杂音,但 安装pyaudio在Python中执行录音命令需要pyaudio模块,直接用pip命令安装: pip install pyaudio 如果你使用pip命令下载速度很慢,或许修改pip源可以帮到你。 *****如果你使用了virtualenv,一般会发现pyaudio安装失败。这种情况下你需要安装APT中的PortAudio开发头文件,然后安装PyAudio: sudo apt-get install portaudio19-dev pip install pyaudio 使用Python录音该例程修改自官方主页例程PyAudio。 import pyaudioimport waveimport osimport sys CHUNK = 512FORMAT = pyaudio.paInt16 CHANNELS = 1RATE = 44100RECORD_SECONDS = 5WAVE_OUTPUT_FILENAME = 'output.wav'p = pyaudio.PyAudio()stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)print('recording...')frames = []for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):data = stream.read(CHUNK)frames.append(data)print('done')stream.stop_stream()stream.close()p.terminate()wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(b''.join(frames))wf.close() 执行后会录制一段5秒的音频,输出为同目录下的output.wav文件。 python3 rec.py * 隐藏错误消息一般情况下,在树莓派上执行上述Python代码后,你会看到非常多的ALSA报错和JACK报错:
但你会发现其实能够正常地录音。如果你不想看到这些错误消息,可以在代码中加入下述命令隐藏错误: os.close(sys.stderr.fileno()) 小结使用Python录音很简单,你还可以在GPIO口上接入一个按钮,修改例程,实现按下按钮自动开始录音的功能。下一步的目标是把Python录音和Cloud Speech API语音识别结合起来。 感谢你阅读文章! |
|
来自: xvdo > 《python编程学习》