2016-05-31 29 views
1

録音されたサウンドが特定のしきい値を超えると、オーディオの録音を開始する必要があるアンドロイドアプリケーションを構築しています。AndroidでmediaRecorder.getMaxAmplitude()によって返された値を分析する方法

私は、MediaRecorderクラスのgetMaxAmplitude()メソッドが、音圧の尺度としてのノイズのラウドネスの推定値を与えることを研究し、発見しました。 0〜+ 32767の範囲の値を返します。

ここに私が書いたコードがあります。

MediaRecorder mediaRecorder = new MediaRecorder(); 
while(True){ 
    if (mediaRecorder.getMaxAmplitude() > THRESHOLD) 
     System.out.println("Recording sound"); 
    else 
     System.out.println("Sound recording not above the threshold level); 
} 

私はトラブルgetMaxAmplitude()関数によって返される値のための標準的な単位が存在しないので、閾値を考え出すを持っています。誰かが、getMaxAmplitude()関数から返された値からデシベル(dB)または他の有用な単位への変換を提案できるのが望ましいでしょう。

+0

私はこの質問に対する答えを見つけようとしています。私が1つを考え出すなら、それを答えとして掲示するでしょう。 – aditya

答えて

2

getMaxAmplitude()の出力を解釈する簡単な方法はありません。携帯電話の特定のハードウェアに最大限の価値を与えるだけです。残念ながら、メーカーがAndroid OSの要件に準拠しているということは、すべてのマイクから同じ応答を得ることを保証するものではありません。実際、同じメーカーのすべてのデバイスでも同じ種類のマイクがないため、同じ周波数応答や感度を得ることはできません。このadimentional(ハードウェアに依存する音の強さに比例する)単位からdBに変換する場合はgetMaxAmplitude()単位が返されます。dB = 20log10(getMaxAmplitude())を使用してください。これを幅広いデバイスで動作させたい場合は、アプリケーションにキャリブレーションステージを含めるようアドバイスします。そのため、絶対値ではなく動的デバイスに依存するしきい値を設定できます。たぶん、校正時の強度と撮影しようとしている瞬間の強度との関係として、しきい値を設定することができます。私はあなたのアプリの詳細を知らないが、もし私があなただったら、私はこれら2つの事の少なくとも1つを比較することを念頭に置くだろう。マイクの入力が最もきつく飽和している瞬間(たぶんスピーカーから大きな音を出して録音することができます)

+0

はい、これはかなり意味があります。私は、このようにキャリブレーションを行うことを考えています。電話のマイクを使って、かなりの環境で音を録音し、電話を使って電話のスピーカーから出力された音を録音します。私は、サウンドメーターのようなアプリケーションがどのように作られたのか、またはサウンドメーターが計算されたデシベル値を使用するために提供するAPIがあるかと思います。 – aditya

+0

これがあなたにとって良い答えであれば、誰もがこれが問題を解決する方法であることを知っているように、それを合格とマークしてください。サウンドメーターアプリの作り方や、他のユーザーが使用するためのAPIを提供しているかどうかはわかりません。何か検索をしてください。答えが見つからない場合は別の質問を投稿してください。 – VMMF

+0

私はこの回答に正しいとマークしたいと思いますが、これを使って問題を完全に解決できませんでした。私はいくつかの分析を行い、この質問で指定された数式は、サウンドメーターのようなアプリで計算されたおよそ45と比較して60としてデシベル値を計算します。私はまだ正しい答えとしてマークする前に、他の人が答えを出して自分の研究をするのを好むだろう。 – aditya

関連する問題