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 0       //將Stereo DAC左右聲道的mute關閉  
  4. tinymix 21        //開啟喇叭的外部PA芯片  
  5. tinymix 41        //將Stereo DACR的聲音路由到AUX口輸出(因為實驗機器喇叭掛載AUX接口上)  
  6. tinymix 41        //將Stereo DACR的聲音路由到AUX口輸出(因為實驗機器喇叭掛載AUX接口上)  
  7. tinyplay z.wav  

 

4,  tinycap

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

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

 

[objc]  view plain  copy
 
  1. tinymix 130           //mic1 volume  
  2. tinymix 11            //mic1 boost on  
  3. tinymix 21            //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  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM