树莓派学习手记——使用Python录音

发布时间:2024-12-25 15:15

学习Python基础语法:https://www.runoob.com/python/python-tutorial.html #生活技巧# #工作学习技巧# #编程学习资源#

CSDN广告邮件太多了,邮箱已经屏蔽了CSDN,留言请转SegmentFault:https://segmentfault.com/a/1190000013854294

有的时候我们想让树莓派能够录音,以实现语音控制等功能。所以今天我们总结一下用在树莓派上使用Python录音的过程。

准备硬件

树莓派上自带的3.5mm接口只能作为语音输出口,不能接麦克风。所以我们需要另外购买USB声卡,某宝上5元左右就能买到,当然你还需要一个麦克风。总费用应该在20元以内。

检查硬件是否正常

使用arecord -l可以列出所有录音设备,一般输出如下:

arecord -l 1

**** List of CAPTURE Hardware Devices ****
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0

同样地,aplay -l可以列出所有播放设备,输出中也能找到形如 Device [USB Audio Device] 的设备。

我们可以直接在命令行执行Linux自带的录音/播放命令,测试硬件是否正常:

arecord -D hw:1,0 -t wav -c 1 -r 44100 -f S16_LE test.wav aplay -D hw:0,0 test.wav 12

arecord 是录音命令,其中 hw:1,0 表示 card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio] 的 card 1 , device 0 ,如果你的USB声卡录音设备不是 card 1 , device 0 ,还请进行相应修改。另外,录音过程需要手动按 ctrl + c 结束。

aplay 是播放命令,其中 hw:0,0 表示树莓派板载音频接口,如果你把耳机插在USB声卡接口,还请进行相应修改,如改成 hw:1,0 。

*****如果你发现录制的音频内没有声音,只有细微的杂音,但 arecord -l 和 aplay -l 列出的设备中确实有USB声卡。那么你可以尝试着把麦克风接口拔出来一些,只插进去2/3,或许能够解决你的问题。笔者不是很明白其中的缘由,如果你有什么想法恳请留言告知。

安装pyaudio

在Python中执行录音命令需要pyaudio模块,直接用pip命令安装:

pip install pyaudio 1

如果你使用pip命令下载速度很慢,或许修改pip源可以帮到你。

*****如果你使用了virtualenv,一般会发现pyaudio安装失败。这种情况下你需要安装APT中的PortAudio开发头文件,然后安装PyAudio:

sudo apt-get install portaudio19-dev pip install pyaudio 12

使用Python录音

该例程修改自官方主页例程PyAudio。

import pyaudio import wave import os import sys CHUNK = 512 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 44100 RECORD_SECONDS = 5 WAVE_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()

12345678910111213141516171819202122232425262728293031323334353637383940

执行后会录制一段5秒的音频,输出为同目录下的output.wav文件。

python3 rec.py 1

* 隐藏错误消息

一般情况下,在树莓派上执行上述Python代码后,你会看到非常多的ALSA报错和JACK报错:

ALSA lib confmisc.c:1281:(snd_func_refer) Unable to find definition ‘cards.bcm2835.pcm.front.0:CARD=0’

connect(2) call to /tmp/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed

但你会发现其实能够正常地录音。如果你不想看到这些错误消息,可以在代码中加入下述命令隐藏错误:

os.close(sys.stderr.fileno()) 1

小结

使用Python录音很简单,你还可以在GPIO口上接入一个按钮,修改例程,实现按下按钮自动开始录音的功能。下一步的目标是把Python录音和Cloud Speech API语音识别结合起来。

感谢你阅读文章!

网址:树莓派学习手记——使用Python录音 https://www.yuejiaxmz.com/news/view/563032

相关内容

树莓派入门攻略:轻松学会用Python脚本开启智能生活!
树莓派打造智能语音控制系统
树莓派控制语音控制舵机
homeassistant几种安装方式对比,树莓派4docker安装记录
学习Python,开发智能家居控制系统
python语音控制 python语音控制智能家电
树莓派选购与使用指南,资深网购达人的经验分享
基于树莓派的智能家居控制系统设计论文参考
开源树莓派+OAK相机,打造家庭自动化系统。
小白如何做一个Python人工智能语音助手

随便看看