Eseguire un file audio mediante le funzioni esterne del API di Rhythmbox
Da Gambas-it.org - Wikipedia.
Rythmbox è una libreria del progetto GNOME capace di gestire ed eseguire diversi formati audio: AAC, MP3, OGG, WAV e WMA.
Va utilizzata congiuntamente con alcune funzioni esterne della libreria di GStreamer. Pertanto sarà necessario avere intallate nel sistema e richiamare in Gambas le librerie condivise: "librhythmbox-core.so.10.0.0 " e "libgstreamer-1.0.so "
Mostriamo un semplice esempio pratico:
Library "librhythmbox-core:10.0.0" Private Enum RB_PLAYER_PLAY_REPLACE = 0, RB_PLAYER_PLAY_AFTER_EOS, RB_PLAYER_PLAY_CROSSFADE ' RBPlayer * rb_player_new (gboolean want_crossfade, GError **error) ' Creates a new player object. Private Extern rb_player_new(want_crossfade As Boolean, gerror As Pointer) As Pointer ' gboolean rb_player_open (RBPlayer *player, const char *uri, gpointer stream_data, GDestroyNotify stream_data_destroy, GError **error) ' Prepares a stream for playback. Private Extern rb_player_open(player As Pointer, uri As String, stream_data As Pointer, stream_data_destroy As Pointer, gerror As Pointer) As Boolean ' gboolean rb_player_play (RBPlayer *player, RBPlayerPlayType play_type, gint64 crossfade, GError **error) ' Starts playback of the most recently opened stream. Private Extern rb_player_play(player As Pointer, play_type As Integer, crossfade As Long, gerror As Pointer) As Boolean ' gint64 rb_player_get_time (RBPlayer *player) ' Returns the current playback for the current stream in nanoseconds. Private Extern rb_player_get_time(player As Pointer) As Long ' gboolean rb_player_close (RBPlayer *player, const char *uri, GError **error) ' Close the stream corresponding to that URI and free any resources related resources. Private Extern rb_player_close(player As Pointer, uri As String, gerror As Pointer) As Boolean Library "libgstreamer-1.0:0.2407.0" ' gst_init (int *argc, char **argv[]) ' Initializes the GStreamer library, setting up internal path lists, registering built-in elements, and loading standard plugins. Private Extern gst_init(argc As Pointer, argv As Pointer) ' gchar * g_filename_to_uri (const gchar *filename, const gchar *hostname, GError **error) ' Converts an absolute filename to an escaped ASCII-encoded URI. Private Extern g_filename_to_uri(filename As String, hostname As String, GError As Pointer) As String Public Sub Main() Dim pl As Pointer Dim fileaudio As String Dim bo As Boolean Dim tm As Long fileaudio = "/percorso/del/file/audio" If Not Exist(fileaudio) Then Error.Raise("ERRORE !") Print "File audio: "; fileaudio gst_init(0, 0) pl = rb_player_new(False, 0) If pl == 0 Then Error.Raise("ERRORE !") bo = rb_player_open(pl, g_filename_to_uri(fileaudio, Null, 0), 0, 0, 0) If Not bo Then Chiude(pl, fileaudio) Error.Raise("ERRORE !") Endif bo = rb_player_play(pl, RB_PLAYER_PLAY_AFTER_EOS, 0, 0) If Not bo Then Chiude(pl, fileaudio) Error.Raise("ERRORE !") Endif Repeat Wait 0.01 Until rb_player_get_time(pl) > 0 Repeat tm = rb_player_get_time(pl) Write "\r\e[0mPosizione:\e[31m " & Str(Time(0, 0, 0, tm / 1000000)) Wait 0.01 Until tm == rb_player_get_time(pl) Chiude(pl, fileaudio) End Private Procedure Chiude(po As Pointer, fa As String) rb_player_close(po, g_filename_to_uri(fa, Null, 0), 0) End