3

電話がヘッドホンでノイズを出しているときに現在のオーディオ出力ボリュームを取得する方法を見つける必要があります。この値はデシベルレベルに変換されます。android APIには、一見任意の音量設定レベル以外の一定の音量レベルにアクセスする方法はないようですが、それを標準のデシベルレベルまたは「ラウドネス」測定値に変換する方法はわかりません。これにマイクを使用する方法をいくつか見てきましたが、ヘッドセットではうまく機能しません。

比較するために可能な最大デシベル(またはいくつかの標準)出力レベル、またはヘッドセットに送信される電圧を測定する方法を知っている人はいますか?

ヘルプを歓迎します。

4

2 に答える 2

7

「デシベル」という言葉にはさまざまな意味があることに注意してください。これは、基準点を基準にした量(強度/パワー/ラウドネスなど)を表す手段です。機器内のオーディオ信号、またはオーディオアプリケーションの場合、ピークレベルは0dBです。スピーカーから音が放出されると、知覚されるラウドネスは音圧レベルとして測定され、 「dB(SPL)」(またはdBAなどの加重バリアント)と呼ばれることがよくあります。100dBでのロックコンサートなどの値の表を見ると、これが説明されているSPLです。この測定値は、それ自体が基準レベルを基準にしています。

したがって、APIで利用できるのは、生の信号(最大0dB)の観点からオーディオレベルを簡単に取得できるオーディオデータのバッファーです。ただし、これはハードウェアに依存するため、これを物理的なラウドネスに簡単に変換することはできません。それは電話のモデルごとに異なり、ヘッドホンにも依存します。これを行う唯一の方法は、SPLメーターで測定して電話を調整することですが、これにより、この特定の電話でのみ妥当な結果が得られる結果が得られます。

于 2013-01-22T09:22:31.397 に答える
0

私はこのようにやっています:

SLmillibel gain_to_attenuation(float volume)
{
    SLmillibel volume_mb;
    if(volume>=1.0f) volume_mb=SL_MILLIBEL_MAX;
    else if(volume<=0.02f) volume_mb=SL_MILLIBEL_MIN;
    else
    {
        volume_mb=M_LN2/log(1.0f/(1.0f-volume))*-1000.0f;
        if(volume_mb>0) volume_mb=SL_MILLIBEL_MIN;
    }
    return volume_mb;
}
于 2013-01-31T03:49:03.997 に答える