編輯:高級開發
我們曾經在一篇文章中為大家詳細介紹過有關android多媒體錄制功能的一些實現方法。其中就包括對錄音的實現方法。今天我們可以通過這篇文章介紹的內容詳細了解android錄音失真的具體解決方法,以幫助大家解決實際應用中出現的問題。
在6410+WM9714的android平台上測試MIC IN錄音功能,出現一個BUG。在該平台聲音播放是完全正常的,但是錄音後再播放剛錄的聲音,會有失真,同樣的錄音文件在電腦上播放也一樣,說明是android錄音失真的問題。後來通過打印9714的寄存器,發現錄音頻率是8000HZ,放音頻率是44100HZ,這時基本上可以確定是由這個不匹配引起的。
我在android代碼裡:AudioHardwareALSA.cpp文件中的函數中設定采樣率,如下:
- AudioStreamInALSA::AudiOStreamInALSA
(AudioHardwareALSA *parent) :mParent(parent)- {
- static StreamDefaults _defaults = {
- ....................
- sampleRate : AudioRecord::DEFAULT_SAMPLE_RATE,
- ....................
- };
- }
設定了:
- static const int DEFAULT_SAMPLE_RATE = 44100;
但是重燒程序後結果仍然存在android錄音失真這一問題,采樣率還是8000,似乎被其他地方把值覆蓋了。後來我試著把所有的采樣率8000的地方全都改成44100,結果仍然一樣是8000。到底是不是采樣率的原因引起的呢?
之後用arecord命令來錄音,前提是不能進入Android,否則音頻設備會被占用。結果錄得的聲音播放時仍然是同樣的效果,當時估計這問題應該跟android上層沒有什麼大的關系。後來別人有試通過將播放速度加快一倍,就得到的正常的播放音,但問題是仍然不知從何處來解決這個問題。
後來經過台灣同事的挖掘,改動錄音MIC IN的DMA SIZE解決了此次問題。改動列出如下,原因尚待分析。
- static struct s3c24xx_pcm_dma_params
s3c6400_ac97_mic_mono_in = {- .clIEnt = &s3c6400_dma_clIEnt_micin,
- .channel = DMacH_AC97_MIC_IN,
- .dma_addr = S3C6400_PA_AC97 + S3C_AC97_MIC_DATA,
- .dma_size = 2,///4
- };
該參數最終在s3c24xx_pcm_hw_params中修改DMA配置所用。android錄音失真的相關解決辦法就為大家介紹到這裡。
android 是Google開發的基於Linux平台的開源手機操作系統,每一個android應用在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解釋下
android手機平台強大之處還有許多,在這裡我們先涉及一些android操作系統的基本特性,許多的功能在在咱們國內是不可能實現了,不過目前已經支持中文的語音搜索還是看
前文中我們講過了在android開發中如何實現帶圖片和checkbox的listvIEw,如何把listview添加到popupwindow窗口中呢?關於這個listv
本文向你展示了在你的android應用程序中創建一個簡單的Button或ImageButton控件的步驟。首先,你會學到如何向你的布局文件中添加按鈕控件。然後你會學習如