Je développe une émulation logicielle d'un synthétiseur analogique. J'essaie de moduler la hauteur d'un oscillateur en utilisant un LFO. Pour chaque échantillon envoyé au système audio de l'ordinateur, je calcule la fréquence à entrer dans l'oscillateur principal comme ceci (pseudocode):
osc_frequency = note_frequency * (1 + tuning) * (1 + lfo_y * lfo_mod_depth)
Les variables de cette instruction sont décrites comme suit:
- note_frequency = fréquence de la note à jouer en Hz
- accord = réglage fin de l'oscillateur en pourcentage de la hauteur jouée (ex: -0,02 = désaccord de 2%)
- lfo_y = valeur y actuelle de la forme d'onde lfo (varie de -1 à 1)
- lfo_mod_depth = profondeur / intensité de l'effet à appliquer à l'oscillateur en pourcentage
Cependant, ce calcul ne donne pas le résultat souhaité. Je m'attends à entendre la hauteur moduler de haut en bas, verrouillée autour de la fréquence centrale (note jouée). Ce que j'obtiens, c'est un effet de modulation qui fait "fuir" la hauteur; Je ne peux pas dire exactement ce qui se passe, mais cela ressemble à l'un d'eux:
- L'intensité de la modulation augmente avec le temps (la marque de haute / basse fréquence atteinte par la modulation augmente / diminue plus la note est maintenue)
- Alors que l'intensité de modulation reste constante dans le temps, la fréquence centrale augmente tandis que la modulation oscille autour d'elle
Suis-je en train d'utiliser la bonne approche ou non? Sinon, quelle devrait être la bonne approche? Toute aide à cet égard est très appréciée.
la source
Réponses:
Comme l'a dit Jason, cela pourrait simplement être que vous n'implémentez pas correctement votre oscillateur - par exemple en multipliant la fréquence par le temps au lieu de l'intégrer.
Notez également - et cela n'est pas lié à votre sujet mais mérite vraiment d'être observé - que votre formule de modulation de fréquence met en œuvre un comportement très différent de celui de la plupart des synthétiseurs, et sonne étrangement pour un musicien.
Par exemple, si lfo_y oscille entre -1 et 1; lfo_mod_depth vaut 0,5; et si note_frequency est égal à 220 Hz, osc_frequency balaiera entre 110 et 330 - c'est-à-dire entre -1 octave et +1 cinquième autour de la note. Ainsi, la modulation de hauteur apparaîtra centrée sur l'échelle hertz, mais ne sera pas centrée sur l'échelle musicale perceptuelle.
Le comportement correct est d'avoir quelque chose comme:
Alors:
C'est ce qu'on appelle "FM exponentielle", et c'est la norme sur les synthétiseurs. Sur les synthétiseurs analogiques, cela est mis en œuvre en additionnant le signal LFO au CV qui frappe le convertisseur exponentiel du VCO. Sur les synthétiseurs numériques, cela est mis en œuvre en appliquant les modulations sur une représentation interne haute résolution de la hauteur qui est toujours à l'échelle musicale - avant de la convertir en fréquence ou en incrément de phase.
la source