本文轉載自:http://blog.csdn.net/radianceblau/article/details/64125411
目前linux中主流的音頻體系結構是ALSA(Advanced Linux Sound Architecture),ALSA在內核驅動層提供了alsa-driver,在應用層提供了alsa-lib,應用程序只需要調用alsa-lib提供的API就可以完成對底層硬件的操作。說的這么好,但是Android中沒有使用標准的ALSA,而是一個ALSA的簡化版叫做tinyalsa。Android中使用tinyalsa控制管理所有模式的音頻通路,我們也可以使用tinyalsa提供的工具進行查看、調試。
編譯tinyalsa后生成四個小工具:
- tinymix
- tinyplay
- tinycap
- tinypcminfo
編譯命令:
- mmm external/tinyalsa/
下面依次演示一下四個小工具的使用:(以下使用聯芯科技的LC1860平台配合LC1160電源+音頻芯片,截圖及演示效果均來自M7301P5測試機)
1, tinypcminfo
tinypcminfo用於查看pcm通道的相關信息
輸入:
- tinypcminfo -D /proc/asound/cards
結果如下:
從上面獲得的信息中可以知道PCM的采樣率,通道個數,采樣點數等信息。
其中 –D 后邊跟的參數為聲卡文件,一般位於/proc/asound/cards。可以使用
- cat /proc/asound/cards
查看當前聲卡
2, tinymix
如下圖所示,直接輸入tinymix可以得到音頻通路相關的各項配置參數。也可以通過添加參數修改其中的配置,如希望提高ADC1 Gain值到110,輸入tinymix 12 110即可。
單獨查看上述信息比較難以梳理,配合音頻通路圖會更加清晰。
上圖中紅色字體標明了LC1160與麥克風、耳機等硬件設備的連接關系。(注:M73xx項目由於內部ClassD不滿足要求,喇叭連在了AUX通路上)
各個通路上的增益調節部分使用綠色字體標出了與tinymix中選項的對應關系。
圖中加號與Mux是通路選擇開關,對應tinymix中的其它的選項,用於在各種模式下切換音頻通道。此部分比較多沒有在圖中一一標出,但根據已知的通路名是比較容易對應的。
圖中黃色箭頭標出的是通話時下行音頻數據流,從PCM接口進入到LC1160,然后經過MonoDAC進行數模轉化后送到聽筒。
圖中紫色箭頭標出的是通話時上行音頻數據流,從主MIC采集聲音后,經過ADC1進行模數轉換后由PMC的DO線送出
3, tinyplay
tinyplay是一個簡易的音樂播放器,一般用於播放測試。tinyplay只能播放wav原始格式的音樂,不能進行Mp3等格式的解碼,支持44.1kHz,48kHz采樣率的wav音樂。
在調用tinyplay播放音樂之前需要先使用tinymix切換好音頻通路:
- tinymix 0 I2SR //選擇Stereo DACR的音源為i2s
- tinymix 1 I2SL //選擇Stereo DACL的音源為i2s
- tinymix 2 0 0 //將Stereo DAC左右聲道的mute關閉
- tinymix 24 1 //開啟喇叭的外部PA芯片
- tinymix 40 1 //將Stereo DACR的聲音路由到AUX口輸出(因為實驗機器喇叭掛載AUX接口上)
- tinymix 41 1 //將Stereo DACR的聲音路由到AUX口輸出(因為實驗機器喇叭掛載AUX接口上)
- tinyplay z.wav
4, tinycap
tinycap是一個簡易的錄音軟件,一般用於錄音測試。
在調用tinycap錄音之前需要先調整好音頻通路:
- tinymix 14 30 //mic1 volume
- tinymix 19 1 //mic1 boost on
- tinymix 26 1 //adc1 -> mic1
- tinymix 50 ADC1 //i2sR out -> adc1
- tinymix 51 ADC1 //i2sL out -> adc2
- echo "0xfb 0x01" > /sys/devices/platform/comip_codec/lc1160_reg //bias poweron
- echo "0xad 0x08" > /sys/devices/platform/comip_codec/lc1160_reg //adc1 enable
- echo "0xac 0x01" > /sys/devices/platform/comip_codec/lc1160_reg //mic1 pga enable
- echo "0x3b 0xcc" > /sys/devices/platform/comip_codec/lc1160_reg //ldo
- echo 2 > /sys/bus/i2c/drivers/fm2018/0-0060/mode //bypass 外部的回聲消除音頻芯片(M730x項目特有)
- tinycap /sdcard/Music/l.wav
錄音結束通過ctrl+C強行退出即可,之后在/sdcard/Music/路徑下查看到l.wav音頻文件
使用adb pull到本地電腦中,使用goldwave播放、查看。
- adb pull /sdcard/Music/l.wav d:\
另外:
LC1160的寄存器是分頁的,即同一個地址上存在兩個不同含義的寄存器,通過控制0xFC寄存器中的值來切換到第二功能頁
- echo "0xfc 0x01" > /sys/devices/platform/comip_codec/lc1160_reg
- cat /sys/devices/platform/comip_codec/lc1160_reg
- echo "0xfc 0x00" > /sys/devices/platform/comip_codec/lc1160_reg