Android音频底层调试-基于tinyalsa
? ? ? 因?yàn)锳ndroid中默認(rèn)并沒(méi)有使用標(biāo)準(zhǔn)alsa,而是使用的是tinyalsa。所以就算基于命令行的測(cè)試也要使用libtinyalsa。Android系統(tǒng)在上層Audio千變?nèi)f化的時(shí)候,能夠能這些個(gè)工具實(shí)時(shí)查看到,比方音頻通道的切換等等.
?
1.編譯tinyalsa配套工具
$?mmm?external/tinyalsa/
編譯完后會(huì)產(chǎn)生tinyplay/tinymix/tinycap等等工具。
tinymix:?查看配置混音器
tinyplay:?播放音頻
tinycap:?錄音
?
2.查看當(dāng)前系統(tǒng)的聲卡
root@android:/ # cat /proc/asound/cards0 [RKRK616 ]: RK_RK616 - RK_RK616RK_RK6161 [ROCKCHIPSPDIF ]: ROCKCHIP-SPDIF - ROCKCHIP-SPDIFROCKCHIP-SPDIF root@android:/ #3.tinymix查看混響器
tinymix用法a.不加不論什么參數(shù)-顯示當(dāng)前配置情況?b.tinymix?[ctrl?id]?[var]不加[var]能夠查看該[ctrl?id]可選選項(xiàng)。
root@android:/ # tinymix Number of controls: 7 ctl type num name value 0 ENUM 1 Playback Path OFF 1 ENUM 1 Capture MIC Path MIC OFF 2 ENUM 1 Voice Call Path OFF 3 ENUM 1 Voip Path OFF 4 INT 2 Speaker Playback Volume 0 0 5 INT 2 Headphone Playback Volume 0 0 6 ENUM 1 Modem Input Enable ON root@android:/ #相應(yīng)解釋:
| 英文 | 中文 | 備注 |
| Playback?Path | 音頻輸出通道 | ? |
| Capture?MIC?Path | 音頻輸入通道 | ? |
| Voice?Call?Pah | 通話音頻通道 | 設(shè)備沒(méi)有通話模塊,暫無(wú)法測(cè)試 |
| Voip?Pah? | IP電話音頻通道 | 場(chǎng)景Gtalk;值有:SPK/HP_NO_MIC/BT |
| Speaker?Playback?Volume | 揚(yáng)聲器音量 | 和上層音量值無(wú)關(guān) |
| Headphone?Playback?Volume | 耳機(jī)音量 | 同上 |
| Modem?Input?Enable | 暫不知何用 | 經(jīng)測(cè)試不能控制音頻輸入輸出 |
| ? | ? | ? |
Playback?Path有:
| 英文 | 中文 | 備注 |
| OFF | 關(guān)閉 | ? |
| RCV | - | ? |
| SPK | 揚(yáng)聲器 | 經(jīng)常使用 |
| HP | 耳機(jī)帶麥 | ? |
| HP_NO_MIC | 耳機(jī)無(wú)麥 | 經(jīng)常使用 |
| BT | 藍(lán)牙 | ? |
| SPK_HP | - | ? |
| RING_SPK | - | ? |
| RING_HP | - | ? |
| RING_HP_NO_MIC | - | ? |
| RING_SPK_HP | - | ? |
例:將輸出切換到揚(yáng)聲器
root@android:/ #?tinymix?0?SPK
關(guān)于tinymix小結(jié):
通過(guò)觀察發(fā)現(xiàn),Android系統(tǒng)的聲音音量的調(diào)節(jié)并沒(méi)有直接使用tinyalsa,而基于上層軟件實(shí)現(xiàn),由于不管上層音量怎么改變。這里看到的都是24(以我採(cǎi)用的設(shè)備為例)。
通道的切換是真正使用了tinyalsa,當(dāng)通過(guò)不同通道播放音樂(lè)的時(shí)候能夠?qū)崟r(shí)觀察到通道的切換。在某個(gè)站點(diǎn)上看到Android在沒(méi)有聲音播放的3秒后會(huì)關(guān)于alsa,這里也得到了證實(shí),我曾經(jīng)覺(jué)得Android系統(tǒng)會(huì)永久占用音頻設(shè)備。
當(dāng)通過(guò)藍(lán)牙播放音樂(lè)的時(shí)候,已經(jīng)不經(jīng)過(guò)alsa了。tinymix查看得都處理關(guān)閉狀態(tài),由于Android4.2的藍(lán)牙協(xié)議所有在用戶層實(shí)現(xiàn)了。直接走uart通道。這種設(shè)計(jì)方式一時(shí)半會(huì)不能理解。
?
4.使用tinyplay播放wav音樂(lè)
這個(gè)僅僅是一個(gè)最主要的播放器。所以不支持播放MP3等等壓縮過(guò)格式的音樂(lè)。
沒(méi)有學(xué)會(huì)使用前。網(wǎng)上都說(shuō)非常麻煩??墒侨缃窨磥?lái)一點(diǎn)也不麻煩,直接播放了44.1kHz/44.8kHz的wav音樂(lè)。
root@android:/ # tinyplay /sdcard/0_16.wav Playing sample: 2 ch, 44100 hz, 16 bit root@android:/ #注:播放之前得首先使用tinymix把通道設(shè)置好,上文中已經(jīng)給出了設(shè)置到揚(yáng)聲器中的樣例;因?yàn)椴シ艜r(shí)使用的最大音量進(jìn)行播放的,所以注意防止被嚇到。這里將測(cè)試音頻文件上傳。
?
5.tinycap使用
root@android:/?#?tinycap?/sdcard/test.wav
能夠進(jìn)行錄音。
?
眼下僅僅遇到這些,就先總結(jié)到這,能夠隨時(shí)再深入。
20141014更新:
1.原來(lái)tinyalsa最原始的源代碼在這里tinyalsa_github。
2.自己fork一份。加入靜態(tài)編譯方法以及busybox方式的將tinymix/tinyplay/tinycap/tinypcminfo集成一個(gè)tinyalsa。
tinyalsa-utils?包括了tinymix/tinyplay/tinycap/tinypcminfo用法是?tinyalsa?+?工具名。比方要執(zhí)行tinymix,那么就執(zhí)行?tinyalsa?mix或者tinyalsa?tinymix。下載地址。
root@android:/?#?tinyalsa?mix??????????????????????????????????????????????????
Mixer?name:?'RK_RK616'
Number?of?controls:?7
ctl type num name?????????????????????????????????????value
0 ENUM 1 Playback?Path????????????????????????????OFF
1 ENUM 1 Capture?MIC?Path?????????????????????????Main?Mic
2 ENUM 1 Voice?Call?Path??????????????????????????OFF
3 ENUM 1 Voip?Path????????????????????????????????OFF
4 INT 2 Speaker?Playback?Volume??????????????????0?0
5 INT 2 Headphone?Playback?Volume????????????????0?0
6 ENUM 1 Modem?Input?Enable???????????????????????ON
root@android:/?#?
3.依據(jù)這個(gè)[PATCH]?tinyalsa:?new?package信息顯示。以后tinyalsa也會(huì)被集成進(jìn)busybox中。
4.假設(shè)出現(xiàn)Failed?to?open?mixer錯(cuò)誤,代表你的Android設(shè)備不是alsa音頻驅(qū)動(dòng),而是legacy?OSS?device。
制作靜態(tài)庫(kù)參考:Linux下Gcc生成和使用靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)具體解釋
其他被證實(shí)為假的如果:
1.須要改寫(xiě)init.rc讓系統(tǒng)不啟動(dòng)android相關(guān)的服務(wù)(mediaserver)
2.須要通過(guò)其他途徑獲取tinyalsa.
轉(zhuǎn)載于:https://www.cnblogs.com/yxwkf/p/5344068.html
總結(jié)
以上是生活随笔為你收集整理的Android音频底层调试-基于tinyalsa的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vsftpd给root设置访问权限
- 下一篇: jeecg团队招新人(5人)