iPhone - beaucoup de bruit dans un fichier audio
-
06-07-2019 - |
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.
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.