linux驅動由淺入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音頻子系統之一【轉】

本文轉載自: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後生成四個小工具:

 

[objc] view plain copy

 

  1. tinymix  
  2. tinyplay  
  3. tinycap  
  4. tinypcminfo  

 

編譯命令:

[objc] view plain copy

 

  1. mmm external/tinyalsa/  


 

下面依次演示一下四個小工具的使用:(以下使用聯芯科技的LC1860平臺配合LC1160電源+音頻芯片,截圖及演示效果均來自M7301P5測試機)

1,  tinypcminfo

tinypcminfo用於查看pcm通道的相關信息

輸入:

 

[objc] view plain copy

 

  1. tinypcminfo -D /proc/asound/cards  

 

結果如下:

從上面獲得的信息中可以知道PCM的採樣率,通道個數,採樣點數等信息。

其中 –D 後邊跟的參數爲聲卡文件,一般位於/proc/asound/cards。可以使用

 

[objc] view plain copy

 

  1. 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切換好音頻通路:

 

[objc] view plain copy

 

  1. tinymix 0 I2SR      //選擇Stereo DACR的音源爲i2s  
  2. tinymix 1 I2SL      //選擇Stereo DACL的音源爲i2s  
  3. tinymix 2 0 0       //將Stereo DAC左右聲道的mute關閉  
  4. tinymix 24 1        //開啓喇叭的外部PA芯片  
  5. tinymix 40 1        //將Stereo DACR的聲音路由到AUX口輸出(因爲實驗機器喇叭掛載AUX接口上)  
  6. tinymix 41 1        //將Stereo DACR的聲音路由到AUX口輸出(因爲實驗機器喇叭掛載AUX接口上)  
  7. tinyplay z.wav  

 

4,  tinycap

tinycap是一個簡易的錄音軟件,一般用於錄音測試。

在調用tinycap錄音之前需要先調整好音頻通路:

 

[objc] view plain copy

 

  1. tinymix 14 30           //mic1 volume  
  2. tinymix 19 1            //mic1 boost on  
  3. tinymix 26 1            //adc1 -> mic1  
  4. tinymix 50 ADC1         //i2sR out -> adc1  
  5. tinymix 51 ADC1     //i2sL out -> adc2  
  6. echo "0xfb 0x01" >  /sys/devices/platform/comip_codec/lc1160_reg     //bias poweron  
  7. echo "0xad 0x08" >  /sys/devices/platform/comip_codec/lc1160_reg //adc1 enable  
  8. echo "0xac 0x01" >  /sys/devices/platform/comip_codec/lc1160_reg     //mic1 pga enable  
  9. echo "0x3b 0xcc" >  /sys/devices/platform/comip_codec/lc1160_reg     //ldo  
  10. echo 2 > /sys/bus/i2c/drivers/fm2018/0-0060/mode     //bypass 外部的回聲消除音頻芯片(M730x項目特有)  
  11.   
  12. tinycap /sdcard/Music/l.wav  

 

錄音結束通過ctrl+C強行退出即可,之後在/sdcard/Music/路徑下查看到l.wav音頻文件

使用adb pull到本地電腦中,使用goldwave播放、查看。

[objc] view plain copy

 

  1. adb pull /sdcard/Music/l.wav d:\  


 

另外:

LC1160的寄存器是分頁的,即同一個地址上存在兩個不同含義的寄存器,通過控制0xFC寄存器中的值來切換到第二功能頁

 

[objc] view plain copy

 

    1. echo "0xfc 0x01" >  /sys/devices/platform/comip_codec/lc1160_reg   
    2. cat /sys/devices/platform/comip_codec/lc1160_reg  
    3. echo "0xfc 0x00" >  /sys/devices/platform/comip_codec/lc1160_reg  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章