Differenze tra le versioni di "Convertire un numero di settori di un CD/DVD in ore,minuti,secondi con le funzioni del API Libdiscid"
Da Gambas-it.org - Wikipedia.
(Creata pagina con ''''Libdiscid''' è una libreria C per la creazione di un Id disco ''MusicBrainz'' e freedb da un CD audio. Essa legge una tabella di contenuti di un CD (TOC) e genera un ident...') |
|||
Riga 1: | Riga 1: | ||
'''Libdiscid''' è una libreria C per la creazione di un Id disco ''MusicBrainz'' e freedb da un CD audio. Essa legge una tabella di contenuti di un CD (TOC) e genera un identificatore che può essere utilizzato per cercare il CD in ''MusicBrainz''. | '''Libdiscid''' è una libreria C per la creazione di un Id disco ''MusicBrainz'' e freedb da un CD audio. Essa legge una tabella di contenuti di un CD (TOC) e genera un identificatore che può essere utilizzato per cercare il CD in ''MusicBrainz''. | ||
− | Per fruire delle sue risorse in Gambas, è necessario installare richiamare la libreria condivisa: "''libdiscid.so.0.6.1''" | + | Per fruire delle sue risorse in Gambas, è necessario installare richiamare la libreria condivisa: "''libdiscid.so.0.6.1'' ". |
− | + | Mostriamo un semplice esempio per convertire un numero di settori di un CD/DVD in ''ore:minuti:secondi'': | |
− | Mostriamo un semplice esempio per convertire un numero di settori di un CD/DVD in ore:minuti:secondi: | ||
Private Const SETTORI_PER_SECONDO As Integer = 75 | Private Const SETTORI_PER_SECONDO As Integer = 75 | ||
Riga 54: | Riga 53: | ||
− | + | Public Sub Main() | |
− | + | Dim disc, dev As Pointer | |
− | + | Dim err, prima_traccia, ultima_traccia As Integer | |
− | + | Dim settori, i As Integer | |
− | + | Dim durata_in_secondi As Single | |
disc = discid_new() | disc = discid_new() | ||
Riga 76: | Riga 75: | ||
settori = discid_get_sectors(disc) | settori = discid_get_sectors(disc) | ||
durata_in_secondi = settori / SETTORI_PER_SECONDO | durata_in_secondi = settori / SETTORI_PER_SECONDO | ||
− | Print "Lunghezza: "; Null, settori; " Settori ("; CStr( | + | Print "Lunghezza: "; Null, settori; " Settori ("; CStr(Time(0, 0, 0, durata_in_secondi * 1000)); ")" |
Print | Print | ||
For i = prima_traccia To ultima_traccia | For i = prima_traccia To ultima_traccia | ||
Riga 85: | Riga 84: | ||
discid_free(disc) | discid_free(disc) | ||
− | + | End | |
− | + | Private Procedure Durata_Settori(ds As Pointer, sett As Integer, c As Integer) | |
Dim durata_in_secondi As Single | Dim durata_in_secondi As Single | ||
Riga 94: | Riga 93: | ||
durata_in_secondi = sett / SETTORI_PER_SECONDO | durata_in_secondi = sett / SETTORI_PER_SECONDO | ||
− | Print "Traccia "; c; ":"; Null, discid_get_track_offset(ds, c); Null, sett, " ("; CStr( | + | Print "Traccia "; c; ":"; Null, discid_get_track_offset(ds, c); Null, sett, " ("; CStr(Time(0, 0, 0, durata_in_secondi * 1000)); ")" |
− | + | End | |
− | |||
Versione attuale delle 23:40, 21 ott 2024
Libdiscid è una libreria C per la creazione di un Id disco MusicBrainz e freedb da un CD audio. Essa legge una tabella di contenuti di un CD (TOC) e genera un identificatore che può essere utilizzato per cercare il CD in MusicBrainz.
Per fruire delle sue risorse in Gambas, è necessario installare richiamare la libreria condivisa: "libdiscid.so.0.6.1 ".
Mostriamo un semplice esempio per convertire un numero di settori di un CD/DVD in ore:minuti:secondi:
Private Const SETTORI_PER_SECONDO As Integer = 75 Library "libdiscid:0.6.1" ' DiscId *discid_new() ' Return a handle for a new DiscId object. Private Extern discid_new() As Pointer ' int discid_read_sparse(DiscId *d, const char *device, unsigned int features) ' Read the disc in the given CD-ROM/DVD-ROM drive extracting only the TOC and additionally specified features. Private Extern discid_read_sparse(d As Pointer, device As String, features As Integer) As Integer ' char *discid_get_error_msg(DiscId *d) ' Return a human-readable error message. Private Extern discid_get_error_msg(d As Pointer) As String ' char *discid_get_id(DiscId *d) ' Return a MusicBrainz DiscID. Private Extern discid_get_id(d As Pointer) As String ' char *discid_get_freedb_id(DiscId *d) ' Return a FreeDB DiscID. Private Extern discid_get_freedb_id(d As Pointer) As String ' int discid_get_first_track_num(DiscId *d) ' Return the number of the first track on this disc. Private Extern discid_get_first_track_num(d As Pointer) As Integer ' int discid_get_last_track_num(DiscId *d) ' Return the number of the last audio track on this disc. Private Extern discid_get_last_track_num(d As Pointer) As Integer ' int discid_get_sectors(DiscId *d) ' Return the length of the disc in sectors. Private Extern discid_get_sectors(d As Pointer) As Integer ' int discid_get_track_length(DiscId *d, int track_num) ' Return the length of a track in sectors. Private Extern discid_get_track_length(d As Pointer, track_num As Integer) As Integer ' int discid_get_track_offset(DiscId *d, int track_num) ' Return the sector offset of a track. Private Extern discid_get_track_offset(d As Pointer, track_num As Integer) As Integer ' void discid_free(DiscId *d) ' Release the memory allocated for the DiscId object. Private Extern discid_free(d As Pointer) Public Sub Main() Dim disc, dev As Pointer Dim err, prima_traccia, ultima_traccia As Integer Dim settori, i As Integer Dim durata_in_secondi As Single disc = discid_new() err = discid_read_sparse(disc, Null, 0) If err = 0 Then Error.Raise("Errore: " & discid_get_error_msg(disc)) Print "ID Disco: "; Null, discid_get_id(disc) Print "FreeDB DiscID: "; Null, discid_get_freedb_id(disc) prima_traccia = discid_get_first_track_num(disc) Print "Prima traccia: "; Null, prima_traccia ultima_traccia = discid_get_last_track_num(disc) Print "Ultima traccia: "; Null; ultima_traccia settori = discid_get_sectors(disc) durata_in_secondi = settori / SETTORI_PER_SECONDO Print "Lunghezza: "; Null, settori; " Settori ("; CStr(Time(0, 0, 0, durata_in_secondi * 1000)); ")" Print For i = prima_traccia To ultima_traccia settori = discid_get_track_length(disc, i) Durata_Settori(disc, settori, i) Next discid_free(disc) End Private Procedure Durata_Settori(ds As Pointer, sett As Integer, c As Integer) Dim durata_in_secondi As Single durata_in_secondi = sett / SETTORI_PER_SECONDO Print "Traccia "; c; ":"; Null, discid_get_track_offset(ds, c); Null, sett, " ("; CStr(Time(0, 0, 0, durata_in_secondi * 1000)); ")" End