Eseguire un file audio mediante le funzioni esterne del API di GSound

Da Gambas-it.org - Wikipedia.

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


Riferimenti