Differenze tra le versioni di "La gestione mediante il componente gb.openal"

Da Gambas-it.org - Wikipedia.
 
(7 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Il componente ''gb.openal'' utilizza le risorse dell'[http://it.wikipedia.org/wiki/Application_programming_interface API] di [http://connect.creativelabs.com/openal/default.aspx Openal].
+
#REDIRECT [[La_gestione_dei_file_audio_mediante_il_componente_gb.openal]]
 
 
E' possibile eseguire un file audio mediante le risorse delle Classi ''Al'' ed ''Alure'' |[[#Note|1]]| del componente ''gb.openal''.
 
 
 
 
 
 
 
==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''.
 
<BR>E' possibile riprodurre file audio dei seguenti tipi:
 
* WAV;
 
* MP3;
 
* OGG.
 
 
 
 
 
===1<SUP>a</sup> modalità===
 
Private src As Integer[]
 
Private ast As Alurestream
 
 
 
'''Public''' Sub Form_Open()
 
 
  Dim err As Boolean
 
 
<FONT color=gray>' ''Inizializza la libreria "Alure":''</font>
 
    err = Alure.InitDevice(Null, Null)
 
    If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !")
 
 
'''End'''
 
 
 
'''Public''' Sub Button1_Click()    <FONT color=gray>' ''Avvia l'esecuzione del file audio''</font>
 
 
  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)
 
 
<FONT color=gray>' ''Individua la lunghezza del file audio caricato da eseguire:''</font>
 
    lungh = Stat(fileAudio).Size
 
 
<FONT color=gray>' ''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:''</font>
 
    If Lower(File.Ext(fileAudio)) <> "wav" Then l = 4
 
 
    ast = Alure.CreateStreamFromFile(fileAudio, lungh * l, 0)
 
 
<FONT color=gray>' ''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.''</font>
 
    Alure.PlaySourceStream(src[0], ast, 3, 0)
 
 
'''End'''
 
 
 
'''Public''' Sub Button2_Click()    <FONT color=gray>' ''Arresta l'esecuzione del file audio''</font>
 
 
  If IsNull(ast) Then Return
 
  Alure.StopSource(src[0])
 
   
 
'''End'''
 
 
 
'''Public''' Sub Button3_Click()    <FONT color=gray>' ''Arresta l'esecuzione del file audio e chiude la finestra del programma''</font>
 
     
 
  If IsNull(ast) = False Then
 
    Alure.DestroyStream(ast)
 
    al.DeleteSources(src)
 
    Alure.StopSource(src[0])
 
  Endif
 
   
 
  Alure.ShutdownDevice()
 
 
 
  Me.Close
 
 
 
'''End'''
 
 
 
 
 
===2<SUP>a</sup> modalità===
 
Private source As Integer
 
 
 
'''Public''' Sub Form_Open()
 
 
  Dim err As Boolean
 
 
<FONT color=gray>' ''Inizializza la libreria "Alure":''</font>
 
    err = Alure.InitDevice(Null, Null)
 
    If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !")
 
 
'''End'''
 
 
 
'''Public''' Sub Button1_Click()    <FONT color=gray>' ''Avvia l'esecuzione del file audio''</font>
 
 
  Dim buffer As Integer
 
 
 
 
  buffer = alure.CreateBufferFromFile("''/percorso/del/file/audio''")
 
 
 
<FONT color=gray>' ''Crea una sorgente sonora:''</font>
 
  source = al.GenSources(1)[0]
 
 
 
<FONT color=gray>' ''Viene utilizzata la variabile "buffer" per riempire la sorgente.''
 
' ''Il secondo argomento indica  al buffer di fornire campioni sonori:''</font></font>
 
  al.Sourcei(source, al.BUFFER, buffer)
 
 
 
<FONT color=gray>' ''Esegue il flusso di dati audio.''</font>
 
  al.SourcePlay(source)
 
 
'''End'''
 
 
 
'''Public''' Sub ToggleButton1_Click()
 
 
    If ToggleButton1.Value
 
<FONT color=gray>' ''Mette in pausa l'esecuzione del file audio''</font>
 
      al.SourcePause(source)
 
    Else
 
<FONT color=gray>' ''Fa proseguire l'esecuzione del file audio''</font>
 
      al.SourcePlay(source)
 
    Endif
 
 
'''End'''
 
 
 
'''Public''' Sub Button2_Click()    <FONT color=gray>' ''Arresta l'esecuzione del file audio''</font>
 
 
    al.SourceStop(source)
 
 
'''End'''
 
 
 
 
 
===3<SUP>a</sup> modalità===
 
Private ags As Integer
 
 
 
 
'''Public''' Sub Button1_Click()    <FONT color=gray>' ''Avvia l'esecuzione del file audio''</font>
 
 
 
  Dim err As Boolean
 
  Dim fileAudio As String = "''/percorso/del/file/audio''"
 
  Dim agb As Integer
 
 
 
<FONT color=gray>' ''Inizializza la libreria "Alure":''</font>
 
  err = Alure.InitDevice(Null, Null)
 
  If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !")
 
 
<FONT color=gray>' ''Genera le sorgenti sonore ed i buffer:''</font>
 
  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)
 
 
<FONT color=gray>' ''Esegue il file audio:''</font>
 
  al.SourcePlay(ags)
 
 
'''End'''
 
 
 
'''Public''' Sub ToggleButton1_Click()
 
 
  If ToggleButton1.Value
 
<FONT color=gray>' ''Mette in pausa l'esecuzione del file audio''</font>
 
    al.SourcePause(ags)
 
  Else
 
<FONT color=gray>' ''Fa proseguire l'esecuzione del file audio''</font>
 
    al.SourcePlay(ags)
 
  Endif
 
 
'''End'''
 
 
 
'''Public''' Sub Button2_Click()    <FONT color=gray>' ''Arresta l'esecuzione del file audio''</font>
 
 
  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 porre in ''Pausa'' l'esecuzione immettendo nel Terminale o nell'apposito spazio della console il carattere "p" e quindi premendo il tasto ''Invio''. Per riprendere l'esecuzione basterà premere il solo tasto "''Invio''". E' altresì possibile arrestare l'esecuzione immettendo nel Terminale o nell'apposito spazio della console uno o più caratteri (ovviamente <SPAN Style="text-decoration:underline">diversi</span> dalla lettera "p"), quindi premendo il tasto ''Invio''.
 
 
 
 
 
====1<SUP>a</sup> modalità====
 
Private s As String
 
 
 
'''Public''' Sub <FONT color=#B22222>Main()</font>
 
 
  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''"
 
 
 
<FONT color=gray>' ''Inizializza la libreria "Alure":''</font>
 
  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)
 
   
 
<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>
 
    Input s
 
    If s = "p" Then Pausa(src)
 
  <FONT color=#B22222>Loop Until s <> Null</font>
 
 
  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 !"
 
 
 
<FONT color=gray>' ''Per riprendere l'esecuzione, è sufficiente premere il tasto "Invio":''</font>
 
  Input ripresa
 
  al.SourcePlayv([sal])
 
 
 
  Print "Riprende esecuzione."
 
  s = Null
 
 
 
'''End'''
 
 
 
 
 
 
 
====2<SUP>a</sup> modalità====
 
Private s As String
 
 
 
'''Public''' Sub <FONT color=#B22222>Main()</font>
 
 
  Dim err As Boolean
 
  Dim buffer, source As Integer
 
 
 
<FONT color=gray>' ''Inizializza la libreria "Alure":''</font>
 
  err = Alure.InitDevice(Null, Null)
 
  If err = False Then Error.Raise("Impossibile inizializzare la libreria 'Alure' !")
 
 
 
  buffer = alure.CreateBufferFromFile("''/percorso/del/file/audio''")
 
 
<FONT color=gray>' ''Crea una sorgente sonora:''</font>
 
  source = al.GenSources(1)[0]
 
 
 
<FONT color=gray>' ''Viene utilizzata la variabile "buffer" per riempire la sorgente.''
 
' ''Il secondo argomento indica  al buffer di fornire campioni sonori:''</font></font>
 
  al.Sourcei(source, al.BUFFER, buffer)
 
 
 
<FONT color=gray>' ''Esegue il flusso di dati audio.''</font>
 
  al.SourcePlay(source)
 
 
<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>
 
    Input s
 
    If s = "p" Then Pausa(source)
 
  <FONT color=#B22222>Loop Until s <> Null</font>
 
 
  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 !"
 
 
 
<FONT color=gray>' ''Per riprendere l'esecuzione, è sufficiente premere il tasto "Invio":''</font>
 
  Input ripresa
 
  al.SourcePlay(sAl)
 
 
 
  Print "Riprende esecuzione."
 
  s = Null
 
 
 
'''End'''
 
 
 
 
 
 
 
====3<SUP>a</sup> modalità====
 
Private s As String
 
 
 
'''Public''' Sub <FONT color=#B22222>Main()</font>
 
 
  Dim err As Boolean
 
  Dim fileAudio As String
 
  Dim agb, ags As Integer
 
 
 
  fileAudio = "''/percorso/del/file/audio''"
 
 
 
<FONT color=gray>' ''Inizializza la libreria "Alure":''</font>
 
  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)
 
 
<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>
 
    Input s
 
    If s = "p" Then Pausa(ags)
 
  <FONT color=#B22222>Loop Until s <> Null</font>
 
 
 
  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 !"
 
 
 
<FONT color=gray>' ''Per riprendere l'esecuzione, è sufficiente premere il tasto "Invio":''</font>
 
  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 [http://kcat.strangesoft.net/alure.html ALURE], che è una libreria di supporto di ''Openal''.
 

Versione attuale delle 09:12, 3 ago 2020