2つの16ビットPCMサンプルを短いバッファーに混合します。Java - 16ビットモノラルPCMの生データをステレオに変換する
// This is our buffer for PCM audio data
mp3Buffer = new short[minBufferSize];
wavBuffer = new short[minBufferSize];
mixedBuffer = new short[minBufferSize];
これらのバッファにmp3ファイルとwavファイルの両方のサンプルを埋め込みます。 wavファイルは常にモノラルで、mp3は常にステレオになることがわかった。
私はどのようにあなたがいる場合「だけのオリジナル緩衝液中で2回、元のPCMデータのサイズ、およびすべてのサンプルのためのバッファを割り当てる新しい緩衝液中で2回それを置く」という
short[] stereoWavBuffer = new short[minBufferSize];
int k = 1;
for (int j = 0; j < minBufferSize/2; j += 2)
{
stereoWavBuffer[j] = wavBuffer[j];
stereoWavBuffer[k] = wavBuffer[k];
k += 2;
}
// TO DO - Add the 2 buffers together
for (int i = 0; i < minBufferSize; i++){
mixedBuffer[i] = (short)(mp3Buffer[i] + stereoWavBuffer[i]);
}
track.write(mixedBuffer, 0, minBufferSize);
}
を読みました私はこれを達成する?私はこれを試しましたが、wavオーディオは今では普通のスピードですが、チンパンジーのように聞こえます。
「minBufferSize」の1つのバッファがオーディオのN秒ですが、もう1つのバッファは2N秒のオーディオですか? – Gabe
質問を更新しましたが、研究の結果、モノラルをステレオに変換する方が良いようですが、まだ問題が残っています。 minbufferSizeはステレオでN秒間の音声です。だから私は1:1でwavbufferをミックスすると、あまりにも速く再生されます。 – nawlrus
'mixedBuffer'の操作は何をしますか? 1つのサンプルを別のサンプルに追加して16ビットに収まるように結果を丸めれば、良い結果は得られません。結果をスケールする必要があります。生のWAVデータについては、はい、サンプルをインタリーブするだけです(データヘッダーを修正したと仮定して)。 – Malcolm