Eseguire una traccia di un CD-Audio con le risorse del API di libvlc

Da Gambas-it.org - Wikipedia.

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