如何在Android平台上使用USB Audio裝置

來源:互聯網
上載者:User

需求: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.