如何在Android平台上使用USB Audio设备
来源:互联网 发布:钢丝野猪吊脚套锁淘宝 编辑:程序博客网 时间:2024/06/05 06:55
需求: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 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
4、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要知道USB Audio插上时打开USB Audio的plug,USB Audio拔下时打开local CODEC的plug。这样一想,修改的幅度还是蛮大的。而且未能确定如果在播放的过程中,切换音频设备是否有影响?如果alsa允许只是配置好asound.conf达到同样的目的,那就好办了,可惜目前找不到这方面的资料,应该没有这个便利了。
进展:
2011/9/19:按照以上难点分析,大致完成了整个Android框架层的代码和ALSA配置文件,基本实现了USB Audio热插拔时的音频设备切换。但有个很大的问题:在播放时切换音频设备会导致AudioFlinger服务crash(之前做2G通话时也遇到这个问题,用其他办法规避了)。看来在切换音频设备时,应该停止播放;等切换完成后,再恢复播放。
传闻Android3.1开始支持USB Audio设备:“Your device will support USB Host Mode, applications can now manage connected USB peripherals such as audio devices. input devices, communications devices, and more.”。但Android3.1何时才能开源?
已经有思路了,刚想起Android本身不是支持Bluetooth音频吗?Bluetooth Headset的切换应该与USB Headset本质差不多吧。应该仔细研究下蓝牙音频是如何实现的。Android Audio System 之三: AudioPolicyService 和 AudioPolicyManager
- 如何在Android平台上使用USB Audio设备
- 如何在Android平台上使用USB Audio设备
- 如何在Android平台上使用USB Audio设备
- 如何在Android平台上使用USB Audio设备 .
- 如何在Android平台上使用USB Audio设备
- 如何在Android平台上使用USB Audio设备
- 在android平台上使用录音设备
- 如何在Android平台上使用PMEM及注册Platform设备
- 在android平台上如何使用libdvbpsi
- 如何在DOS下使用USB设备
- 如何在 Windows* 8 上为 Android* 设备安装英特尔® USB 驱动程序
- usb audio设备驱动
- usb audio设备驱动
- USB Audio accessory设备
- rt2870 usb wifi在mx53 android平台上的移植
- rt2870 usb wifi在mx53 android平台上的移植
- rt2870 usb wifi在mx53 android平台上的移植
- 在XP下如何禁止使用USB设备(微软知识库)
- AWK 简明教程
- Delphi TdxDBGrid 使用简介
- dos界面实现贪吃蛇
- vfork 和fork
- 关闭应用(自杀,杀别人)
- 如何在Android平台上使用USB Audio设备
- snmp test
- 算法竞赛入门经典第二章笔记
- 内容解析者相关
- 数据库杂记
- oracle 所有等待事件
- screen 闪屏、回滚、vim退出回滚残留问题
- v$session 和v$process 、v$transaction
- CUDA简介