ho fatto esperimenti con Sintesi FM per creare file audio e utilizzando ADSR inviluppi per modellare il suono risultante. FM significa modulazione di frequenza.ADSR significa attacco, decadimento, sostegno e rilascio. ADSR descrive una curva che determina la velocità con cui il volume di una nota aumenta (attacco) e diminuisce (decadimento) quando si preme un tasto, qual è il volume sostenuto mentre si tiene premuto il tasto e come il volume della nota si attenua quando il tasto viene rilasciato. Un'immagine tipica di una curva ADSR ha quattro linee rette:
A, D, R are time; S is a levelA, D, R sono il tempo; S è un livello
La forma d'onda sottostante non ha modulazione (tutti i picchi e le valli sono equidistanti).
Se guardi la parte superiore del primo ciclo nel grafico, vedrai un piccolo problema tecnico. Dato che stavo scrivendo il codice, ho pensato di aver commesso un errore; lo zoom lo fa sembrare un errore significativo che potrebbe influire leggermente sul suono.
Actually, two glitchesIn realtà, due difetti
L'attacco è stato fissato a 0,001 secondi e il decadimento a 0,003; a 44.100 campioni al secondo l'attacco termina al campione 44 e il decadimento termina intorno al campione 176. Ho creato una tabella di dati per creare una versione semplificata e alla fine ho capito che il problema tecnico è causato dagli angoli acuti nella curva ADSR. Per risolverlo, inserisco una spline nella curva ADSR. Finché la tensione della spline è sufficientemente alta, il problema tecnico è troppo sottile per essere notato. (Si tratta di dati semplificati, non dei dati che hai sentito sopra e più sotto.)
The orange spline-based curves are hiding behind the purple curves; at this zoom they are nearly identical.Le curve arancioni basate su spline si nascondono dietro le curve viola; a questo zoom sono quasi identici.
Ingrandisci un po' l'angolo tra le curve di decadimento e di sostegno:
The solid sine curve is rising, but slowing. The dotted purple decay curve is falling, but about to become flat (sustain.)La curva sinusoidale solida è in aumento, ma in rallentamento. La curva di decadimento viola tratteggiata sta diminuendo, ma sta per diventare piatta (sustain.)
La curva tratteggiata arancione è un'interpolazione spline dei punti nella curva tratteggiata viola. La curva arancione solida è l'onda sinusoidale originale moltiplicata per l'involucro arancione per ridimensionarla. L'errore della curva viola sembra essere di circa 1 parte su 1000; Non sono sicuro se sarà udibile o meno. Nell'intervallo +/- 32767 di dati del file wave, sarebbe circa 32, 2 ^ 5, forse nel 5 ° bit di un numero a 16 bit, forse 60 dB in meno. Penso che con una buona attrezzatura e orecchie giovani dovrebbe essere udibile.
Ingrandito, sembra un bene onda sinusoidale distorta.
The glitch is gone. The leading part of the sine wave is flattened by the rising gain of the attack.Il problema tecnico è sparito. La parte principale dell'onda sinusoidale è appiattita dal guadagno crescente dell'attacco.
File in allegato. Su Windows utilizza PlaySound nella DLL multimediale. Ci sono un paio di interruttori in alto. Non utilizza alcun codice FM e, più ci penso, probabilmente implementa la modulazione di fase piuttosto che la modulazione di frequenza. Non è pronto per più di questa demo.