he estado experimentando con síntesis FM para crear archivos de audio y usar ADSR envolventes para dar forma al sonido resultante. FM significa modulación de frecuencia.ADSR significa Ataque, Decaimiento, Sostenimiento y Liberación. ADSR describe una curva que determina qué tan rápido aumenta (ataca) y disminuye (decae) el volumen de una nota cuando se presiona una tecla, cuál es el volumen sostenido mientras se mantiene presionada la tecla y cómo se desvanece el volumen de la nota cuando se suelta la tecla. Una imagen típica de una curva ADSR tiene cuatro líneas rectas:
A, D, R are time; S is a levelA, D, R son tiempo; S es un nivel
La siguiente forma de onda no tiene modulación (todos los picos y valles están igualmente espaciados).
Si observa la parte superior del primer ciclo en el gráfico, verá un pequeño error. Como estaba escribiendo el código, supuse que había cometido un error; hacer zoom hace que parezca un error significativo que podría afectar un poco el sonido.
Actually, two glitchesEn realidad, dos fallos
El ataque se fijó en 0,001 segundos y el decaimiento en 0,003; a 44.100 muestras por segundo, el ataque termina en la muestra 44 y el decaimiento termina alrededor de la muestra 176. Construí una tabla de datos para hacer una versión simplificada y finalmente me di cuenta de que la falla es causada por las esquinas afiladas en la curva ADSR. Para solucionarlo, ajusto una spline a la curva ADSR. Siempre que la tensión de la spline sea lo suficientemente alta, el fallo es demasiado sutil para notarlo. (Estos son datos simplificados, no los datos que escuchó arriba y más abajo).
The orange spline-based curves are hiding behind the purple curves; at this zoom they are nearly identical.Las curvas anaranjadas basadas en splines se esconden detrás de las curvas moradas; con este zoom son casi idénticos.
Acérquese un poco a la esquina entre las curvas de caída y sostenimiento:
The solid sine curve is rising, but slowing. The dotted purple decay curve is falling, but about to become flat (sustain.)La curva sinusoidal sólida está aumentando, pero desacelerándose. La curva de decaimiento púrpura punteada está cayendo, pero a punto de volverse plana (sostenida).
La curva naranja punteada es una interpolación spline de los puntos en la curva violeta punteada. La curva naranja sólida es la onda sinusoidal original multiplicada por la envolvente naranja para reducirla. El error de la curva morada parece ser de aproximadamente 1 parte en 1000; No estoy seguro de si eso será audible o no. En el rango de +/- 32767 de datos de archivos de ondas, eso sería alrededor de 32, 2^5, tal vez en el quinto bit de un número de 16 bits, tal vez 60 dB por debajo. Creo que con un buen equipo y oídos jóvenes debería ser audible.
Ampliado, parece un bien onda sinusoidal distorsionada.
The glitch is gone. The leading part of the sine wave is flattened by the rising gain of the attack.El fallo se ha ido. La parte principal de la onda sinusoidal es aplanada por la ganancia creciente del ataque.
Archivo adjunto. En Windows usa PlaySound en la DLL multimedia. Hay un par de interruptores en la parte superior. No está usando ningún código FM, y cuanto más lo pienso, probablemente implementa modulación de fase en lugar de modulación de frecuencia. No está preparado para más que esta demo.