j'ai expérimenté avec Synthèse FM pour créer des fichiers audio et utiliser ADSR enveloppes pour façonner le son résultant. FM signifie modulation de fréquence.ADSR signifie Attack, Decay, Sustain et Release. L'ADSR décrit une courbe qui détermine la vitesse à laquelle le volume d'une note augmente (attaque) et diminue (décroissance) lorsqu'une touche est enfoncée, quel est le volume soutenu lorsque la touche est maintenue enfoncée et comment le volume de la note s'estompe lorsque la touche est relâchée. Une image typique d'une courbe ADSR comporte quatre lignes droites :
A, D, R are time; S is a levelA, D, R are time; S is a levelA, D, R are time; S is a levelA, D, R are time; S is a levelA, D, R sont le temps ; S est un niveau
La forme d'onde ci-dessous n'a pas de modulation (tous les pics et vallées sont également espacés.)
Si vous regardez en haut du premier cycle du graphique, vous verrez un petit bug. Depuis que j'écrivais le code, j'ai supposé que j'avais fait une erreur; le zoom donne l'impression d'une erreur importante qui pourrait avoir un peu d'impact sur le son.
Actually, two glitchesActually, two glitchesActually, two glitchesActually, two glitchesEn fait, deux bugs
L'attaque a été fixée à 0,001 seconde et la décroissance à 0,003 seconde ; à 44 100 échantillons par seconde, l'attaque se termine à l'échantillon 44 et la décroissance se termine autour de l'échantillon 176. J'ai construit une table de données pour en faire une version simplifiée et j'ai finalement réalisé que le problème était causé par les angles vifs de la courbe ADSR. Pour résoudre ce problème, j'adapte une spline à la courbe ADSR. Tant que la tension de la spline est suffisamment élevée, le problème est trop subtil pour être remarqué. (Ce sont des données simplifiées, pas les données que vous avez entendues ci-dessus et ci-dessous.)
The orange spline-based curves are hiding behind the purple curves; at this zoom they are nearly identical.The orange spline-based curves are hiding behind the purple curves; at this zoom they are nearly identical.The orange spline-based curves are hiding behind the purple curves; at this zoom they are nearly identical.The orange spline-based curves are hiding behind the purple curves; at this zoom they are nearly identical.Les courbes orange basées sur les splines se cachent derrière les courbes violettes ; à ce zoom, ils sont presque identiques.
Zoomez un peu sur le coin entre les courbes de déclin et de maintien :
The solid sine curve is rising, but slowing. The dotted purple decay curve is falling, but about to become flat (sustain.)The solid sine curve is rising, but slowing. The dotted purple decay curve is falling, but about to become flat (sustain.)The solid sine curve is rising, but slowing. The dotted purple decay curve is falling, but about to become flat (sustain.)The solid sine curve is rising, but slowing. The dotted purple decay curve is falling, but about to become flat (sustain.)La courbe sinusoïdale continue monte, mais ralentit. La courbe de décroissance violette en pointillés est en baisse, mais sur le point de devenir plate (soutenir).
La courbe orange pointillée est une interpolation spline des points de la courbe violette pointillée. La courbe orange continue est l'onde sinusoïdale d'origine multipliée par l'enveloppe orange pour la réduire. L'erreur de la courbe violette semble être d'environ 1 pour 1000 ; Je ne sais pas si cela sera audible ou non. Dans la plage +/- 32767 de données de fichier wave, ce serait environ 32, 2 ^ 5, peut-être dans le 5ème bit d'un nombre de 16 bits, peut-être 60 dB en dessous. Je pense qu'avec un bon matériel et de jeunes oreilles ça devrait être audible.
Zoomé, cela ressemble à un bien onde sinusoïdale déformée.
The glitch is gone. The leading part of the sine wave is flattened by the rising gain of the attack.The glitch is gone. The leading part of the sine wave is flattened by the rising gain of the attack.The glitch is gone. The leading part of the sine wave is flattened by the rising gain of the attack.The glitch is gone. The leading part of the sine wave is flattened by the rising gain of the attack.Le pépin est parti. La partie avant de l'onde sinusoïdale est aplatie par le gain croissant de l'attaque.
Fichier joint. Sous Windows, il utilise PlaySound dans la DLL multimédia. Il y a quelques interrupteurs en haut. Il n'utilise aucun code FM, et plus j'y pense, il implémente probablement une modulation de phase plutôt qu'une modulation de fréquence. Il n'est pas prêt pour plus que cette démo.