標籤:volume 啟動 load sdcard pen 音頻 play int mp3
本文轉載自:http://blog.csdn.net/luckywang1103/article/details/48053015
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
目錄(?)[+]
由於Android中預設並沒有使用標準alsa,而是使用的是tinyalsa,所以就算基於命令列的測試也要使用libtinyalsa。Android系統在上層Audio千變萬化的時候,可以能這些個工具即時查看到,比如音頻通道的切換等等.
1.編譯tinyalsa配套工具
$ mmm external/tinyalsa/
編譯完後會產生tinyplay/tinymix/tinycap等等工具。
tinymix: 查看配置混音器
tinyplay: 播放音頻
tinycap: 錄音
2.查看當前系統的音效卡
[python] view plain copy
- [email protected]:/ # cat /proc/asound/cards
- 0 [RKRK616 ]: RK_RK616 - RK_RK616
- RK_RK616
- 1 [ROCKCHIPSPDIF ]: ROCKCHIP-SPDIF - ROCKCHIP-SPDIF
- ROCKCHIP-SPDIF
- [email protected]:/ #
3.tinymix查看混響器
tinymix使用方法a.不加任何參數-顯示當前配置情況 b.tinymix [ctrl id] [var]不加[var]可以查看該[ctrl id]可選選項。
[python] view plain copy
- [email protected]:/ # 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
- [email protected]:/ #
對應解釋:
英文 |
中文 |
備忘 |
Playback Path |
音訊輸出通道 |
|
Capture MIC Path |
音頻輸入通道 |
|
Voice Call Pah |
通話音頻通道 |
裝置沒有通話模組,暫無法測試 |
Voip Pah |
IP電話音頻通道 |
情境Gtalk;值有:SPK/HP_NO_MIC/BT |
Speaker Playback Volume |
喇叭音量 |
和上層音量值無關 |
Headphone Playback Volume |
耳機音量 |
同上 |
Modem Input Enable |
暫不知何用 |
經測試不能控制音頻輸入輸出 |
|
|
|
Playback Path有:
英文 |
中文 |
備忘 |
OFF |
關閉 |
|
RCV |
- |
|
SPK |
擴音器 |
常用 |
HP |
耳機帶麥 |
|
HP_NO_MIC |
耳機無麥 |
常用 |
BT |
藍芽 |
|
SPK_HP |
- |
|
RING_SPK |
- |
|
RING_HP |
- |
|
RING_HP_NO_MIC |
- |
|
RING_SPK_HP |
- |
|
例:將輸出切換到擴音器
[email protected]:/ # tinymix 0 SPK
關於tinymix小結:
通過觀察發現,Android系統的聲音音量的調節並沒有直接使用tinyalsa,而基於上層軟體實現,因為無論上層音量怎麼改變,這裡看到的都是24(以我採用的裝置為例)。通道的切換是真正使用了tinyalsa,當通過不同通道播放音樂的時候可以即時觀察到通道的切換。在某個網站上看到Android在沒有聲音播放的3秒後會關於alsa,這裡也得到了證實,我以前認為Android系統會永久佔用音訊裝置。
當通過藍芽播放音樂的時候,已經不經過alsa了。tinymix查看得都處理關閉狀態,因為Android4.2的藍芽協議全部在使用者層實現了,直接走uart通道。這樣的設計方式一時半會不能理解。
4.使用tinyplay播放wav音樂
這個只是一個最基本的播放器,所以不支援播放MP3等等壓縮過格式的音樂。沒有學會使用前,網上都說很麻煩,但是現在看來一點也不麻煩,直接播放了44.1kHz/44.8kHz的wav音樂。
[python] view plain copy
- [email protected]:/ # tinyplay /sdcard/0_16.wav
- Playing sample: 2 ch, 44100 hz, 16 bit
- [email protected]:/ #
註:播放之前得首先使用tinymix把通道設定好,上文中已經給出了設定到擴音器中的例子;由於播放時使用的最大音量進行播放的,所以注意防止被嚇到。這裡將測試音頻檔案上傳。
5.tinycap使用
[email protected]:/ # tinycap /sdcard/test.wav
可以進行錄音。
目前只遇到這些,就先總結到這,可以隨時再深入。
20141014更新:
1.原來tinyalsa最原始的源碼在這裡tinyalsa_github。
2.自己fork一份,添加靜態編譯方法以及busybox方式的將tinymix/tinyplay/tinycap/tinypcminfo整合一個tinyalsa。
tinyalsa-utils 包含了tinymix/tinyplay/tinycap/tinypcminfo使用方法是 tinyalsa + 工具名。比如要運行tinymix,那麼就執行 tinyalsa mix或者tinyalsa tinymix。。
[email protected]:/ # 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
[email protected]:/ #
3.根據這個[PATCH] tinyalsa: new package資訊顯示,以後tinyalsa也會被整合進busybox中。
4.如果出現Failed to open mixer錯誤,代表你的Android裝置不是alsa音頻驅動,而是legacy OSS device。
製作靜態庫參考:Linux下Gcc產生和使用靜態庫和動態庫詳解
其它被證實為假的假設:
1.需要改寫init.rc讓系統不啟動android相關的服務(mediaserver)
2.需要通過其它途徑擷取tinyalsa.
-
頂
linux中的alsa工具與Android中的tinyalsa工具【轉】