Eseguire una traccia di un CD-Audio con le risorse del API di libvlc
Per eseguire una traccia di un CD-Audio con le funzioni esterne del API di libvlc, sarà necessario avere installata nel sistema e richiamare in Gambas la libreria condivisa: "libvlc.so.5.6.0".
Va precisato che nel secondo argomento della funzione esterna "libvlc_media_new_location( )" si specificherà come segue:
"cdda://dispositivo_cdrom/traccia_num.wav"
Poiché solitamente la traccia è rappresentata nel CD-Audio con la parola "Track" separata con uno spazio dal numero della traccia (così ad esempio la traccia num. 1: "Track 1.wav"), nel programma lo spazio dovrà essere rappresentato con il codice alfanumerico "%20".
Esempio:
Track%201.wav
Ricordiamo che il valore esadecimale 0x20 (in Gambas &H20) corrisponde al carattere dello "spazio" nel codice ASCII.
Pertanto la stringa finale da passare alla predetta funzione esterna di libvlc sarà ad esempio:
cdda://sr0/Track%201.wav
Mostriamo di seguito un esempio per eseguire la traccia numero 1 di un CD-Audio:
Library "libvlc:5.6.0" Enum libvlc_NothingSpecial = 0, libvlc_Opening, libvlc_Buffering, libvlc_Playing, libvlc_Paused, libvlc_Stopped, libvlc_Ended, libvlc_Error ' libvlc_instance_t * libvlc_new (int argc, const char *const *argv) ' Create And initialize a libvlc instance. Private Extern libvlc_new(argc As Integer, argv As String) As Pointer ' libvlc_media_t * libvlc_media_new_location (libvlc_instance_t *p_instance, const char *psz_mrl) ' Create a media with a certain given media resource location, for instance a valid URL. Private Extern libvlc_media_new_location(p_instance As Pointer, psz_mrl As String) As Pointer ' libvlc_media_player_t * libvlc_media_player_new_from_media (libvlc_media_t *p_md) ' Create a Media Player object from a Media. Private Extern libvlc_media_player_new_from_media(p_md As Pointer) As Pointer ' int libvlc_media_player_play (libvlc_media_player_t * p_mi) ' Play the Midi file. Private Extern libvlc_media_player_play(p_mi As Pointer) As Integer ' libvlc_time_t libvlc_media_get_duration(libvlc_media_t *p_md) ' Get duration (in ms) of media descriptor object item. Private Extern libvlc_media_get_duration(p_md As Pointer) As Long ' libvlc_time_t libvlc_media_player_get_time(libvlc_media_player_t * p_mi) ' Get the current movie time (in ms). Private Extern libvlc_media_player_get_time(p_mi As Pointer) As Integer ' libvlc_state_t libvlc_media_player_get_state(libvlc_media_player_t *p_mi) ' Get current movie state. Private Extern libvlc_media_player_get_state(p_mi As Pointer) As Integer ' void libvlc_media_player_release (libvlc_media_player_t * p_mi) ' Release a media_player after use Decrement the reference count of a media player object. Private Extern libvlc_media_player_release(p_mi As Pointer) ' void libvlc_media_release (libvlc_media_t *p_md) ' Decrement the reference count of a media descriptor object. Private Extern libvlc_media_release(p_md As Pointer) ' libvlc_release (libvlc_instance_t * p_instance) ' Decrement the reference count of a libvlc instance, and destroy it if it reaches zero. Private Extern libvlc_release(p_instance As Pointer) Public Sub Main() Dim inst, m, mp As Pointer ' Inizializza la libreria VLC: inst = libvlc_new(0, Null) ' Crea un nuovo oggetto multimedia: m = libvlc_media_new_location(inst, "cdda://sr0/Track%201.wav") ' Crea un media player: mp = libvlc_media_player_new_from_media(m) ' Avvia l'esecuzione della traccia audio da parte del media player: libvlc_media_player_play(mp) While libvlc_media_player_get_state(mp) < libvlc_Stopped Write "\r\e[0Durata della traccia: " & Str(Date(0, 0, 0, 0, 0, 0, libvlc_media_get_duration(m))) & " - " & "Tempo trascorso: \e[31m" & Date(0, 0, 0, 0, 0, 0, libvlc_media_player_get_time(mp)) Wend Print "\nTermine esecuzione" ' Chiude la libreria VLC: libvlc_media_player_release(mp) libvlc_media_release(m) libvlc_release(inst) End