2010-05-16 16 views

Respuesta

9

La síntesis de tabla de ondas (PDF) es el método más realista de síntesis de instrumento real, ya que toma muestras y las altera ligeramente (por ejemplo, agregando vibrato, expresión, etc.).

Las formas de onda generadas por la mayoría de los instrumentos musicales (especialmente instrumentos de viento y de latón) son tan complejas que la síntesis algorítmica pura aún no está lo suficientemente optimizada para funcionar en el hardware actual, incluso si las complejidades técnicas de escribir dicho algoritmo son enorme.

Sitio de interés here.

+0

¿Hay algún tutorial en la red que muestre cómo generar el sonido de una nota específica de un instrumento específico? p.ej. A4 en el piano (440Hz) Una guía paso a paso con todas las ecuaciones y variables ... – LaSha

+2

@LaSha: de la página @Andy enlaces a: "En definitiva, usar síntesis aditiva no es eficiente. En la práctica, debe agregar una gran cantidad de frecuencias para hacer el sonido realista. He estado cerca de reproducir la nota de un piano acústico después de agregar casi un centenar de componentes de frecuencia. Los instrumentos que tienen envolventes de ataque agudas, como el impacto de martillo en un piano, requieren muchas frecuencias solo para haz que el comienzo agudo suene bien ". – egrunin

+2

@ergrunin: Es cierto que se deben agregar muchos componentes de frecuencia, pero existen técnicas de síntesis como FM (modulación de frecuencia) que permiten la adición de muchos componentes de frecuencia con solo unos pocos sinusoides utilizados para generarlos. Entonces, no es necesariamente cierto que la síntesis aditiva sea ineficiente. –

7

Es completamente posible - esa es una de las cosas synthesizers do.

Ser posible no significa que sea simple. Los sintetizadores suelen ser caros, y la cantidad de algoritmos utilizados es compleja: la página de wikipedia que he vinculado anteriormente tiene enlaces a algunos de ellos.

Los sonidos pregrabados son más simples y más económicos de usar, pero también tienen sus limitaciones: suenan más "repetitivos", por ejemplo.

4

Sin duda lo es, y hay muchos enfoques. Wolfram recientemente lanzó WolframTones, que (como era de esperar, si conoce a Wolfram) utiliza un autómata celular. Una descripción detallada de cómo funciona es here.

5

Hace varios años, la revista Sound on Sound publicó una excelente serie llamada "Synth Secrets" que ahora puede ser viewed online de forma gratuita. Ofrecen una buena introducción a los tipos de técnicas utilizadas en los sintetizadores de hardware (analógicos y digitales) e incluyen algunos artículos sobre las dificultades de reproducir ciertos sonidos de instrumentos del mundo real, como cuerdas pulsadas y dobladas, metales, tambores, pianos acústicos. etc.

2

Además de las respuestas proporcionadas aquí, también hay marcos de síntesis de análisis que construyen modelos matemáticos (a menudo basados ​​en capturar las trayectorias de componentes sinusoidales o de ruido) de un sonido de entrada, permitiendo la transformación y resíntesis. Algunos marcos bien conocidos son: SMS (disponible a través del proyecto C++ CLAM) y Loris.

Los modelos físicos de instrumentos también son una opción: modelan las propiedades físicas de un instrumento como la rigidez de la lámina, la apertura de la sopladura, el clic de teclas y suelen producir efectos realistas al incorporar efectos no lineales como sobregiro. STK es uno de estos marcos en C++.

Estos marcos generalmente son más pesados ​​que la opción de síntesis de tabla de ondas, pero pueden proporcionar más parámetros para la manipulación.

4

Karplus Strong Algorithm da una muy buena síntesis de una cuerda desplumada. También se puede codificar en unas pocas líneas de C. Se crea un búfer circular de flotantes (longitud proporcional a la longitud de onda, es decir, 1/f) y se llena de ruido aleatorio entre -1 y 1.

Luego, ciclo: en cada ciclo, reemplaza el valor en su índice actual con el promedio de los dos valores anteriores y emite este nuevo valor.

index = (index+1) % bufSize; 
outVal = buf[index] = decay * 0.5 * (buf[index-1] + buf[index-2]); 

La corriente de bytes resultante le da su sonido. Por supuesto, esto puede ser muy optimizado.

Para que su onda de sonido húmedo a 0.15 de su resistencia original después de un segundo, podría configurar la decadencia de este modo:

#define DECAY_1S =.15 
Float32 decay = pow(DECAY_1S, 1.0f/freq); 

Nota: es necesario que el tamaño del búfer original para que contenga una forma de onda completa. por lo tanto, si desea generar un sonido de 441 Hz y su frecuencia de muestreo es de 44.1 KHz, necesitará asignar 100 elementos en su búfer.

Puede pensar en esto como una cámara de resonancia, cuya frecuencia fundamental es 441Hz, inicialmente activada, con energía disipando hacia afuera desde cada punto del anillo simultáneamente. Mágicamente parece organizarse en armónicos de una frecuencia fundamental.

¿Alguien podría publicar más algoritmos? ¿Qué tal un algoritmo para un tono continuo?

+0

[Karplus-Strong-algorithm-Python] (http://flothesof.github.io/Karplus-Strong-algorithm-Python.html) (2017, ~ 20 páginas) tiene descripción, imágenes, fragmentos de código, muestras de audio, IPython cuaderno: 5 *. – denis

4

Después de varios días de caza, este el mejor recurso que he encontrado: https://ccrma.stanford.edu/~jos/

Este es un tesoro para el tema de los sonidos que sintetizan.

STK Por ejemplo, this page enlaces a un ejemplo C de sintetizar una cadena, también un conjunto de herramientas de sonido STK escrito en C++ para asistir a este trabajo.

Esto me mantendrá en silencio durante unas semanas mientras lo hojeo.

Cuestiones relacionadas