私は、44100、16 ビット モノラルで AudioRecord を使用してオーディオ ソースを録音する Android アプリケーションの保守を引き継ぎました。8000 にダウンサンプリングする必要があります。現在のアプリにはダウンサンプリング アルゴリズムが含まれており、正しく機能しているかどうかはわかりません。別のアプリ (ブラック ボックス) がそれを受信すると、音声は再生されますが、バックグラウンドで大きなブーンという音がし、音声が予想よりも遅くなります。受信アプリにパイプされた適切な形式の他のオーディオは、問題なく正常に受信されます。
私が持っているアルゴリズムはここにリストされています(変数名に基づいて、どこかから逆コンパイルされたコードだったと思います)。
private void downSample() {
int v5 = 0;
int v4 = 0;
int v2;
for (v2 = 0; v2 < 0xA0; ++v2) {
v5 += 0xD755;
int v6 = v5 / 0x2710;
v5 -= v6 * 0x2710;
double v0 = 0;
int v3 = v4;
v4 += v6;
while (v3 < v4) {
v0 += ((double) ((((float) this.readBuffer[v3])) * this.volume));
++v3;
}
v0 /= ((double) v6);
if (32767 < v0) {
v0 = 32767;
}
else if (-32768 > v0) {
v0 = -32768;
}
this.downSampledBuffer[v2] = ((short) (((int) v0)));
}
}
readBuffer は、記録ソースによって入力される short[] です。downSampledBuffer も short[] です。何がうまくいかないのかについて何か考えはありますか?