1.设置默认声卡为USB声卡
在$HOME下新建.asoundrc
$cd $HOME
$nano .asoundrc
输入以下内容
defaults.ctl.card 1
defaults.pcm.card 1
最后的1是USB声卡的编号,可通过以下命令查看
$aplay -l
或
$cat /proc/asound/cards
然后重启一下alsa就把1号声卡(usb声卡)设置成默认声卡了。
测试录音
$arecord -d 10 test.wav
测试播音
$aplay test.wav
2.播音和录音为不同声卡时,可以参考以下配置,修改~/.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
3.调节声卡音量
打开终端,输入
$alsamixer
即可调节音量
按 f6 会出现声卡列表
一般来说,usb 声卡总是第二位的,声卡编号是1(默认声卡是0)
4.测试指定声卡
arecord -D "plughw:5,0" -d 3 temp.wav
aplay -D "plughw:1,0" temp.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)
玩树莓派还是Python好啊, 轻描淡写几行代码就搞定了
alsamixer
网友评论