Estou desenvolvendo uma emulação de software de um sintetizador analógico. Estou tentando modular o tom de um oscilador usando um LFO. Para cada amostra fornecida ao sistema de som do computador, estou calculando a frequência a ser inserida no oscilador principal como este (pseudocódigo):
osc_frequency = note_frequency * (1 + tuning) * (1 + lfo_y * lfo_mod_depth)
As variáveis nesta declaração são descritas a seguir:
- note_frequency = frequência da nota a ser tocada em Hz
- tuning = ajuste fino do oscilador em porcentagem da afinação tocada (ex: -0,02 = desafinação em 2%)
- lfo_y = valor y atual da forma de onda lfo (varia de -1 a 1)
- lfo_mod_depth = profundidade / intensidade do efeito a aplicar ao oscilador em porcentagem
No entanto, esse cálculo não produz o resultado desejado. Espero ouvir o tom modular para cima e para baixo, bloqueado em torno da frequência central (nota sendo tocada). O que estou recebendo é um efeito de modulação que faz com que o tom "fuja"; Não sei exatamente o que está acontecendo, mas parece um destes:
- A intensidade da modulação aumenta com o tempo (a marca de frequência alta / baixa alcançada pela modulação aumenta / diminui quanto mais tempo a nota é mantida)
- Enquanto a intensidade da modulação permanece constante ao longo do tempo, a frequência central aumenta enquanto a modulação oscila em torno dela
Estou usando a abordagem correta ou não? Caso contrário, qual deve ser a abordagem correta? Qualquer ajuda com isso é muito apreciada.
fonte
Respostas:
Como disse Jason, pode ser simplesmente que você não esteja implementando seu oscilador corretamente - por exemplo, multiplicando a frequência pelo tempo, em vez de integrá-lo.
Observe também - e isso não está relacionado ao seu tópico, mas realmente vale a pena observar - que sua fórmula para modulação de frequência implementa um comportamento muito diferente do da maioria dos sintetizadores, e parecerá estranho para um músico.
Por exemplo, se lfo_y oscilar entre -1 e 1; lfo_mod_depth é 0,5; e se note_frequency for igual a 220 Hz, osc_frequency varrerá entre 110 e 330 - ou seja, entre -1 oitava e +1 quinto ao redor da nota. Portanto, a modulação do tom parecerá centralizada na escala hertz, mas não será centralizada na escala musical perceptiva.
O comportamento correto é ter algo como:
Então:
Isso é chamado de "FM exponencial" e é a norma nos sintetizadores. Nos sintetizadores analógicos, isso é implementado somando o sinal LFO ao CV que atinge o conversor exponencial do VCO. Nos sintetizadores digitais, isso é implementado aplicando as modulações em uma representação interna de alta resolução de afinação que ainda está em uma escala musical - antes de converter para uma frequência ou um incremento de fase.
fonte