Estrarre informazioni e TAG da un file OggVorbis con le sole funzioni di Gambas
Da Gambas-it.org - Wikipedia.
Versione del 26 feb 2014 alle 05:03 di Vuott (Discussione | contributi)
E' possibile estrarre informazioni generali e TAG da un file OggVorbis con le sole funzioni di Gambas.
Un possibile codice è il seguente:
Public Sub Main() Dim percorsoFile, s, s2, tag As String Dim info As String[] Dim ordo As New Integer[] Dim j, rm, k As Integer Dim n As Byte percorsoFile = "/percorso/del/file.ogg" s = File.Load(percorsoFile) ' Verifica se effettivamente è un file .ogg: If Left(s, 4) <> "OggS" Then Error.Raise("Attenzione ! Il file caricato non è un file OGG !") Print "File audio ogg: '"; File.Name(percorsoFile); "'" Print "\nDimensione: "; Len(s); " byte" ' Estrae informazioni generali (frequenza di campionamento e canali) sul file: info = EstraeInfo(s) Print "Frequenza di campionamento = hz "; info[0] Print "Canali = "; info[1] Print "Bitrate nominale = "; info[2]; " kbps" ordo.add(InStr(s, "TITLE=")) ordo.add(InStr(s, "title=")) ordo.add(InStr(s, "VERSION=")) ordo.add(InStr(s, "version=")) ordo.add(InStr(s, "ALBUM=")) ordo.add(InStr(s, "VERSION=")) ordo.add(InStr(s, "TRACKNUMBER=")) ordo.add(InStr(s, "tracknumber=")) ordo.add(InStr(s, "ARTIST=")) ordo.add(InStr(s, "artist=")) ordo.add(InStr(s, "PERFORMER=")) ordo.add(InStr(s, "performer=")) ordo.add(InStr(s, "COPYRIGHT=")) ordo.add(InStr(s, "copyright=")) ordo.add(InStr(s, "LICENSE=")) ordo.add(InStr(s, "license=")) ordo.add(InStr(s, "ORGANIZATION=")) ordo.add(InStr(s, "organization=")) ordo.add(InStr(s, "DESCRIPTION=")) ordo.add(InStr(s, "description=")) ordo.add(InStr(s, "GENRE=")) ordo.add(InStr(s, "genre=")) ordo.add(InStr(s, "DATE=")) ordo.add(InStr(s, "date=")) ordo.add(InStr(s, "LOCATION=")) ordo.add(InStr(s, "location=")) ordo.add(InStr(s, "CONTACT=")) ordo.add(InStr(s, "contact=")) ordo.add(InStr(s, "COMMENT=")) ordo.add(InStr(s, "comment=")) ordo.add(InStr(s, "ISRC=")) ordo.add(InStr(s, "isrc=")) While j < ordo.Count If ordo[j] = 0 Then ordo.Remove(j) Inc rm Dec j Endif Inc j Wend ordo.Sort() s2 = Mid(s, ordo[ordo.Max], 255) n = InStr(s2, "vorbis") - 1 Print "\n == T A G ==" If ordo.Count > 0 Then ' Se è presente almeno un TAG For j = 0 To ordo.Max k = ordo[j] While k < ordo[ordo.max] + n If j < ordo.Max Then ' Verifica che il carattere ASCII sia una lettera o un numero oppure un segno di punteggiatura: If (k < ordo[j + 1]) And ((IsLetter(Mid(s, k, 1))) Or (IsDigit(Mid(s, k, 1))) Or (IsPunct(Mid(s, k, 1)))) Then tag &= Mid(s, k, 1) Else tag &= " " Endif Else ' Verifica che il carattere ASCII sia una lettera o un numero oppure un segno di punteggiatura: If ((IsLetter(Mid(s, k, 1))) Or (IsDigit(Mid(s, k, 1))) Or (IsPunct(Mid(s, k, 1)))) Then tag &= Mid(s, k, 1) Else tag &= " " Endif Endif Inc k Wend Print tag tag = Null Next Else Print "Assenti !" Endif End Private Function EstraeInfo(sf As String) As String[] Dim j As Byte Dim fr$, br$ As String Dim info$ As New String[] ' Estrae la frequenza di campionamento: For j = 43 To 41 Step -1 fr$ &= Hex(Asc(Mid(sf, j, 1)), 2) Next info$.Add(Cstr(Val("&" & fr$))) ' Estrae il numero di canali d'uscita: info$.Add(CStr(Asc(Mid(sf, 40, 1)))) ' Estrae il bitrate nominale: For j = 51 To 49 Step -1 br$ &= Hex(Asc(Mid(sf, j, 1)), 2) Next info$.Add(CStr(Val("&" & br$) \ 1000)) Return info$ End