Differenze tra le versioni di "La gestione dei file audio mediante le funzioni esterne del API di Canberra"

Da Gambas-it.org - Wikipedia.
(Creata pagina con "'''Canberra''' è una libreria che mette a disposizione funzioni e risorse utilizzate principalmente per l'esecuzione di suoni nel caso vengano sollevati ''eventi'' (click, av...")
 
Riga 7: Riga 7:
  
  
 +
===Esempio in ambiente grafico===
 
Mostriamo di seguito un semplice codice in ambiente grafico:
 
Mostriamo di seguito un semplice codice in ambiente grafico:
 
  Private ca As Pointer
 
  Private ca As Pointer
Riga 69: Riga 70:
 
     err = ca_context_destroy(ca)
 
     err = ca_context_destroy(ca)
 
     If err < 0 Then Error.Raise("Impossibile arrestare il file audio: " & ca_strerror(err))
 
     If err < 0 Then Error.Raise("Impossibile arrestare il file audio: " & ca_strerror(err))
 +
 +
'''End'''
 +
 +
 +
 +
===Esempio con applicazione ''a riga di comando''===
 +
Mostriamo di seguito un semplice codice con un'applicazione ''a riga di comando'':
 +
Library "libcanberra:0.2.5"
 +
 +
Private Const CA_PROP_MEDIA_FILENAME As String = "media.filename"
 +
 +
<FONT color=gray>' ''int ca_context_create (ca_context **c)''
 +
' ''Create an (unconnected) context object.''</font>
 +
Private Extern ca_context_create(c As Pointer) As Integer
 +
 +
<FONT color=gray>' ''const char * ca_strerror (int code)''
 +
' ''Converts a numerical error code as returned by most libcanberra API functions into a human readable error string.''</font>
 +
Private Extern ca_strerror(code As Integer) As String
 +
 
 +
<FONT color=gray>' ''int ca_context_set_driver (ca_context *c, const char *driver)''
 +
' ''Specify the backend driver used. "driver": the backend driver to use (e.g."alsa", "pulse", "null", ...)''</font>
 +
Private Extern ca_context_set_driver(c As Pointer, driver As String) As Integer
 +
 +
<FONT color=gray>' ''int ca_context_open (ca_context *c)''
 +
' ''Connect the context to the sound system.''</font>
 +
Private Extern ca_context_open(c As Pointer) As Integer
 +
 +
<FONT color=gray>' ''int ca_context_play (ca_context *c, uint32_t id, ...)''
 +
' ''Play one event sound''</font>
 +
Private Extern ca_context_play(c As Pointer, id As Integer, cpmf As String, sfile As String, nl As String) As Integer
 +
 +
<FONT color=gray>' ''int ca_context_playing(ca_context *c, uint32_t id, int *playing)''
 +
' ''Check if at least one sound with the specified id is still playing.''</font>
 +
Private Extern ca_context_playing(c As Pointer, id As Integer, playing As Pointer) As Integer
 +
 +
<FONT color=gray>' ''int ca_context_destroy (ca_context *c)''
 +
' ''Destroy a (connected or unconnected) context object.''</font>
 +
Private Extern ca_context_destroy(c As Pointer) As Integer
 +
 +
 +
'''Public''' Sub Button1_Click()
 +
 +
  Dim err As Integer
 +
  Dim nomefile As String
 +
  Dim ca As Pointer
 +
 
 +
    nomefile = "<FONT color=gray>''/percorso/del/file/audio''</font>"
 +
 +
    err = ca_context_create(VarPtr(ca))
 +
    If err < 0 Then Error.Raise("Impossibile creare un contesto media: " & ca_strerror(err))
 +
   
 +
    ca_context_set_driver(ca, "alsa")
 +
    If err < 0 Then Error.Raise("Impossibile impostare il driver audio da utilizzare: " & ca_strerror(err))
 +
   
 +
    err = ca_context_open(ca)
 +
    If err < 0 Then Error.Raise("Impossibile aprire un contesto media: " & ca_strerror(err))
 +
   
 +
    err = ca_context_play(ca, 0, CA_PROP_MEDIA_FILENAME, nomefile, Null)
 +
    If err < 0 Then Error.Raise("Impossibile eseguire il file audio: " & ca_strerror(err))
 +
   
 +
<FONT color=gray>' ''Il ciclo consente l'esecuzione del file audio. Si esce dal ciclo, quando l'esecuzione è terminata.''</font>
 +
    Do
 +
      ca_context_playing(ca, 0, VarPtr(eseg))
 +
    Loop Until Int(eseg) = 0
 +
   
 +
    ca_context_destroy(ca)
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 19:07, 28 ago 2016

Canberra è una libreria che mette a disposizione funzioni e risorse utilizzate principalmente per l'esecuzione di suoni nel caso vengano sollevati eventi (click, avvio di programma, chiusura di finestre ed applicazioni, etc). Per questa ragione è progettata per eseguire file non eccessivamente grandi, aventi dimensioni non superiori a circa 65 Mbyte.
Un suono-evento viene attivato tramite libcanberra chiamando la funzione ca_context_play () su un oggetto ca_context creato in precedenza.

I formati di file audio supportati sono soltanto: .wav e .ogg .

Per utilizzare le risorse di Canberra nella propria applicazione Gambas, si dovrà richiamare la libreria dinamica condivisa: "libcanberra.so.0.2.5."


Esempio in ambiente grafico

Mostriamo di seguito un semplice codice in ambiente grafico:

Private ca As Pointer


Library "libcanberra:0.2.5"

Private Const CA_PROP_MEDIA_FILENAME As String = "media.filename"

' int ca_context_create (ca_context **c)
' Create an (unconnected) context object.
Private Extern ca_context_create(c As Pointer) As Integer

' const char * ca_strerror (int code)
' Converts a numerical error code as returned by most libcanberra API functions into a human readable error string.
Private Extern ca_strerror(code As Integer) As String
 
' int ca_context_set_driver (ca_context *c, const char *driver)
' Specify the backend driver used. "driver": the backend driver to use (e.g."alsa", "pulse", "null", ...)
Private Extern ca_context_set_driver(c As Pointer, driver As String) As Integer

' int ca_context_open (ca_context *c)
' Connect the context to the sound system.
Private Extern ca_context_open(c As Pointer) As Integer

' int ca_context_play (ca_context *c, uint32_t id, ...)
' Play one event sound
Private Extern ca_context_play(c As Pointer, id As Integer, cpmf As String, sfile As String, nl As String) As Integer

' int ca_context_destroy (ca_context *c)
' Destroy a (connected or unconnected) context object.
Private Extern ca_context_destroy(c As Pointer) As Integer


Public Sub Button1_Click()

 Dim err As Integer
 Dim nomefile As String

   nomefile = "/percorso/del/file/audio"

   err = ca_context_create(VarPtr(ca))
   If err < 0 Then Error.Raise("Impossibile creare un contesto media: " & ca_strerror(err))
   
   ca_context_set_driver(ca, "alsa")
   If err < 0 Then Error.Raise("Impossibile impostare il driver audio da utilizzare: " & ca_strerror(err))
   
   err = ca_context_open(ca)
   If err < 0 Then Error.Raise("Impossibile aprire un contesto media: " & ca_strerror(err))
   
   err = ca_context_play(ca, 0, CA_PROP_MEDIA_FILENAME, nomefile, Null)
   If err < 0 Then Error.Raise("Impossibile eseguire il file audio: " & ca_strerror(err))

End


Public Sub Button2_Click()

 Dim err As Integer

' Arresta l'esecuzione del file audio, e cancella il contesto media:
   err = ca_context_destroy(ca)
   If err < 0 Then Error.Raise("Impossibile arrestare il file audio: " & ca_strerror(err))

End


Esempio con applicazione a riga di comando

Mostriamo di seguito un semplice codice con un'applicazione a riga di comando:

Library "libcanberra:0.2.5"

Private Const CA_PROP_MEDIA_FILENAME As String = "media.filename"

' int ca_context_create (ca_context **c)
' Create an (unconnected) context object.
Private Extern ca_context_create(c As Pointer) As Integer

' const char * ca_strerror (int code)
' Converts a numerical error code as returned by most libcanberra API functions into a human readable error string.
Private Extern ca_strerror(code As Integer) As String
 
' int ca_context_set_driver (ca_context *c, const char *driver)
' Specify the backend driver used. "driver": the backend driver to use (e.g."alsa", "pulse", "null", ...)
Private Extern ca_context_set_driver(c As Pointer, driver As String) As Integer

' int ca_context_open (ca_context *c)
' Connect the context to the sound system.
Private Extern ca_context_open(c As Pointer) As Integer

' int ca_context_play (ca_context *c, uint32_t id, ...)
' Play one event sound
Private Extern ca_context_play(c As Pointer, id As Integer, cpmf As String, sfile As String, nl As String) As Integer

' int ca_context_playing(ca_context *c, uint32_t id, int *playing)
' Check if at least one sound with the specified id is still playing.
Private Extern ca_context_playing(c As Pointer, id As Integer, playing As Pointer) As Integer

' int ca_context_destroy (ca_context *c)
' Destroy a (connected or unconnected) context object.
Private Extern ca_context_destroy(c As Pointer) As Integer


Public Sub Button1_Click()

 Dim err As Integer
 Dim nomefile As String
 Dim ca As Pointer
 
   nomefile = "/percorso/del/file/audio"

   err = ca_context_create(VarPtr(ca))
   If err < 0 Then Error.Raise("Impossibile creare un contesto media: " & ca_strerror(err))
   
   ca_context_set_driver(ca, "alsa")
   If err < 0 Then Error.Raise("Impossibile impostare il driver audio da utilizzare: " & ca_strerror(err))
   
   err = ca_context_open(ca)
   If err < 0 Then Error.Raise("Impossibile aprire un contesto media: " & ca_strerror(err))
   
   err = ca_context_play(ca, 0, CA_PROP_MEDIA_FILENAME, nomefile, Null)
   If err < 0 Then Error.Raise("Impossibile eseguire il file audio: " & ca_strerror(err))
   
' Il ciclo consente l'esecuzione del file audio. Si esce dal ciclo, quando l'esecuzione è terminata.
   Do 
     ca_context_playing(ca, 0, VarPtr(eseg))
   Loop Until Int(eseg) = 0
   
   ca_context_destroy(ca)

End



Riferimenti