Differenze tra le versioni di "Eseguire un file MIDI mediante il componente gb.sdl2.audio"
(14 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
− | Le risorse della libreria ''SDL2'' per la gestione dell'audio e del Midi sono state implementate in Gambas attraverso il | + | Le risorse della libreria ''SDL2'' per la gestione dell'audio e del Midi sono state implementate in Gambas attraverso il Componente ''gb.sdl2.audio'' il quale può essere attivato anche indipendentemente dal Componente ''gb.sdl2'' . |
− | |||
− | Il | + | Il Componente ''gb.sdl2.audio'' fornisce per l'esecuzione dei file Midi la Classe ''Music''. |
+ | <BR>E' possibile eseguire <SPAN Style="text-decoration:underline">un solo</span> file Midi per volta. | ||
− | + | ||
+ | ===Scegliere il banco di suoni=== | ||
+ | E' possibile scegliere mediante la Proprietà ".SoundFontPath" della Classe ''Music'' il percorso del file banco dei suoni (''soundfont bank'') di formato .SF2 per la riproduzione dei suoni con il Midi. | ||
+ | Music.SoundFontPath = "<FONT Color=darkgreen>''/percorso/del/soundfont/bank/file.sf2''</font>" | ||
+ | |||
+ | |||
+ | ===Modificare il volume=== | ||
+ | La Classe ''Music'' fornisce la Proprietà ".Volume", per modificare il volume audio dell'esecuzione. | ||
+ | <BR>L'ambito dei valori possibili va da 0 a 128. | ||
+ | |||
+ | Esempio: | ||
+ | Music.Volume = 110 | ||
===Esempio di esecuzione con un'applicazione in ambiente grafico=== | ===Esempio di esecuzione con un'applicazione in ambiente grafico=== | ||
− | Mostriamo un semplice esempio in applicazione grafica, nel quale si avrà anche la possibilità di arrestare, mettere in pausa l'esecuzione del file Midi e modificare il volume sonoro con uno ''Slider'': | + | Mostriamo un semplice esempio in applicazione grafica, nel quale si avrà anche la possibilità di arrestare, mettere in pausa l'esecuzione del file Midi e modificare il volume sonoro con uno ''Slider'' : |
− | + | Public Sub Form_Open() | |
<FONT Color=gray>' ''E' possibile caricare un file banco dei suoni ".sf2" a piacere:''</font> | <FONT Color=gray>' ''E' possibile caricare un file banco dei suoni ".sf2" a piacere:''</font> | ||
− | Music<FONT Color=#B22222>.SoundFontPath</font> = "<FONT Color= | + | Music<FONT Color=#B22222>.SoundFontPath</font> = "<FONT Color=darkgreen>''/percorso/del/soundfont/bank/file.sf2''</font>" |
With Slider1 | With Slider1 | ||
Riga 27: | Riga 38: | ||
ToggleButton2.Enabled = False | ToggleButton2.Enabled = False | ||
− | + | End | |
+ | |||
+ | |||
+ | Public Sub ToggleButton1_Click() | ||
− | + | If ToggleButton2.Value = True Then Return | |
Select Case ToggleButton1.Value | Select Case ToggleButton1.Value | ||
Case True | Case True | ||
With Music | With Music | ||
− | .Load("<FONT Color= | + | .Load("<FONT Color=darkgreen>''/percorso/del/file.mid''</font>") |
.Play | .Play | ||
End With | End With | ||
Riga 42: | Riga 56: | ||
.Text = "Pausa" | .Text = "Pausa" | ||
End With | End With | ||
+ | Repeat | ||
+ | Wait 0.01 | ||
+ | Me.Title = Str(Time(0, 0, 0, Music.Pos * 1000)) | ||
+ | Until Music.State == Music.Stopped | ||
+ | Esecuzione() | ||
Case False | Case False | ||
− | + | Esecuzione() | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
End Select | End Select | ||
− | + | End | |
+ | |||
+ | |||
+ | Private Procedure Esecuzione() | ||
− | + | Music.Stop | |
+ | ToggleButton1.Text = "Esegui" | ||
+ | ToggleButton1.Value = False | ||
+ | With ToggleButton2 | ||
+ | .Value = False | ||
+ | .Enabled = False | ||
+ | .Text = Null | ||
+ | End With | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub ToggleButton2_Click() | ||
Select Case ToggleButton2.Value | Select Case ToggleButton2.Value | ||
Case True | Case True | ||
Music.Pause | Music.Pause | ||
+ | ToggleButton1.Text = Null | ||
+ | ToggleButton1.Enabled = False | ||
ToggleButton2.Text = "Riprendi" | ToggleButton2.Text = "Riprendi" | ||
Case False | Case False | ||
Music.Play | Music.Play | ||
+ | ToggleButton1.Text = "Stop" | ||
+ | ToggleButton1.Enabled = True | ||
ToggleButton2.Text = "Pausa" | ToggleButton2.Text = "Pausa" | ||
End Select | End Select | ||
− | + | End | |
+ | |||
− | + | Public Sub Slider1_Change() | |
Music.Volume = Slider1.Value | Music.Volume = Slider1.Value | ||
− | |||
ValueBox1.Value = Slider1.Value | ValueBox1.Value = Slider1.Value | ||
− | + | End | |
===Esempio di esecuzione con un'applicazione ''a riga di comando''=== | ===Esempio di esecuzione con un'applicazione ''a riga di comando''=== | ||
In quest'altro esempio viene eseguito un file Midi con un'applicazione ''a riga di comando''. Il codice consente di vedere ''continuamente'' anche il tempo trascorso dall'inizio dell'esecuzione del file Midi: | In quest'altro esempio viene eseguito un file Midi con un'applicazione ''a riga di comando''. Il codice consente di vedere ''continuamente'' anche il tempo trascorso dall'inizio dell'esecuzione del file Midi: | ||
− | + | Public Sub Main() | |
+ | |||
+ | Dim mid As String | ||
+ | |||
+ | mid ="<FONT Color=darkgreen>''/percorso/del/file.mid''</font>" | ||
<FONT Color=gray>' ''Possiamo scegliere il file del banco di suoni ".sf2" che vogliamo utilizzare:''</font> | <FONT Color=gray>' ''Possiamo scegliere il file del banco di suoni ".sf2" che vogliamo utilizzare:''</font> | ||
− | Music<FONT Color=#B22222>.SoundFontPath</font> = "<FONT Color= | + | Music<FONT Color=#B22222>.SoundFontPath</font> = "<FONT Color=darkgreen>''/percorso/del/soundfont/bank/file.sf2''</font>" |
− | Music.Load( | + | Music.Load(mid) |
Music.Play | Music.Play | ||
− | + | ||
+ | <FONT Color=gray>' ''Questo ciclo consente l'esecuzione del file Midi:''</font> | ||
While Music.State == Music.Playing | While Music.State == Music.Playing | ||
<FONT Color=gray>' ''Mostra il tempo trascorso dall'inizio dell'esecuzione:''</font> | <FONT Color=gray>' ''Mostra il tempo trascorso dall'inizio dell'esecuzione:''</font> | ||
− | Write "\r" & Str(Time(0, 0, 0, Music.Pos * 1000)) | + | Write "\r\e[0mTempo trascorso: \e[31m" & Str(Time(0, 0, 0, Music.Pos * 1000)) |
+ | Wait 0.01 | ||
Wend | Wend | ||
Music.Stop | Music.Stop | ||
− | + | End | |
− | |||
In questo secondo esempio di esecuzione di un file Midi con un'applicazione ''a riga di comando'' si potrà interagire con essa inviando tramite console/Terminale istruzioni con la tastiera per fermare l'esecuzione, metterla in pausa e riprenderla, aumentare ed abbassare il volume audio, nonché vedere il tempo trascorso in quel momento dall'inizio dell'esecuzione del file Midi. Per interagire con la tastiera si premerà il tasto previsto per l'azione desiderata, scrivendo così il carattere in basso nella console o nel Terminale (se l'applicazione è stata lanciata da Terminale), e si premerà sul tasto "Invio". | In questo secondo esempio di esecuzione di un file Midi con un'applicazione ''a riga di comando'' si potrà interagire con essa inviando tramite console/Terminale istruzioni con la tastiera per fermare l'esecuzione, metterla in pausa e riprenderla, aumentare ed abbassare il volume audio, nonché vedere il tempo trascorso in quel momento dall'inizio dell'esecuzione del file Midi. Per interagire con la tastiera si premerà il tasto previsto per l'azione desiderata, scrivendo così il carattere in basso nella console o nel Terminale (se l'applicazione è stata lanciata da Terminale), e si premerà sul tasto "Invio". | ||
− | + | Public Sub Main() | |
+ | |||
+ | Dim mid As String | ||
+ | |||
+ | mid ="<FONT Color=darkgreen>''/percorso/del/file.mid''</font>" | ||
<FONT Color=gray>' ''Possiamo scegliere il file del banco di suoni ".sf2" che vogliamo utilizzare:''</font> | <FONT Color=gray>' ''Possiamo scegliere il file del banco di suoni ".sf2" che vogliamo utilizzare:''</font> | ||
− | Music<FONT Color=#B22222>.SoundFontPath</font> = "<FONT Color= | + | Music<FONT Color=#B22222>.SoundFontPath</font> = "<FONT Color=darkgreen>''/percorso/del/soundfont/bank/file.sf2''</font>" |
− | Music.Load( | + | Music.Load(mid) |
Music.Play | Music.Play | ||
+ | <FONT Color=gray>' ''Questo ciclo consente l'esecuzione del file Midi:''</font> | ||
Repeat | Repeat | ||
+ | <FONT Color=gray>' ''Mostra nello standard output il tempo trascorso dall'inizio dell'esecuzione:''</font> | ||
+ | Write "\r" & Str(Time(0, 0, 0, Music.Pos * 1000)) | ||
<FONT Color=gray>' ''Una brevissima attesa consente di inviare i previsti caratteri/comandi allo standard Input:''</font> | <FONT Color=gray>' ''Una brevissima attesa consente di inviare i previsti caratteri/comandi allo standard Input:''</font> | ||
Wait 0.01 | Wait 0.01 | ||
− | |||
− | |||
Until Music.State == Music.Stopped | Until Music.State == Music.Stopped | ||
− | + | ||
− | + | <FONT Color=gray>' ''Usando l'Evento "Application_Read()", per terminare il programma è necessario l'uso dell'istruzione "Quit"''</font> | |
− | |||
Quit | Quit | ||
− | + | End | |
+ | |||
− | + | Public Sub Application_Read() | |
Dim s As String | Dim s As String | ||
Riga 137: | Riga 179: | ||
Print "....continua" | Print "....continua" | ||
Case "+" | Case "+" | ||
− | Music.Volume += | + | Music.Volume += 4 |
Print Music.Volume | Print Music.Volume | ||
Case "-" | Case "-" | ||
− | Music.Volume -= | + | Music.Volume -= 4 |
Print Music.Volume | Print Music.Volume | ||
End Select | End Select | ||
− | + | ||
− | + | End | |
− | === | + | ===Eseguire un breve suono ripetutamente in un ciclo=== |
− | + | Se si dispone di un file MIDI contenente i dati per eseguire un unico Evento "Midi-ON" di brevissima durata, e si intende eseguirlo ripetutamente in un ciclo, si potrà adottare il seguente codice, nel quale si eseguiranno i dati MIDI ogni mezzo secondo: | |
− | + | Public Sub Main() | |
− | + | ||
− | + | Music.SoundFontPath = "<FONT Color=darkgreen>''/percorso/del/soundfont/bank/file.sf2''</font>" | |
+ | |||
+ | Music.Load("<FONT Color=darkgreen>''/percorso/del/file.mid''</font>") | ||
+ | |||
+ | Do | ||
+ | Music.Play | ||
+ | While Music.State == Music.Playing <FONT Color=gray>' ''Questo ciclo interno consente l'esecuzione del file Midi''</font> | ||
+ | Wend | ||
+ | Wait 0.5 | ||
+ | Loop | ||
+ | |||
+ | End |
Versione attuale delle 06:22, 27 dic 2023
Le risorse della libreria SDL2 per la gestione dell'audio e del Midi sono state implementate in Gambas attraverso il Componente gb.sdl2.audio il quale può essere attivato anche indipendentemente dal Componente gb.sdl2 .
Il Componente gb.sdl2.audio fornisce per l'esecuzione dei file Midi la Classe Music.
E' possibile eseguire un solo file Midi per volta.
Indice
Scegliere il banco di suoni
E' possibile scegliere mediante la Proprietà ".SoundFontPath" della Classe Music il percorso del file banco dei suoni (soundfont bank) di formato .SF2 per la riproduzione dei suoni con il Midi.
Music.SoundFontPath = "/percorso/del/soundfont/bank/file.sf2"
Modificare il volume
La Classe Music fornisce la Proprietà ".Volume", per modificare il volume audio dell'esecuzione.
L'ambito dei valori possibili va da 0 a 128.
Esempio:
Music.Volume = 110
Esempio di esecuzione con un'applicazione in ambiente grafico
Mostriamo un semplice esempio in applicazione grafica, nel quale si avrà anche la possibilità di arrestare, mettere in pausa l'esecuzione del file Midi e modificare il volume sonoro con uno Slider :
Public Sub Form_Open() ' E' possibile caricare un file banco dei suoni ".sf2" a piacere: Music.SoundFontPath = "/percorso/del/soundfont/bank/file.sf2" With Slider1 .MaxValue = Sound.MaxVolume .Value = 100 End With With ValueBox1 .Alignment = Align.Right .Value = Slider1.Value End With ToggleButton1.Text = "Esegui" ToggleButton2.Enabled = False End Public Sub ToggleButton1_Click() If ToggleButton2.Value = True Then Return Select Case ToggleButton1.Value Case True With Music .Load("/percorso/del/file.mid") .Play End With ToggleButton1.Text = "Stop" With ToggleButton2 .Enabled = True .Text = "Pausa" End With Repeat Wait 0.01 Me.Title = Str(Time(0, 0, 0, Music.Pos * 1000)) Until Music.State == Music.Stopped Esecuzione() Case False Esecuzione() End Select End Private Procedure Esecuzione() Music.Stop ToggleButton1.Text = "Esegui" ToggleButton1.Value = False With ToggleButton2 .Value = False .Enabled = False .Text = Null End With End Public Sub ToggleButton2_Click() Select Case ToggleButton2.Value Case True Music.Pause ToggleButton1.Text = Null ToggleButton1.Enabled = False ToggleButton2.Text = "Riprendi" Case False Music.Play ToggleButton1.Text = "Stop" ToggleButton1.Enabled = True ToggleButton2.Text = "Pausa" End Select End Public Sub Slider1_Change() Music.Volume = Slider1.Value ValueBox1.Value = Slider1.Value End
Esempio di esecuzione con un'applicazione a riga di comando
In quest'altro esempio viene eseguito un file Midi con un'applicazione a riga di comando. Il codice consente di vedere continuamente anche il tempo trascorso dall'inizio dell'esecuzione del file Midi:
Public Sub Main() Dim mid As String mid ="/percorso/del/file.mid" ' Possiamo scegliere il file del banco di suoni ".sf2" che vogliamo utilizzare: Music.SoundFontPath = "/percorso/del/soundfont/bank/file.sf2" Music.Load(mid) Music.Play ' Questo ciclo consente l'esecuzione del file Midi: While Music.State == Music.Playing ' Mostra il tempo trascorso dall'inizio dell'esecuzione: Write "\r\e[0mTempo trascorso: \e[31m" & Str(Time(0, 0, 0, Music.Pos * 1000)) Wait 0.01 Wend Music.Stop End
In questo secondo esempio di esecuzione di un file Midi con un'applicazione a riga di comando si potrà interagire con essa inviando tramite console/Terminale istruzioni con la tastiera per fermare l'esecuzione, metterla in pausa e riprenderla, aumentare ed abbassare il volume audio, nonché vedere il tempo trascorso in quel momento dall'inizio dell'esecuzione del file Midi. Per interagire con la tastiera si premerà il tasto previsto per l'azione desiderata, scrivendo così il carattere in basso nella console o nel Terminale (se l'applicazione è stata lanciata da Terminale), e si premerà sul tasto "Invio".
Public Sub Main() Dim mid As String mid ="/percorso/del/file.mid" ' Possiamo scegliere il file del banco di suoni ".sf2" che vogliamo utilizzare: Music.SoundFontPath = "/percorso/del/soundfont/bank/file.sf2" Music.Load(mid) Music.Play ' Questo ciclo consente l'esecuzione del file Midi: Repeat ' Mostra nello standard output il tempo trascorso dall'inizio dell'esecuzione: Write "\r" & Str(Time(0, 0, 0, Music.Pos * 1000)) ' Una brevissima attesa consente di inviare i previsti caratteri/comandi allo standard Input: Wait 0.01 Until Music.State == Music.Stopped ' Usando l'Evento "Application_Read()", per terminare il programma è necessario l'uso dell'istruzione "Quit" Quit End Public Sub Application_Read() Dim s As String Line Input #File.In, s Select Case s Case "s" Music.Stop Print "Esecuzione fermata." Case "p" Music.Pause Print "Pausa......." Case "r" Music.Play Print "....continua" Case "+" Music.Volume += 4 Print Music.Volume Case "-" Music.Volume -= 4 Print Music.Volume End Select End
Eseguire un breve suono ripetutamente in un ciclo
Se si dispone di un file MIDI contenente i dati per eseguire un unico Evento "Midi-ON" di brevissima durata, e si intende eseguirlo ripetutamente in un ciclo, si potrà adottare il seguente codice, nel quale si eseguiranno i dati MIDI ogni mezzo secondo:
Public Sub Main() Music.SoundFontPath = "/percorso/del/soundfont/bank/file.sf2" Music.Load("/percorso/del/file.mid") Do Music.Play While Music.State == Music.Playing ' Questo ciclo interno consente l'esecuzione del file Midi Wend Wait 0.5 Loop End