私が理解しているように、私が使用しているオーディオ バイト配列 (PCM ステレオ 16 ビット) は、サンプルあたり 4 バイトです。バイト値を反転すると (つまり、-128 から 128 および 128 から -128)、サラウンド チャンネルにサウンドが配置されないことに気付きました。同じように聞こえます(フロントオーディオ)。すべてのバイトではなく、1 つおきのバイト (2 バイトごと) を反転して実験したところ、サラウンド サウンドのようなものが得られましたが、非常に汚れていて途切れ途切れです。オーディオがサラウンド チャンネルに配置されるように、通常の PCM 16 ビット ステレオ WAV ファイル (バイト配列形式) を正確に操作するにはどうすればよいですか?
私のコード:
public byte[] putInSurround(byte[] audio) {
for (int i = 0; i < audio.length; i += 4) {
int i0 = audio[i + 0];
int i1 = audio[i + 1];
int i2 = audio[i + 2];
int i3 = audio[i + 3];
if (0 > audio[i + 0]) {
i0 = Math.abs(audio[i + 0]);
}
if (0 < audio[i + 0]) {
i0 = 0 - audio[i + 0];
}
if (0 > audio[i + 1]) {
i1 = Math.abs(audio[i + 1]);
}
if (0 < audio[i + 1]) {
i1 = 0 - audio[i + 1];
}
if (0 > audio[i + 2]) {
i2 = Math.abs(audio[i + 2]);
}
if (0 < audio[i + 2]) {
i2 = 0 - audio[i + 2];
}
if (0 > audio[i + 3]) {
i3 = Math.abs(audio[i + 3]);
}
if (0 < audio[i + 3]) {
i3 = 0 - audio[i + 3];
}
audio[i + 0] = (byte) i0;
//audio[i + 1] = (byte) i1; <-- Commented Out For Every Other Byte.
//audio[i + 2] = (byte) i2; <-- Commented Out For Every Other Byte.
audio[i + 3] = (byte) i3;
}
return audio;
}