Differenze tra le versioni di "La gestione dei file audio mediante le funzioni esterne del API di Canberra"
(6 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
'''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 <SPAN Style="text-decoration:underline">non superiori</span> a circa 65 Mbyte. | '''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 <SPAN Style="text-decoration:underline">non superiori</span> a circa 65 Mbyte. | ||
− | <BR>Un suono-evento viene attivato tramite ''libcanberra'' chiamando la funzione | + | <BR>Un suono-evento viene attivato tramite ''libcanberra'' chiamando la funzione esterna "ca_context_play()" su un Oggetto ''ca_context'' creato in precedenza. |
− | I formati di file audio supportati sono soltanto | + | <U>I formati di file audio supportati sono soltanto WAV e OGG.</u> |
− | |||
− | |||
+ | Per utilizzare le risorse di ''Canberra'' nella propria applicazione Gambas, si dovrà richiamare la libreria condivisa: "''libcanberra.so.0.2.5'' ". | ||
===Esempio in ambiente grafico=== | ===Esempio in ambiente grafico=== | ||
Riga 41: | Riga 40: | ||
− | + | Public Sub Button1_Click() | |
Dim err As Integer | Dim err As Integer | ||
Dim nomefile As String | Dim nomefile As String | ||
− | + | nomefile = "<FONT color=darkgreen>''/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)) | |
− | + | 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''' | '''End''' | ||
− | |||
'''Public''' Sub Button2_Click() | '''Public''' Sub Button2_Click() | ||
Riga 67: | Riga 65: | ||
Dim err As Integer | Dim err As Integer | ||
− | <FONT color=gray>' ''Arresta l'esecuzione del file audio | + | <FONT color=gray>' ''Arresta l'esecuzione del file audio e cancella il contesto media:''</font> |
− | + | err = ca_context_destroy(ca) | |
− | + | If err < 0 Then Error.Raise("Impossibile arrestare il file audio: " & ca_strerror(err)) | |
− | + | End | |
− | |||
Riga 110: | Riga 107: | ||
− | + | Public Sub Main() | |
Dim err, esegue As Integer | Dim err, esegue As Integer | ||
Dim nomefile As String | Dim nomefile As String | ||
Dim ca As Pointer | Dim ca As Pointer | ||
+ | Dim tm As Date | ||
− | + | nomefile = "<FONT color=darkgreen>''/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)) | |
− | + | 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)) | |
+ | |||
+ | tm = Now | ||
<FONT color=gray>' ''Il ciclo consente l'esecuzione del file audio. Si esce dal ciclo, quando l'esecuzione è terminata.''</font> | <FONT color=gray>' ''Il ciclo consente l'esecuzione del file audio. Si esce dal ciclo, quando l'esecuzione è terminata.''</font> | ||
− | + | Repeat | |
− | + | ca_context_playing(ca, 0, VarPtr(esegue)) | |
− | + | <FONT color=gray>' ''Mostra in console il tempo trascorso dall'inizio dell'esecuzione del file audio:''</font> | |
+ | Write "\r" & Str(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond))) | ||
+ | Until Int(esegue) == 0 | ||
− | + | ca_context_destroy(ca) | |
− | + | End | |
− | |||
=Riferimenti= | =Riferimenti= | ||
− | |||
− | |||
* http://0pointer.de/lennart/projects/libcanberra | * http://0pointer.de/lennart/projects/libcanberra | ||
− | * | + | * https://0pointer.de/lennart/projects/libcanberra/gtkdoc/index.html |
Versione attuale delle 16:58, 13 gen 2024
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 esterna "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 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)) 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 Main() Dim err, esegue As Integer Dim nomefile As String Dim ca As Pointer Dim tm As Date 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)) 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)) tm = Now ' Il ciclo consente l'esecuzione del file audio. Si esce dal ciclo, quando l'esecuzione è terminata. Repeat ca_context_playing(ca, 0, VarPtr(esegue)) ' Mostra in console il tempo trascorso dall'inizio dell'esecuzione del file audio: Write "\r" & Str(Time(0, 0, 0, DateDiff(tm, Now, gb.Millisecond))) Until Int(esegue) == 0 ca_context_destroy(ca) End