Conoscere il numero delle tracce ed i numeri dei settori logici di un CD con le funzioni del API di libcdio

Da Gambas-it.org - Wikipedia.

La libreria Libcdio consente di gestire i CD ed i relativi driver presenti nel sistema.

Per utilizzare le funzioni esterne del API di libcdio sarà necessario richiamare l'attuale libreria: "libcdio.so.18.0.0".


Mostriamo di seguito un semplice codice che consentirà di conoscere il numero delle tracce ed i numeri dei settori logici di un CD.

Library "libcdio:18.0.0"

Private Enum DRIVER_UNKNOWN = 0, DRIVER_AIX, DRIVER_FREEBSD, DRIVER_NETBSD, DRIVER_LINUX, DRIVER_SOLARIS,
             DRIVER_OSX, DRIVER_WIN32, DRIVER_CDRDAO, DRIVER_BINCUE, DRIVER_NRG, DRIVER_DEVICE
Private Const CDIO_INVALID_LSN As Integer = -45301
Private Const CDIO_CDROM_LEADOUT_TRACK As Integer = &AA

' CdIo_t * cdio_open (const char *psz_source, driver_id_t driver_id)
' Sets up to read from place specified by psz_source and driver_id.
Private Extern cdio_open(psz_source As String, driver_id As Integer) As Pointer

' track_t cdio_get_num_tracks(const CdIo_t * p_cdio)
' Get the number of tracks on the CD.
Private Extern cdio_get_num_tracks(cdioP As Pointer) As Byte

' track_t cdio_get_first_track_num(const CdIo_t * p_cdio)
' Get the number of the first track.
Private Extern cdio_get_first_track_num(cdioP As Pointer) As Byte

' lsn_t cdio_get_track_lsn(const CdIo_t * p_cdio, track_t u_track)
' Return the starting LSN for track number i_track in p_cdio.
Private Extern cdio_get_track_lsn(cdioP As Pointer, u_track As Integer) As Integer

' void cdio_destroy(CdIo_t * p_cdio)
' Free any resources associated with p_cdio.
Private Extern cdio_destroy(cdioP As Pointer)
 

Public Sub Main()

 Dim p_cdio As Pointer
 Dim tracce, prima_traccia As Byte
 Dim i, j, lsn As Integer
 
  p_cdio = cdio_open(Null, DRIVER_LINUX)
  If p_cdio = 0 Then Error.Raise("Impossibile trovare il driver per il cd-rom !")
   
  tracce = cdio_get_num_tracks(p_cdio)
  i = CInt(cdio_get_first_track_num(p_cdio))
  prima_traccia = i
  Print "Tracce del CD-ROM ("; prima_traccia; " - "; prima_traccia + tracce - 1; ")"
  Print " #:  LSN"
  For j = 0 To tracce - 1
    lsn = cdio_get_track_lsn(p_cdio, i)
    If (CDIO_INVALID_LSN <> lsn) Then Print Format(i, "#0:"), Format(CLong(lsn), "000000")
    Inc i
  Next
  Print Hex(CDIO_CDROM_LEADOUT_TRACK, 2); ": "; CLong(cdio_get_track_lsn(p_cdio, CDIO_CDROM_LEADOUT_TRACK)); " leadout"
   
   
' Va in chiusura:
  cdio_destroy(p_cdio)
  
 End



Riferimenti