Pregunta

Estoy escribiendo bytes de audio sin procesar de dos archivos en un nuevo archivo wav para combinar los dos archivos. El archivo resultante que se crea tiene el contenido de ambos clips de audio, pero también hay mucho ruido en el archivo.

¿Puede alguien indicarme un buen ejemplo que muestre cómo escribir bytes de audio en bruto en un archivo? Aquí está la lógica básica que estoy siguiendo

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;

Gracias.

¿Fue útil?

Solución

¿Cuántas veces se vuelven verdad?

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

simplemente porque no está recortando, (porque está forzando que no lo haga) no significa que no obtendrá artefactos (distorsión), etc. cuando trunca las ondas de esa manera. vería la frecuencia con la que estaba sucediendo.

audio central tiene mezcladores. las personas inteligentes ya han escrito código para lidiar con este tipo de cosas, así que no tenemos que hacerlo :) MultiChannelMixer es uno que hace mezclas estéreo. échale un vistazo.

Otros consejos

Sus pruebas para 65535 y -65536 son incorrectas (necesitarían 17 bits). Prueba 32767 y -32768.

No estoy seguro de la línea de código para " evitar el recorte " en realidad está haciendo su trabajo; ¿no necesitarías rechazar de manera efectiva las transmisiones ambas antes de unirte a ellas?

Intenta combinar dos archivos mucho más silenciosos. Y en lugar de 0.7071 en ambos archivos, intente con 0.5. O simplemente use MultiChannelMixer, como lo sugiere Aran.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top