Question

J'écris des octets audio bruts de deux fichiers dans un nouveau fichier wav pour combiner les deux fichiers. Le fichier résultant qui est créé a le contenu des deux clips audio mais il y a aussi beaucoup de bruit dans le fichier.

Quelqu'un peut-il m'indiquer un bon exemple montrant comment écrire des octets audio bruts dans un fichier? Voici la logique de base que je suis

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;

Merci.

Était-ce utile?

La solution

combien de fois ces réponses sont-elles vraies?

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

Le fait que vous ne coupiez pas (parce que vous le forcez à ne pas le faire) ne signifie pas que vous ne risquez pas d’obtenir des artefacts (distorsion), etc. Je verrais combien de fois cela se passait.

le noyau audio a des mélangeurs. les gens intelligents ont déjà écrit du code pour gérer ce genre de choses, nous n’avons donc pas à le faire :) MultiChannelMixer est un mixeur stéréo. jetez-y un œil.

Autres conseils

Vos tests pour 65535 et -65536 sont incorrects (il faudrait 17 bits). Essayez 32767 et -32768.

Je ne suis pas sûr que la ligne de code destinée à "empêcher l'écrêtage". fait réellement son travail; N'auriez-vous pas besoin de refuser efficacement les deux flux avant de les rejoindre?

Essayez de combiner deux fichiers beaucoup plus silencieux. Et au lieu de 0.7071 sur les deux fichiers, essayez 0.5. Ou utilisez simplement MultiChannelMixer, comme suggéré par Aran.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top