Eseguire un file audio mediante le funzioni esterne del API di GSound
Vai alla navigazione
Vai alla ricerca
GSound è una piccola libreria per la riproduzione di suoni, progettata per essere utilizzata tramite GObject Introspection, ed è un wrapper della libreria C libcanberra.
Con la libreria GSound è possibile eseguire file audio di formato "WAV" e "OGG".
E' necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libgsound.so.0.0.2 ".
Mostriamo un semplice esempio, nel quale verrà eseguito un file audio di formato "WAV" con frequenza di campionamento a 44.100 hertz, 16-bit di profondità e 2 canali:
Library "libgsound:0.0.2"
Private Const GSOUND_ATTR_MEDIA_FILENAME As String = "media.filename"
' GSoundContext *gsound_context_new (GCancellable *cancellable, GError **error)
' Creates and initializes a new GSoundContext.
Private Extern gsound_context_new(cancellable As Pointer, gerror As Pointer) As Pointer
' gboolean gsound_context_set_driver (GSoundContext *context, const char *driver, GError **error)
' Sets the libcanberra driver to driver.
Private Extern gsound_context_set_driver(context As Pointer, driver As String, gerror As Pointer) As Boolean
' gboolean gsound_context_open (GSoundContext *context, GError **error)
' Attempts to open a connection to the backend sound driver.
Private Extern gsound_context_open(context As Pointer, gerror As Pointer) As Boolean
' gboolean gsound_context_play_simple (GSoundContext *context, GCancellable *cancellable, GError **error, ...)
' The basic "fire-and-forget" play command.
Private Extern gsound_context_play_simple(context As Pointer, cancellable As Pointer, gerror As Pointer, define As String, percorso As String, ptr As Pointer) As Boolean
' void g_object_unref (gpointer object)
' Decreases the reference count of object.
Private Extern g_object_unref(gobject As Pointer)
Public Sub Main()
Dim ctx As Pointer
Dim bo As Boolean
Dim audio As String
Dim durata, diff As Integer
Dim tempus As Date
ctx = gsound_context_new(0, 0)
' Imposta il driver audio di sistema da utilizzare:
bo = gsound_context_set_driver(ctx, "alsa", 0)
If bo = False Then Error.Raise("ERRORE !")
bo = gsound_context_open(ctx, 0)
If bo = False Then Error.Raise("ERRORE !")
audio = "/percorso/del/file.wav"
bo = gsound_context_play_simple(ctx, 0, 0, GSOUND_ATTR_MEDIA_FILENAME, audio, 0)
If bo = False Then Error.Raise("ERRORE !")
' Assume la durata del file audio wav:
durata = ((Stat(audio).Size - 44) * 8) / (44100 * 16 * 2) * 1000
' Assume l'orario attuale:
tempus = Time(Now)
' Consente la riproduzione del file audio sino al termine della sua durata:
Do
diff = DateDiff(tempus, Time(Now), gb.Millisecond)
Write "\r" & CStr(Time(0, 0, 0, diff))
Wait 0.001
Loop Until diff >= durata
Print "\nEsecuzione terminata !"
g_object_unref(ctx)
End