Differenze tra le versioni di "La gestione mediante il componente gb.openal"
Riga 192: | Riga 192: | ||
====1<SUP>a</sup> modalità==== | ====1<SUP>a</sup> modalità==== | ||
+ | Private s As String | ||
+ | |||
+ | |||
'''Public''' Sub <FONT color=#B22222>Main()</font> | '''Public''' Sub <FONT color=#B22222>Main()</font> | ||
Dim err As Boolean | Dim err As Boolean | ||
− | Dim fileAudio | + | Dim fileAudio As String |
Dim src, lungh As Integer | Dim src, lungh As Integer | ||
Dim ast As Alurestream | Dim ast As Alurestream | ||
Riga 215: | Riga 218: | ||
Alure.PlaySourceStream(src, ast, 3, 0) | Alure.PlaySourceStream(src, ast, 3, 0) | ||
− | + | ||
− | <FONT color=gray>' '' | + | <FONT color=gray>' ''Inviando il carattere "p" dal Terminale o dalla console, l'esecuzione è posta in "Pausa",'' |
+ | ' ''inviando ogni altro carattere essa viene terminata:''</font> | ||
<FONT color=#B22222>Do</font> | <FONT color=#B22222>Do</font> | ||
Input s | Input s | ||
+ | If s = "p" Then Pausa(src) | ||
<FONT color=#B22222>Loop Until s <> Null</font> | <FONT color=#B22222>Loop Until s <> Null</font> | ||
Riga 226: | Riga 231: | ||
Alure.ShutdownDevice() | Alure.ShutdownDevice() | ||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Private''' Procedure Pausa(sAl As Integer) | ||
+ | |||
+ | Dim ripresa As String | ||
+ | |||
+ | al.SourcePause(sAl) | ||
+ | Print "Pausa !" | ||
+ | |||
+ | Input ripresa | ||
+ | al.SourcePlayv([sal]) | ||
+ | |||
+ | Print "Riprende esecuzione." | ||
+ | s = Null | ||
+ | |||
'''End''' | '''End''' | ||
+ | |||
====2<SUP>a</sup> modalità==== | ====2<SUP>a</sup> modalità==== | ||
+ | Private s As String | ||
+ | |||
+ | |||
'''Public''' Sub <FONT color=#B22222>Main()</font> | '''Public''' Sub <FONT color=#B22222>Main()</font> | ||
Dim err As Boolean | Dim err As Boolean | ||
Dim buffer, source As Integer | Dim buffer, source As Integer | ||
− | + | ||
− | |||
<FONT color=gray>' ''Inizializza la libreria "Alure":''</font> | <FONT color=gray>' ''Inizializza la libreria "Alure":''</font> | ||
err = Alure.InitDevice(Null, Null) | err = Alure.InitDevice(Null, Null) | ||
Riga 252: | Riga 276: | ||
al.SourcePlay(source) | al.SourcePlay(source) | ||
− | <FONT color=gray>' '' | + | <FONT color=gray>' ''Inviando il carattere "p" dal Terminale o dalla console, l'esecuzione è posta in "Pausa",'' |
+ | ' ''inviando ogni altro carattere essa viene terminata:''</font> | ||
<FONT color=#B22222>Do</font> | <FONT color=#B22222>Do</font> | ||
Input s | Input s | ||
+ | If s = "p" Then Pausa(source) | ||
<FONT color=#B22222>Loop Until s <> Null</font> | <FONT color=#B22222>Loop Until s <> Null</font> | ||
Riga 264: | Riga 290: | ||
'''End''' | '''End''' | ||
+ | |||
+ | '''Private''' Procedure Pausa(sAl As Integer) | ||
+ | |||
+ | Dim ripresa As String | ||
+ | |||
+ | al.SourcePause(sAl) | ||
+ | Print "Pausa !" | ||
+ | |||
+ | Input ripresa | ||
+ | al.SourcePlay(sAl) | ||
+ | |||
+ | Print "Riprende esecuzione." | ||
+ | s = Null | ||
+ | |||
+ | '''End''' | ||
+ | |||
====3<SUP>a</sup> modalità==== | ====3<SUP>a</sup> modalità==== | ||
+ | Private s As String | ||
+ | |||
+ | |||
'''Public''' Sub <FONT color=#B22222>Main()</font> | '''Public''' Sub <FONT color=#B22222>Main()</font> | ||
Dim err As Boolean | Dim err As Boolean | ||
− | Dim fileAudio | + | Dim fileAudio As String |
Dim agb, ags As Integer | Dim agb, ags As Integer | ||
Riga 287: | Riga 332: | ||
al.Sourcei(ags, al.BUFFER, agb) | al.Sourcei(ags, al.BUFFER, agb) | ||
− | + | ||
al.SourcePlay(ags) | al.SourcePlay(ags) | ||
− | |||
<FONT color=gray>' ''Arresta l'esecuzione del file audio:''</font> | <FONT color=gray>' ''Arresta l'esecuzione del file audio:''</font> | ||
<FONT color=#B22222>Do</font> | <FONT color=#B22222>Do</font> | ||
Input s | Input s | ||
+ | If s = "p" Then Pausa(ags) | ||
<FONT color=#B22222>Loop Until s <> Null</font> | <FONT color=#B22222>Loop Until s <> Null</font> | ||
Riga 301: | Riga 346: | ||
Alure.ShutdownDevice() | Alure.ShutdownDevice() | ||
+ | '''End''' | ||
+ | |||
+ | |||
+ | '''Private''' Procedure Pausa(sAl As Integer) | ||
+ | |||
+ | Dim ripresa As String | ||
+ | |||
+ | al.SourcePause(sAl) | ||
+ | Print "Pausa !" | ||
+ | |||
+ | Input ripresa | ||
+ | al.SourcePlay(sAl) | ||
+ | |||
+ | Print "Riprende esecuzione." | ||
+ | s = Null | ||
+ | |||
'''End''' | '''End''' | ||
Versione delle 07:44, 21 ago 2015
Con la revisione 5753 di Gambas-3 è stato aggiunto il componente: gb.openal che utilizza le risorse dell'API di Openal.
E' possibile eseguire un file audio mediante le risorse delle Classi Al ed Alure |1| del componente gb.openal.
Indice
Eseguire un file audio con le risorse della Classe Al e della Classe Alure
Vi sono almeno tre modalità per eseguire un file audio mediante le risorse della Classe Al e della Classe Alure del componente gb.openal.
E' possibile riprodurre file audio dei seguenti tipi:
- WAV;
- MP3;
- OGG.
1a modalità
Private src As Integer[] Private ast As Alurestream Public Sub Form_Open() Dim err As Boolean ' Inizializza la libreria "Alure": err = Alure.InitDevice(Null, Null) If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !") End Public Sub Button1_Click() ' Avvia l'esecuzione del file audio Dim fileAudio As String = "/percorso/del/file/audio" Dim lungh As Integer Dim l As Byte = 1 If IsNull(src) = False Then al.DeleteSources(src) src = Al.GenSources(1) ' Individua la lunghezza del file audio caricato da eseguire: lungh = Stat(fileAudio).Size ' Se il file audio è un "mp3" o un "ogg", allora il valore della variabile "lungh" ' deve essere moltiplicato almeno per 4, altrimenti l'esecuzione audio terminerà anticipatamente: If Lower(File.Ext(fileAudio)) <> "wav" Then l = 4 ast = Alure.CreateStreamFromFile(fileAudio, lungh * l, 0) ' Esegue il flusso di dati audio. ' 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 audio deve essere di almeno 2. Alure.PlaySourceStream(src[0], ast, 3, 0) End Public Sub Button2_Click() ' Arresta l'esecuzione del file audio If IsNull(ast) Then Return Alure.StopSource(src[0]) End Public Sub Button3_Click() ' Arresta l'esecuzione del file audio e chiude la finestra del programma If IsNull(ast) = False Then Alure.DestroyStream(ast) al.DeleteSources(src) Alure.StopSource(src[0]) Endif Alure.ShutdownDevice() Me.Close End
2a modalità
Private source As Integer Public Sub Form_Open() Dim err As Boolean ' Inizializza la libreria "Alure": err = Alure.InitDevice(Null, Null) If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !") End Public Sub Button1_Click() ' Avvia l'esecuzione del file audio Dim buffer As Integer buffer = alure.CreateBufferFromFile("/percorso/del/file/audio") ' Crea una sorgente sonora: source = al.GenSources(1)[0] ' Viene utilizzata la variabile "buffer" per riempire la sorgente. ' Il secondo argomento indica al buffer di fornire campioni sonori:</font> al.Sourcei(source, al.BUFFER, buffer) ' Esegue il flusso di dati audio. al.SourcePlay(source) End Public Sub ToggleButton1_Click() If ToggleButton1.Value ' Mette in pausa l'esecuzione del file audio al.SourcePause(source) Else ' Fa proseguire l'esecuzione del file audio al.SourcePlay(source) Endif End Public Sub Button2_Click() ' Arresta l'esecuzione del file audio al.SourceStop(source) End
3a modalità
Private ags As Integer Public Sub Button1_Click() ' Avvia l'esecuzione del file audio Dim err As Boolean Dim fileAudio As String = "/percorso/del/file/audio" Dim agb As Integer ' Inizializza la libreria "Alure": err = Alure.InitDevice(Null, Null) If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !") ' Genera le sorgenti sonore ed i buffer: ags = al.GenSources(1)[0] agb = al.GenBuffers(ags)[0] err = alure.BufferDataFromFile(fileAudio, agb) If err = False Then Error.Raise("Impossibile creare un buffer-data dal file audio !") al.Sourcei(ags, al.BUFFER, agb) ' Esegue il file audio: al.SourcePlay(ags) End Public Sub ToggleButton1_Click() If ToggleButton1.Value ' Mette in pausa l'esecuzione del file audio al.SourcePause(ags) Else ' Fa proseguire l'esecuzione del file audio al.SourcePlay(ags) Endif End Public Sub Button2_Click() ' Arresta l'esecuzione del file audio al.SourceStop(ags) End
Caso di applicazione a riga di comando
Nel caso in cui l'applicazione per l'esecuzione di file audio sia stata realizzata senza componenti grafici, e dunque a riga di comando, al termine del codice sarà assolutamente necessario prevedere un ciclo. E' possibile arrestare l'esecuzione immettendo nel Terminale o nell'apposito spazio della console uno o più caratteri, quindi premendo il tasto Invio.
1a modalità
Private s As String Public Sub Main() Dim err As Boolean Dim fileAudio As String Dim src, lungh As Integer Dim ast As Alurestream Dim l As Byte = 1 fileAudio = "/percorso/del/file/audio" ' Inizializza la libreria "Alure": err = Alure.InitDevice(Null, Null) If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !") src = Al.GenSources(1)[0] lungh = Stat(fileAudio).Size If Lower(File.Ext(fileAudio)) <> "wav" Then l = 4 ast = Alure.CreateStreamFromFile(fileAudio, lungh * l, 0) Alure.PlaySourceStream(src, ast, 3, 0) ' Inviando il carattere "p" dal Terminale o dalla console, l'esecuzione è posta in "Pausa", ' inviando ogni altro carattere essa viene terminata: Do Input s If s = "p" Then Pausa(src) Loop Until s <> Null Alure.DestroyStream(ast) al.DeleteSources([src]) Alure.StopSource(src) Alure.ShutdownDevice() End Private Procedure Pausa(sAl As Integer) Dim ripresa As String al.SourcePause(sAl) Print "Pausa !" Input ripresa al.SourcePlayv([sal]) Print "Riprende esecuzione." s = Null End
2a modalità
Private s As String Public Sub Main() Dim err As Boolean Dim buffer, source As Integer ' Inizializza la libreria "Alure": err = Alure.InitDevice(Null, Null) If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !") buffer = alure.CreateBufferFromFile("/percorso/del/file/audio") ' Crea una sorgente sonora: source = al.GenSources(1)[0] ' Viene utilizzata la variabile "buffer" per riempire la sorgente. ' Il secondo argomento indica al buffer di fornire campioni sonori:</font> al.Sourcei(source, al.BUFFER, buffer) ' Esegue il flusso di dati audio. al.SourcePlay(source) ' Inviando il carattere "p" dal Terminale o dalla console, l'esecuzione è posta in "Pausa", ' inviando ogni altro carattere essa viene terminata: Do Input s If s = "p" Then Pausa(source) Loop Until s <> Null al.DeleteBuffers([buffer]) al.DeleteSources([source]) Alure.StopSource(source) Alure.ShutdownDevice() End Private Procedure Pausa(sAl As Integer) Dim ripresa As String al.SourcePause(sAl) Print "Pausa !" Input ripresa al.SourcePlay(sAl) Print "Riprende esecuzione." s = Null End
3a modalità
Private s As String Public Sub Main() Dim err As Boolean Dim fileAudio As String Dim agb, ags As Integer fileAudio = "/percorso/del/file/audio" ' Inizializza la libreria "Alure": err = Alure.InitDevice(Null, Null) If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !") ags = al.GenSources(1)[0] agb = al.GenBuffers(ags)[0] err = alure.BufferDataFromFile(fileAudio, agb) If err = False Then Error.Raise("Impossibile creare un buffer-data dal file audio !") al.Sourcei(ags, al.BUFFER, agb) al.SourcePlay(ags) ' Arresta l'esecuzione del file audio: Do Input s If s = "p" Then Pausa(ags) Loop Until s <> Null al.DeleteBuffers([agb]) al.DeleteSources([ags]) Alure.StopSource(ags) Alure.ShutdownDevice() End Private Procedure Pausa(sAl As Integer) Dim ripresa As String al.SourcePause(sAl) Print "Pausa !" Input ripresa al.SourcePlay(sAl) Print "Riprende esecuzione." s = Null End
Note
[1] La Classe Alure del componente gb.openal consente di gestire le funzioni di ALURE, che è una libreria di supporto di Openal.