因为树莓派音频口不支持输入,所以录音需要一个USB声卡或者HIFI扩展卡。网上10元左右的免驱USB声卡即可。但是低端USB声卡普遍都会有一个明显的底噪。
什么是sox
SoX(即 Sound eXchange)是一个跨平台(Windows,Linux,MacOS 等)的命令行实用程序,可以将各种格式的音频文件转换为需要的其他格式。
SoX 还可以对输入的音频文件应用各种效果,也支持在大多数平台上播放和录制音频文件。
介绍可以看下文:
SoX — 音频处理工具里的瑞士军刀
安装sox及其mp3库
sudo apt-get install sox libsox-fmt-mp3
如果需要支持所有可用音频格式那么应该这样安装:
sudo apt-get install libsox-fmt-all
录音和播放
如果USB声卡已经设置为默认声卡,那么最简单的方法就是
rec test.mp3
play test.mp3
也可以指定录音和播放设备:
sox -t alsa plughw:1,0 test.mp3
plughw:1,0
是USB声卡设备编号,可以通过如下命令查看
arecord -l
#或者
aplay -l
#或者
cat /proc/asound/cards
也可以通过如下python脚本获取
import pyaudio
p = pyaudio.PyAudio()
for ii in range(p.get_device_count()):
print(p.get_device_info_by_index(ii).get('name'))
将编号为1的USB声卡设置为默认的方法(Pi 4B测试通过)
- 方法1
编辑~/.asoundrc
输入以下内容
defaults.ctl.card 1
defaults.pcm.card 1
- 方法2
在user profile中加入
export AUDIODEV=hw:1,0
Note:我没用这个方法sox也默认使用了USB声卡作为录音和回放设备,可能与我安装了pulseaudio有关。卸载pulseaudio之后就需要指定USB声卡了。
测试声卡(编号1):
speaker-test -D plughw:1 -c2 -t wav
录制固定长度的音频片段(如 30 分钟)并保存在指定文件中:
sox -t alsa plughw:1 myrec.wav trim 0 00:30:00
持续录制很长时间的音频,保存在几个不同的文件中,每隔一小时保存一次:
sox -t alsa plughw:1 myrec.wav trim 0 01:00:00 : newfile : restart
使用arecord指定设备(-D plughw:1,0)双声道录音(-c 2)并指定长度(-d 5)和采样率(-r 44100)
arecord -D plughw:1,0 -d 5 -c 2 -r 44100 -f s16_LE helloworld.wav
如果sox或者rec命令运行时遇到如下提示:
rec WARN alsa: can't encode 0-bit Unknown or not applicable
可以运行如下命令解决:
export AUDIODRIVER=alsa