<button id="u2w23"></button>

<tbody id="u2w23"><track id="u2w23"></track></tbody><dd id="u2w23"><track id="u2w23"></track></dd><button id="u2w23"><acronym id="u2w23"></acronym></button> <tbody id="u2w23"><noscript id="u2w23"></noscript></tbody>

  • <button id="u2w23"></button><li id="u2w23"><acronym id="u2w23"><cite id="u2w23"></cite></acronym></li>

  • Android錄音失真具體解決方案

    [來源] 達內    [編輯] 達內   [時間]2012-09-18

    但是重燒程序后結果仍然存在Android錄音失真這一問題,采樣率還是8000,似乎被其他地方把值覆蓋了。后來我試著把所有的采樣率8000的地方全都改成44100,結果仍然一樣是8000。到底是不是采樣率的原因引起的呢?

    我們曾經在一篇文章中為大家詳細介紹過有關Android多媒體錄制功能的一些實現方法。其中就包括對錄音的實現方法。今天我們可以通過這篇文章介紹的內容詳細了解Android錄音失真的具體解決方法,以幫助大家解決實際應用中出現的問題。

    在6410+WM9714的Android平臺上測試MIC IN錄音功能,出現一個BUG。在該平臺聲音播放是完全正常的,但是錄音后再播放剛錄的聲音,會有失真,同樣的錄音文件在電腦上播放也一樣,說明是Android錄音失真的問題。后來通過打印9714的寄存器,發現錄音頻率是8000HZ,放音頻率是44100HZ,這時基本上可以確定是由這個不匹配引起的。
    我在Android代碼里:AudioHardwareALSA.cpp文件中的函數中設定采樣率,如下:

    1. AudioStreamInALSA::AudioStreamInALSA
      (AudioHardwareALSA *parent) :mParent(parent)   
    2. {   
    3. static StreamDefaults  _defaults = {   
    4. ....................   
    5. sampleRate : AudioRecord::DEFAULT_SAMPLE_RATE,   
    6. ....................   
    7. };   

    設定了:

    1. static const int DEFAULT_SAMPLE_RATE = 44100;  

    但是重燒程序后結果仍然存在Android錄音失真這一問題,采樣率還是8000,似乎被其他地方把值覆蓋了。后來我試著把所有的采樣率8000的地方全都改成44100,結果仍然一樣是8000。到底是不是采樣率的原因引起的呢?

    之后用arecord命令來錄音,前提是不能進入Android,否則音頻設備會被占用。結果錄得的聲音播放時仍然是同樣的效果,當時估計這問題應該跟Android上層沒有什么大的關系。后來別人有試通過將播放速度加快一倍,就得到的正常的播放音,但問題是仍然不知從何處來解決這個問題。

    后來經過臺灣同事的挖掘,改動錄音MIC IN的DMA SIZE解決了此次問題。改動列出如下,原因尚待分析。

    1. static struct s3c24xx_pcm_dma_params 
      s3c6400_ac97_mic_mono_in = {  
    2. .client  = &s3c6400_dma_client_micin,  
    3. .channel = DMACH_AC97_MIC_IN,  
    4. .dma_addr =  S3C6400_PA_AC97 + S3C_AC97_MIC_DATA,  
    5. .dma_size = 2,///4  
    6. }; 

    該參數最終在s3c24xx_pcm_hw_params中修改DMA配置所用。Android錄音失真的相關解決辦法就為大家介紹到這里。

    資源下載

    ?