2009-11-23 12 views
7

Mi pregunta no está completamente relacionada con la programación, pero creo que SO es el lugar adecuado para preguntar.¿Cómo mezclar muestras de audio?

En mi programa genero algunos datos de audio y guardo la pista en un archivo WAV. Todo funciona bien con un generador de sonido. Pero ahora quiero agregar más generadores y mezclar los datos de audio generados en un solo archivo. Desafortunadamente, es más complicado de lo que parece a primera vista. Además, no encontré mucha información útil sobre cómo mezclar un conjunto de muestras de audio.

¿Hay alguien que pueda darme consejos?

edición:

estoy de programación en C++. Pero no importa, ya que estaba interesado en la teoría detrás de la mezcla de dos pistas de audio. El problema que tengo es que no puedo resumir las muestras porque a menudo produce un sonido distorsionado.

+0

idioma ¿Qué programación y de la plataforma? –

+0

¿Qué idioma estás usando? ¿Qué bibliotecas? Da algunos más detalles. – Poindexter

Respuesta

6

Supongo que su problema es que por cada fuente de audio que está agregando, debe bajar los niveles.

Si la aplicación le da control a un usuario, simplemente déjelos controlar los niveles directamente. Hotness es su responsabilidad, no tuya. Esto es "sumando".

Si la mezcla está automatizada, you're about to go on a journey. Probablemente necesites compresión, si no limitación. (Limitar es una versión extrema de compresión.)

Tenga en cuenta que cualquier cosa que haga con el audio (incluida la compresión y la limitación) es una forma de distorsión, por lo que tendrá coloración del audio. Su elección de algoritmos de compresión y limitación afectará el sonido.

Como no está generando el audio en tiempo real, tiene la posibilidad de limitar la "pared de ladrillo". Eso es porque tienes conocimiento previo de los niveles. La limitación en tiempo real es más limitada porque no puede saber lo que está por venir, tiene que ser reactivo.

¿Es esta música, efectos de sonido, voces, qué?

Los programadores here se ocupan de esto todo el tiempo.

+0

Gracias por adivinar lo que quería hacer con mi pregunta original;) ​​ – ralle

+0

Es un problema bastante común, como se puede imaginar. – Nosredna

+0

Ciertamente, me encuentro con el mismo problema al mezclar dos sonidos generados en actionscript 3. Gracias por los enlaces, parece que tengo algo de lectura que hacer en los compresores. – vitch

0

Nunca dijo qué lenguaje de programación y plataforma, sin embargo, por ahora asumiré que Windows usa C#.

http://www.codeplex.com/naudio

gran biblioteca de código abierto que realmente cubre fuera de un montón de las cosas que te encuentras en la mayoría de las operaciones de audio.

5

Mezclar muestras de audio significa sumarlas, eso es todo. Normalmente, los agrega a un tipo de datos más grande para que pueda detectar el desbordamiento y fijar los valores antes de volver a enviarlos al búfer de destino. Si sabe de antemano que tendrá desbordamiento, entonces puede escalar sus amplitudes antes de la suma: simplemente multiplique por un valor de coma flotante entre 0 y 1, nuevamente teniendo en cuenta el problema de la precisión, quizás convirtiendo primero a un tipo de datos más grande.

Si tiene un problema específico que no se trata, puede actualizar su pregunta original.

+0

La sujeción es limitante y suena bastante mal. Es más probable que desee una rodilla en esa limitación. :-) – Nosredna

+0

Podría, pero eso es técnicamente algo más aparte de lo que preguntó :) – Kylotan

2

mezcla sucia de dos muestras

mix = (a + b) - a * b * sign(a + b) 
Cuestiones relacionadas