バイト配列に格納されたオーディオ データを取得し、それをビッグ エンディアンの short 配列に変換し、エンコードしてから、バイト配列に戻す際に問題が発生しています。これが私が持っているものです。元のオーディオ データは audioBytes2 に格納されます。代わりに、cos 関数にマイナスを付けて、デコードに同じ形式を使用しています。残念ながら、byte および short データ型の変更は交渉不可能です。
short[] audioData = null;
int nlengthInSamples = audioBytes2.length / 2;
audioData = new short[nlengthInSamples];
for (int i = 0; i < nlengthInSamples; i++) {
short MSB = (short) audioBytes2[2*i+1];
short LSB = (short) audioBytes2[2*i];
audioData[i] = (short) (MSB << 8 | (255 & LSB));
}
int i = 0;
while (i < audioData.length) {
audioData[i] = (short)(audioData[i] + (short)5*Math.cos(2*Math.PI*i/(((Number)EncodeBox.getValue()).intValue())));
i++;
}
short x = 0;
i = 0;
while (i < audioData.length) {
x = audioData[i];
audioBytes2[2*i+1] = (byte)(x >>> 0);
audioBytes2[2*i] = (byte)(x >>> 8);
i++;
}
これを機能させるために考えられることはすべて実行しましたが、最も近いのは、他のすべてのエンコード/デコードを機能させることであり、その理由はわかりません。助けてくれてありがとう。