2016-01-14 77 views
5

我的應用是測量捕獲音頻的音量,作爲樣本絕對振幅的函數。撥打電話後Android麥克風靈敏度發生變化

我注意到了Android SDK的android.media.AudioRecord中的意外行爲。讓我們假設以下流程:

  1. 應用程序啓動
  2. 音頻音量正在測量
  3. 電話電話接聽/撥打
  4. 音頻音量正在測量

的周圍噪音麥克風由具有恆定音量設置的電視機制作。對於點2測量的值在[55-65]範圍內,並且對於點4測量的值在範圍[15-25]中(請參見下面的音頻可視化對於2.和4.)。

我知道在發生電話時必須進行一些音量調節。是否有可能監視這些調整或擺脫它們?

我試過AutomaticGainControl,但它不支持我的Nexus 5,我不想使用它,因爲目標設備可能不支持它。

更新 此卷調整後,才電話發生。我剛剛注意到電話剛躺在桌子上測量音量時的相同行爲。

PCM audio before and after the phone call

回答

1

至於你的應用程序與其他應用程序(在這個問題上的麥克風)資源共享 - 你應該總是仔細地對待它們,並假設有配置的電話或其他使用相似的轉換過程中可能會改變到另一個使用麥克風的應用程序。

,而不是試圖監視增益變化,這可能需要root或其他高特權 - 我會採取另一種方法,並做到以下幾點:

  1. 保存的麥克風靈敏度水平提高到一個配置文件(shared_prefs )在用戶正在錄製時的錄製活動中。如果用戶在使用您的應用程序期間更改它,請執行相同操作。
  2. 在錄製活動的onResume PROC - 加載麥克風靈敏度級別值,並繼續記錄(How to adjust microphone sensitivity while recording audio in android - Solved

如果有電話拋出你的應用背景和控制前設置的麥克風,一旦完成 - 您的應用程序將返回到前臺並保留麥克風靈敏度級別進一步錄製。

希望這會有所幫助。

+0

對於像麥克風這樣的共享資源,你是絕對正確的。你什麼意思是在1?我計算每個記錄樣本的音量,這不是一個UI設置。我的另一個擔憂是收益不會保持音質。 –

+1

對於1 - 保存您每次​​錄製所需的所有麥克風設置,並在應用程序返回到前景時恢復它。 – FunkSoulBrother

+0

感謝您的意見@FunkSoulBrother。這些都是有效的建議,但對我來說主要問題在** Update **部分中突出顯示。沒有電話事件,我發生了靈敏度變化 - 應用程序在前臺,手機甚至沒有SIM卡。我需要在錄製時提供穩定的音質。 –