Ich mische zwei 16bit PCM Samples in einen kurzen Puffer.Java - 16bit Mono PCM Rohdaten in Stereo umwandeln
// This is our buffer for PCM audio data
mp3Buffer = new short[minBufferSize];
wavBuffer = new short[minBufferSize];
mixedBuffer = new short[minBufferSize];
Ich fülle diese Puffer mit Samples aus den MP3- und WAV-Dateien. Ich habe herausgefunden, dass die WAV-Datei immer in Mono ist und das MP3 wird immer Stereo sein.
Ich habe gelesen, dass, wenn Sie
„Nur einen Puffer zuweisen doppelt so groß wie der Original-PCM-Daten, und für jede Probe in dem ursprünglichen Puffer zweimal in den neuen Puffer setzen“ kannshort[] 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);
}
Wie Ich beende das? Ich habe es versucht, aber das WAV-Audio ist jetzt mit normaler Geschwindigkeit, klingt aber nach Chipmunk.
Sie sagen, dass ein Puffer von "minBufferSize" N Sekunden Audio ist, aber ein anderes ist 2N Sekunden Audio? – Gabe
Ich habe die Frage geupdated, nach der Recherche scheint es besser, einfach das Mono in Stereo umzuwandeln, aber ich habe immer noch Probleme. minbufferSize ist N Sekunden Audio in Stereo. Also wenn ich den wavbuffer in 1: 1 mische, spielt es viel zu schnell. – nawlrus
Was macht die Operation mit dem 'mixedBuffer'? Wenn Sie nur ein Sample zu einem anderen hinzufügen und das Ergebnis so runden, dass es in die 16 Bits passt, erhalten Sie nichts Gutes. Sie müssen das Ergebnis skalieren. Wie für die rohen WAV-Daten, ja, Sie müssen nur die Samples verschachteln (vorausgesetzt, Sie haben die Datenheader korrigiert). – Malcolm