Procesamiento de sonido C ++ [cerrado]
-
06-07-2019 - |
Pregunta
Estoy buscando una biblioteca que pueda usarse para manipular archivos de audio. Esencialmente, lo que me gustaría hacer es:
-
Cargar un archivo MP3 / WAV
-
Obtenga un clip de 15 segundos del archivo
-
Superponga otro archivo MP3 / WAV encima
-
Renderizar como un nuevo archivo MP3 / WAV
Solución
Puede usar cualquier API de códec MP3 común para decodificar la transmisión, trabajar con ella y guardarla nuevamente. Por ejemplo, podría usar libLAME para esta parte.
En cuanto a la mezcla, puede hacerlo usted mismo (por ejemplo, ingenuamente, agregar dos muestras y dividir por dos, lo que puede no sonar demasiado bien), o encontrar una biblioteca adecuada para ello.
También es posible que le interese una pregunta relacionada sobre el desbordamiento de pila en la mejor biblioteca de audio c de Linux
Otros consejos
No es compatible con MP3 por razones de patentes, pero libsndfile es muy agradable biblioteca de código abierto (LGPL) para cargar y guardar audio en una variedad de otros formatos de audio, incluido WAV.
En cuanto a la parte de superposición, eso es fácil una vez que tiene las muestras cargadas en la memoria ... simplemente suma cada muestra en el archivo A con su muestra correspondiente en el archivo B (y posiblemente reduce el valor de la muestra resultante un poco hacia abajo multiplicando por una constante, si te preocupa el recorte).
La biblioteca libsox de sox (y no http://libsox.sourceforge.net/ que es algo completamente diferente) parece tener una API simple que se puede utilizar. La documentación da el siguiente ejemplo para la mezcla estéreo a mono:
Representar muestras como enteros pueden causar problemas al procesar el audio. Por ejemplo, si un efecto a mezclar canales izquierdo y derecho en un canal monofónico debía usar el línea
*obuf++ = (*ibuf++ + *ibuf++)/2;
puede producirse distorsión ya que la adición intermedia puede desbordarse 32 bits La línea
*obuf++ = *ibuf++/2 + *ibuf++/2;
solucionaría el problema de desbordamiento (a expensas del menor bit significativo).
Puedes intentar echarle un vistazo http://terminatorx.org/ Lo estaba mirando para hacer algo similar.
Una muy buena biblioteca de audio / sintetizador C ++ es STK . Hace un montón de cosas y está bajo licencia de tipo BSD / MIT, es decir, puede usarlo para desarrollar productos comerciales. Wav es compatible pero no MP3. Para MP3, puede usar irrklang , por ejemplo, que es gratuito para uso no comercial (también MAD por underbit, es usado por mucha gente).