Frage

Ich schreibe rohes Audio-Bytes aus zwei Dateien in eine neue WAV-Datei, die beiden Dateien zu kombinieren. Die resultierende Datei, die erstellt wird, hat den Inhalt der beiden Audio-Clips, aber es gibt auch eine Menge Lärm in der Datei.

Kann mich jemand deutet auf ein gutes Beispiel dafür, wie man eine Datei rohes Audio-Bytes schreiben? Hier ist die grundlegende Logik, die ich verfolge

SInt32 leftSample1 = ReadSampleFromFile1(music_iter1);
leftSample1 = (SInt32)((float) leftSample1 * 0.7071); //to avoid clipping

SInt32 leftStereoSample2 = ReadLeftSample(music_iter2);
leftStereoSample2 += leftSample1;
if (leftStereoSample2 > 32767)
leftStereoSample2 = 32767;
else if (leftStereoSample2 < -32768
leftStereoSample2 = -32768;
// write leftStereoSample2 to the file
//do the same as left sample to right sample also

++music_iter2;
++music_iter1;

Danke.

War es hilfreich?

Lösung

wie oft sind diese Rückkehr wahr?

if (leftStereoSample2 > 32767)
leftStereoSample2 = 32767;
else if (leftStereoSample2 < -32768
leftStereoSample2 = -32768;

, nur weil Sie nicht Clipping sind, (weil Sie es zwingt nicht zu) bedeutet nicht, man wird nicht Artefakte erhalten (Verzerrung) usw., wenn Sie die Wellen so gestutzt. Ich würde sehen, wie oft das passiert.

Core Audio hat Mixer. intelligente Menschen haben Code mit dieser Art von Sachen zu beschäftigen bereits geschrieben, so dass wir nicht haben MultiChannelMixer man :) ist die Stereo-Misch tut. check it out.

Andere Tipps

Ihre Tests für 65535 und -65536 sind falsch (würde 17 Bits benötigen). Versuchen Sie 32767 und -32768.

Ich bin die Codezeile nicht sicher zu „verhindern Clipping“ tatsächlich tut es ist Aufgabe; würden Sie nicht effektiv ausschlagen müssen beide Ströme vor ihnen beizutreten?

Versuchen Sie, zwei viel, viel leisere Dateien zu kombinieren. Und statt 0,7071 auf beiden Dateien, versuchen 0.5. Oder nur MultiChannelMixer verwenden, wie Aran vorgeschlagen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top