上网搜了有关USB Audio Hotplug的东西,比较适用的资源如下:
1、Hotplugging USB audio devices (Howto)
题目看起来很吻合我们的问题,事实上并没有多少参考价值。其中脚本/etc/hotplug/usb/extigy或许可以捕捉到USB Audio设备的热插拔事件,应该可以进一步验证和利用,留意这点。
这是利用udev来获取USB热插拔事件,虽然Android没有udev,但例子程序对热插拔事件字符串的处理值得参考。
其实我们工作的第一步:验证USB Headset是否可以回放录音。
3.1、插上USB Headset,可以看到alsa的确加载了USB Audio,如下:
- ~ # cat /proc/asound/cards
- 0 [WMTSOC ]: HWDAC - WMT_SOC
- WMT_SOC (HWDAC)
- 1 [default ]: USB-Audio - C-Media USB Headphone Set
- C-Media USB Headphone Set at usb-0000:00:06.0-1, full speed
3.2、参考了这个链接,写了如下的配置文件/etc/asond.conf:
- pcm.!default {
- type asym
- playback.pcm {
- type plug
- slave.pcm "hw:1,0"
- }
- capture.pcm {
- type plug
- slave.pcm "hw:1,0"
- }
- }
重启后,声音就从Headset出来了。
hw:1,0对应card1即USB-Audio - C-Media USB Headphone Set
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