5

Mediaplayer からリアルタイムで振幅を計算することに関する別の投稿を読んでいますが、私にとって有用な値を取得する方法が明確ではありません。私が必要としているのは、0 ~ 100 の間で正規化される線形振幅値ですが、別の投稿で見たように、あまり意味のない db 計算を実行しているため、最大 0dB 値に正規化されていないためです (計算方法からリアルタイムでのオーディオ振幅 (Android) ):

double amplitude = 0;
for (int i = 0; i < audioData.length/2; i++) {
    double y = (audioData[i*2] | audioData[i*2+1] << 8) / 32768.0
    // depending on your endianness:
    // double y = (audioData[i*2]<<8 | audioData[i*2+1]) / 32768.0
    amplitude += Math.abs(y);
}
amplitude = amplitude / audioData.length / 2;

デシベルの計算については、以下のようにする必要があることを確認しました(メディアプレーヤーから振幅のデシベル(dB)を計算する方法から

double sum=0;
for (int i = 0; i < audioData.length/2; i++) {
    double y = (audioData[i*2] | audioData[i*2+1] << 8) / 32768.0;
    sum += y * y;
}
double rms = Math.sqrt(sum / audioData.length/2);
dbAmp = 20.0*Math.log10(rms);

私はその解決策を試しましたが、リアルタイムの値は0に近いですが、時には0を超えています. . とにかく、dB値ではなく、正規化された値[0-100]を取得したいと思います。

4

0 に答える 0