linux audio micphone alsa 怎么判断插入

linux audio micphone alsa 怎么判断插入,第1张

需求:USB Headset插上去后,声音要从本地CODEC切换到USB Headset输出/输入。

上网搜了有关USB Audio Hotplug的东西,比较适用的资源如下:1、Hotplugging USB audio devices (Howto)

题目看起来很吻合我们的问题,事实上并没有多少参考价值。其中脚本

/etc/hotplug/usb/extigy或许可以捕捉到USB Audio设备的热插拔事件,应该可以进一步验证和利用,留意这点。

2、Example to map USB Ports to ALSA card numbers and

add each sound card to a combined, single interface device

这是利用udev来获取USB热插拔事件,虽然Android没有udev,但例子程序对热插拔事件字符串的处理值得参考。

3、USB mic on Linux

其实我们工作的第一步:验证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

3.2、参考了这个链接,写了如下的配置文件/etc/asond.conf:

pcm.!default {type asymplayback.pcm {type plugslave.pcm hw:1,0}capture.pcm {type plugslave.pcm hw:1,0}}

重启后,声音就从Headset出来了。

hw:1,0对应card1即USB-Audio - C-Media USB Headphone Set4、Linux下USB设备热插拔

到此,需要考虑在Android平台切换USB Audio的实现问题了。有几个途径:1/

hotplug/usb;2/ udev;3/ netlink。这里就是netlink的实现方式,链接里有个证实可用的例子程序,目前可能需要做热插拔事件字符串的处理。

难点:Android音频设备的切换底层入口是alsa_default.cpp,目前看来需要在asound.conf定义好local CODEC和USB Audio的plug;还需要修改

alsa_default.cpp,最主要Android要知道USBAudio插上时打开

USB Audio的plug,

USB Audio拔下时打开local CODEC的plug。这样一想,修改的幅度还是蛮大的。而且未能确定如果在播放的过程中,切换音频设备是否有影响?如果alsa允许只是配置好asound.conf达到同样的目的,那就好办了,可惜目前找不到这方面的资料,应该没有这个便利了。

进展:2011/9/19:按照以上难点分析,大致完成了整个Android框架层的代码和ALSA配置文件,基本实现了USB Audio热插拔时的音频设备切换。但有个很大的问题:在播放时切换音频设备会导致AudioFlinger服务crash(之前做2G通话时也遇到这个问题,用其他办法规避了)。看来在切换音频设备时,应该停止播放;等切换完成后,再恢复播放。

linux中5.1声道实现方法

看到百度上搜不到,所以发一下

在命令行运行 alsamixer

把channel项改为6ch,(按向上箭头)

esc退出

此时既已设置为5.1声道

运行一个5.1声道的游戏,例如war thunder,运行时选择5.1声道,即可听见效果

5.1声道电影

首先保证片源是5.1声道,然后用smplayer播放,

音频,声道,选择5.1环绕声,此时就可以听到后置音箱出声了,然而这不是真正的5.1声道,后置的声音与前置相同。

要想真正听到5.1声道,还需要做一下硬件改动(这也是windows下播放5.1声道电影的要求)

首先需要数字输出,同轴或光纤皆可,连接到音箱的数字接口(要求音箱支持数字解码),如果音箱不支持,需要购买单独的解码器,连载电脑同轴和音箱5.1输入之间,然后点击声音设置(系统的)输出选中数字输出。

再用smplayer播放,

音频,声道,选择5.1环绕声,此时就是真正的5.1环绕了

可惜的是,上面这两种模式互不兼容,也就是说,玩游戏5.1声道请用第一种方式,用第二种只能双声道,看电影5.1声道只能用第二种,用第一种是假的5.1声道。

这种局限在windows中也存在,不是linux的弊端

我自己弄了个切换器,可以切换两种接线,最好是买带数字解码的5.1音箱,这样就可以同时接线了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7159076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存