Ottenere la frequenza corrispondente ad una nota Midi e viceversa
Indice
Ottenere la frequenza corrispondente ad una nota Midi
Come è noto, nel Midi le note sono numerate da 0 a 127.
Per ottenere la frequenza corrispondente ad una nota Midi e viceversa, sono possibili almeno tre modalità.
Uso delle sole funzioni di Gambas
Il calcolo della frequenza può essere effettuato mediante almeno due modalità.
In entrambe le possibilità poniamo il caso di voler trovare la frequenza sonora, alla quale corrisponde la nota Midi num. 69 (LA).
1a modalità
Public Sub Main()
Dim frequenza As Float
Dim nota_Midi As Byte
' Otteniamo per esempio il numero della nota Midi corrispondente al La (hz 440) corrispondente numero 69:
nota_Midi = 69
' La frequenza di riferimento è quella del Do centrale (hz 261,63):
frequenza = 261.63 * (2 ^ (1 / 12)) ^ (nota_Midi - 60)
Print "Frequenza = hz";; frequenza
End
2a modalità
Private Const M_LN2l As Float = 0.69314718055995 Public Sub Main() Dim nota_midi, freq As Single nota_midi = 69 freq = (nota_midi + 3.0) / 12.0 freq = Exp(freq * M_LN2l) freq *= 6.875 Print "La nota Midi "; nota_midi; " = "; freq; " hertz" End
Uso dell'API di Libaubio
La libreria Libaubio consente, fra l'altro, di convertire una nota Midi nella corrispondente frequenza sonora.
Per poter fruire in Gambas delle risorse della libreria Libaubio, è necessario installare nel sistema e richiamare in Gambas la libreria dinamica condivisa: "libaubio:4.0.0"
Mostriamo un esempio pratico:
Library "libaubio:4.0.0" ' smpl_t aubio_miditofreq (smpl_t midi) ' Convert midi value (0-128) to frequency (Hz). Private Extern aubio_miditofreq(midi As Single) As Single Public Sub Main() Dim freq, mid As Single mid = 69 freq = aubio_miditofreq(mid) Print "\n\nNota Midi "; mid; "\nFrequenza: hz "; freq End
Ottenere la nota Midi corrispondente ad una frequenza sonora
Per ottenere la nota Midi corrispondente ad una la frequenza sonora, sono possibili almeno tre modalità.
Uso delle sole funzioni di Gambas
Il calcolo del numero della nota Midi mediante le sole risorse di Gambas può essere effettuato mediante almeno due modalità.
1a modalità
Paragrafo in costruzione !
2a modalità
Private Const M_LN2l As Float = 0.69314718055995 Public Sub Main() Dim nota_midi, freq As Single freq = 440.0 nota_midi = ((Log(freq / 6.875) / M_LN2l) * 12) - 3 Print "La frequenza Hz "; freq; " = nota Midi "; nota_midi End
Uso dell'API di Libaubio
Mostriamo un esempio pratico:
Library "libaubio:4.0.0" ' smpl_t aubio_miditofreq (smpl_t midi) ' Convert midi value (0-128) to frequency (Hz). Private Extern aubio_miditofreq(midi As Single) As Single Public Sub Main() Dim freq, mid As Single freq = 440.0 mid = aubio_freqtomidi(freq) Print "Frequenza: hz "; freq; "\nNota Midi "; mid End