树莓派音频配置使用
配置默认声卡为指定声卡
1.在$HOME下新建 .asoundrc
cd $HOME
nano .asoundrc
输入以下内容
defaults.ctl.card 1
defaults.pcm.card 1
1指的是指定声卡的card号,可用cat /proc/asound/cards查看
2.测试录音
arecord -d 10 text.wav
aplay text.wav
3.播音和录音为不同声卡时,可以参考以下配置,修改~/.asoundrc
pcm.!default {
type asym
playback.pcm {
type plug
slave.pcm "hw:0,0"
}
capture.pcm {
type plug
slave.pcm "hw:1,0"
}
其中,hw:1,0表示card 1 device 0
4.测试指定声卡
arecord -D "plughw:5,0" -d 3 text.wav
aplay -D "plughw:1,0" text.wav
5.重启Card编号改变处理
Linux设备如果插拔和重启的时候, 声卡设备的 id 分配是完全靠内核心情的, 你这次调用的是 id 1的声卡设备, 下次就有可能变成 0 和 2等其他 id. 遇到这种情况, 如果声卡设备只有麦克风而没有扬声器(比如USB摄像头), 就会报 jack server 的错误, 无法正常发出声音.怎么办?
/proc/asound/pcm 文件中会有所有声卡设备的 “设备号-序列号” 的信息, 我们只用
打开 /proc/asound/pcm 文件, 过滤出具有 playback 1 的设备
提取出 “设备号-序列号” 的信息
通过 mpg123 指定 设备号-序列号 信息, 即可播放指定声卡硬件播放声音
示例代码如下:
def get_sound_card_id():
try:
with open("/proc/asound/pcm") as f:
s = f.read()
for line in s.split("\n"):
if "playback 1" in line:
number = line.split(":")[0].split("-")
return ("%s,%s" % (int(number[0]), int(number[1])))
except:
return "0,0"
def play_sound(sound_file):
sound_card_id = get_sound_card_id()
play_command = "mpg123 -o alsa -a hw:%s %s" % (sound_card_id, sound_file)
subprocess.Popen(play_command, shell=True)
借鉴链接:https://www.jianshu.com/p/f414b85b9e71/
音频
1.查看连接设备
cat /proc/asound/cards
- 查看usb设备
lsusb
3.列出所有音频输出设备
aplay -l
4.列出所有音频输入设备
arecode -l
5.录音
arecord -D "plughw:1,0"/hw:1,0 -f S16_LE -r 16000 -d 5 -t wav test.wav
指令 | 含义 |
---|---|
-D | 选择设备名称 |
-f | 录音格式 |
-r | 采样率 |
-d | 录音时长 |
-t | 录音格式 |
text.wav | 文件名 |
6.播放音频
aplay 1.wav
7.调节音量
alsamixer
按F6选择设备,F5是将音频输入输出设备都展示出来,按方向键调整