Differenze tra le versioni di "Eseguire un file MIDI mediante il componente gb.openal"
Riga 40: | Riga 40: | ||
Do | Do | ||
+ | <FONT color=gray>' ''Una brevissima attesa consente di agire su eventuali oggetti posti sul "Form":''''</font> | ||
Wait 0.01 | Wait 0.01 | ||
Alure.Update() | Alure.Update() | ||
Riga 56: | Riga 57: | ||
ciclo = False | ciclo = False | ||
+ | |||
+ | '''End''' | ||
+ | |||
+ | |||
+ | ===Caso di applicazione a riga di comando=== | ||
+ | Nel caso in cui l'applicazione per l'esecuzione di file Midi sia stata realizzata senza componenti grafici, e dunque a riga di comando, al termine del codice sarà assolutamente necessario prevedere un ciclo, all'interno del quale si dovrà porre la funzione ''Alure.Update()'': | ||
+ | '''Public''' Sub Main() | ||
+ | |||
+ | Dim src, ast, lungh As Integer | ||
+ | Dim percorsoFile As String = "''/percorso/del/file.mid''" | ||
+ | |||
+ | |||
+ | Alure.InitDevice(Null, Null) | ||
+ | |||
+ | src = Al.GenSources(1)[0] | ||
+ | |||
+ | lungh = Stat(percorsoFile).Size | ||
+ | |||
+ | ast = Alure.CreateStreamFromFile(percorsoFile, lungh, 0) | ||
+ | |||
+ | Alure.SetStreamPatchset(ast, "''/percorso/del/soundfont/file.sf2''") | ||
+ | |||
+ | Alure.PlaySourceStream(src, ast, 3, 0) | ||
+ | |||
+ | <FONT color=B22222>While True | ||
+ | Alure.Update() | ||
+ | Wend</font> | ||
'''End''' | '''End''' |
Versione delle 12:16, 27 ott 2013
Con la revisione 5753 di Gambas-3 è stato aggiunto il componente: gb.openal che utilizza le risorse dell'API di Openal.
Oltre all'esecuzione dei file audio, con il componente gb.openal è possibile eseguire anche i file Midi, utilizzando in particolare la funzione
SetStreamPatchset(Stream as AlureStream, Patchset As String) As Boolean
appartenente alla Classe Alure. |1|
Questa funzione specifica il patchset da utilizzare per i flussi MIDI. Tale patchset è sostanzialmente un file contenente il banco di suoni (soundfont bank) con estensione .sf2 . Pertanto sarà sufficiente in quel parametro indicare il percorso del file soundfont .sf2 che si intende utilizzare.
Mostriamo di seguito un semplice codice per eseguire un file Midi:
Private src As Integer Private ast As AlureStream Private ciclo As Boolean Public Sub Button1_Click() Dim percorsoFile As String = "/percorso/del/file.mid" Dim lungh As Integer ' Inizializza la libreria "Alure": Alure.InitDevice(Null, Null) src = Al.GenSources(1)[0] lungh = Stat(percorsoFile).Size ast = Alure.CreateStreamFromFile(percorsoFile, lungh, 0) Alure.SetStreamPatchset(ast, "/percorso/del/soundfont/file.sf2") ' Esegue il flusso di dati Midi. ' Il terzo parametro della funzione rappresenta il numero dei buffer utilizzati da accodare alla fonte di "OpenAL". ' Ogni buffer verrà riempito con la lunghezza del "chunk" specificato quando il flusso è stato creato. ' Tale valore nell'esecuzione di un file Midi deve essere di almeno 2. Alure.PlaySourceStream(src, ast, 3, 0) ciclo = True Do ' Una brevissima attesa consente di agire su eventuali oggetti posti sul "Form":'' Wait 0.01 Alure.Update() Loop Until ciclo = False End Public Sub Button2_Click() With Alure .StopSource(src) .DestroyStream(ast) .ShutdownDevice() End With ciclo = False End
Caso di applicazione a riga di comando
Nel caso in cui l'applicazione per l'esecuzione di file Midi sia stata realizzata senza componenti grafici, e dunque a riga di comando, al termine del codice sarà assolutamente necessario prevedere un ciclo, all'interno del quale si dovrà porre la funzione Alure.Update():
Public Sub Main() Dim src, ast, lungh As Integer Dim percorsoFile As String = "/percorso/del/file.mid" Alure.InitDevice(Null, Null) src = Al.GenSources(1)[0] lungh = Stat(percorsoFile).Size ast = Alure.CreateStreamFromFile(percorsoFile, lungh, 0) Alure.SetStreamPatchset(ast, "/percorso/del/soundfont/file.sf2") Alure.PlaySourceStream(src, ast, 3, 0) While True Alure.Update() Wend End
Note
[1] La Classe Alure del componente gb.openal consente di gestire le funzioni di ALURE, che è una libreria di supporto di Openal.