天天看點

Android音頻底層調試-基于tinyalsayxwkaifa 2016-04-01 原文1.編譯tinyalsa配套工具2.檢視目前系統的聲霸卡3.tinymix檢視混響器4.使用tinyplay播放wav音樂5.tinycap使用

yxwkaifa 2016-04-01 原文

因為Android中預設并沒有使用标準alsa,而是使用的是tinyalsa。是以就算基于指令行的測試也要使用libtinyalsa。Android系統在上層Audio千變萬化的時候,能夠能這些個工具實時檢視到,比方音頻通道的切換等等.

1.編譯tinyalsa配套工具

$ mmm external/tinyalsa/

編譯完後會産生tinyplay/tinymix/tinycap等等工具。

tinymix: 檢視配置混音器

tinyplay: 播放音頻

tinycap: 錄音

2.檢視目前系統的聲霸卡

  1. [email protected]:/ # cat /proc/asound/cards
  2. 0 [RKRK616 ]: RK_RK616 - RK_RK616
  3. RK_RK616
  4. 1 [ROCKCHIPSPDIF ]: ROCKCHIP-SPDIF - ROCKCHIP-SPDIF
  5. ROCKCHIP-SPDIF
  6. [email protected]:/ #

3.tinymix檢視混響器

tinymix用法a.不加不論什麼參數-顯示目前配置情況 b.tinymix [ctrl id] [var]不加[var]能夠檢視該[ctrl id]可選選項。

  1. [email protected]:/ # tinymix
  2. Number of controls: 7
  3. ctl type num name value
  4. 0 ENUM 1 Playback Path OFF
  5. 1 ENUM 1 Capture MIC Path MIC OFF
  6. 2 ENUM 1 Voice Call Path OFF
  7. 3 ENUM 1 Voip Path OFF
  8. 4 INT 2 Speaker Playback Volume 0 0
  9. 5 INT 2 Headphone Playback Volume 0 0
  10. 6 ENUM 1 Modem Input Enable ON
  11. [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音樂。

  1. [email protected]:/ # tinyplay /sdcard/0_16.wav
  2. Playing sample: 2 ch, 44100 hz, 16 bit
  3. [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.

Android音頻底層調試-基于tinyalsa的更多相關文章

  1. [轉]Android音頻底層調試-基于tinyalsa

    http://blog.csdn.net/kangear/article/details/38139669 [-] 編譯tinyalsa配套工具 檢視目前系統的聲霸卡 tinymix檢視混響器 使用ti ...

  2. Android音頻介紹

    這個世界音頻裝置千變萬化,Android也不可能為每種裝置都提供支援.Android定義了一個架構,這個架構來适配底層的音頻裝置.該适配層的定義位于: hardware/libhardware_leg ...

  3. Android音頻系統之音頻架構

    1.1 音頻架構 轉載請注明,From LXS, http://blog.csdn.net/uiop78uiop78/article/details/8796492 Android的音頻系統在很長一段 ...

  4. Android音頻處理——通過AudioRecord去儲存PCM檔案進行錄制,播放,停止,删除功能

    Android音頻處理--通過AudioRecord去儲存PCM檔案進行錄制,播放,停止,删除功能 音頻這方面很博大精深,我這裡肯定講不了什麼進階的東西,最多也隻是一些基礎類知識,首先,我們要介紹一下 ...

  5. 高通Android平台硬體調試之Camera篇

    之前一段時間有幸在高通android平台上調試2款camera sensor,一款是OV的5M YUV sensor,支援jpeg out,同時也支援AF,調試比較比較簡單,因為别的項目已經在使用了, ...

  6. Android的底層庫libutils介紹

    第一部分 libutils概述 libutils是Android的底層庫,這個庫以C++實作,它提供的API也是C++的.Android的層次的C語言程式和庫,大都基于libutils開發. libu ...

  7. Android音頻開發之——如何播放一幀音頻

    本文重點關注如何在Android平台上播放一幀音頻資料.閱讀本文之前,建議先讀一下<Android音頻開發(1):基礎知識>,因為音頻開發過程中,經常要涉及到這些基礎知識,掌握了這些重要的 ...

  8. Android開發自學筆記(基于Android Studio1.3.1)—1.環境搭建(轉)

    一.引言    本套學習筆記的開發環境是Windows 10 專業版和Android Studio 的最新版1.3.1. Android Studio 是一個Android開發環境,基于Intelli ...

  9. Android音頻焦點詳解(上)

    轉載請注明出處:http://www.cnblogs.com/landptf/p/6384112.html 2017年開年第一篇部落格,很早就想總結一下Android音頻的相關知識.今天我們先來看一下音 ...

繼續閱讀