Estoy desarrollando una emulación de software de un sintetizador analógico. Estoy tratando de modular el tono de un oscilador usando un LFO. Para cada muestra alimentada al sistema de sonido de la computadora, estoy calculando la frecuencia que se ingresará en el oscilador principal de esta manera (pseudocódigo):
osc_frequency = note_frequency * (1 + tuning) * (1 + lfo_y * lfo_mod_depth)
Las variables en esta declaración se describen a continuación:
- note_frequency = frecuencia de la nota que se reproducirá en Hz
- afinación = ajuste fino del oscilador en porcentaje del tono jugado (ej .: -0.02 = desintonizar en 2%)
- lfo_y = valor actual y de la forma de onda lfo (rangos de -1 a 1)
- lfo_mod_depth = profundidad / intensidad del efecto a aplicar al oscilador en porcentaje
Sin embargo, este cálculo no produce el resultado deseado. Espero escuchar el tono modular arriba y abajo, bloqueado alrededor de la frecuencia central (se reproduce la nota). Lo que obtengo es un efecto de modulación que hace que el tono "se escape"; No puedo decir exactamente qué está sucediendo, pero parece uno de estos:
- La intensidad de la modulación aumenta con el tiempo (la marca de frecuencia alta / baja alcanzada por la modulación aumenta / disminuye cuanto más tiempo se mantenga la nota)
- Mientras que la intensidad de la modulación permanece constante a lo largo del tiempo, la frecuencia central aumenta mientras la modulación oscila a su alrededor.
¿Estoy usando el enfoque correcto o no? Si no, ¿cuál debería ser el enfoque correcto? Cualquier ayuda con esto es muy apreciada.
fuente
Respuestas:
Como dijo Jason, esto podría ser simplemente que no está implementando su oscilador correctamente, por ejemplo, multiplicando la frecuencia por el tiempo en lugar de integrarlo.
Tenga en cuenta también, y esto no está relacionado con su tema, pero realmente vale la pena observarlo, que su fórmula para la modulación de frecuencia implementa un comportamiento muy diferente al de la mayoría de los sintetizadores y sonará extraño para un músico.
Por ejemplo, si lfo_y oscila entre -1 y 1; lfo_mod_depth es 0.5; y si note_frequency es igual a 220 Hz, osc_frequency barrerá entre 110 y 330, es decir, entre -1 octava y +1 quinto alrededor de la nota. Por lo tanto, la modulación de tono parecerá estar centrada en la escala hertzial, pero no estará centrada en la escala musical perceptiva.
El comportamiento correcto es tener algo como:
Entonces:
Esto se llama "FM exponencial", y esta es la norma en los sintetizadores. En los sintetizadores analógicos, esto se implementa sumando la señal del LFO al CV que golpea el convertidor exponencial del VCO. En los sintetizadores digitales, esto se implementa aplicando las modulaciones en una representación interna de tono de alta resolución que todavía está en una escala musical, antes de convertir a una frecuencia o un incremento de fase.
fuente