Estrarre informazioni e TAG da un file OggVorbis con le sole funzioni di Gambas

Da Gambas-it.org - Wikipedia.
Versione del 19 feb 2014 alle 05:29 di Vuott (Discussione | contributi) (Creata pagina con '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...')

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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, tag As String
 Dim info As String[]  
 Dim ordo As New Integer[]  
 Dim j, rm, k As Integer  
 Dim agg As Byte = 24  
 
 
  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]
  
  ordo.add(InStr(s, "TITLE="))  
  ordo.add(InStr(s, "VERSION="))  
  ordo.add(InStr(s, "ALBUM="))  
  ordo.add(InStr(s, "TRACKNUMBER="))  
  ordo.add(InStr(s, "ARTIST="))  
  ordo.add(InStr(s, "PERFORMER="))  
  ordo.add(InStr(s, "COPYRIGHT="))  
  ordo.add(InStr(s, "LICENSE="))  
  ordo.add(InStr(s, "ORGANIZATION="))  
  ordo.add(InStr(s, "DESCRIPTION="))  
  ordo.add(InStr(s, "GENRE="))  
  ordo.add(InStr(s, "DATE="))  
  ordo.add(InStr(s, "LOCATION="))  
  ordo.add(InStr(s, "CONTACT="))  
  ordo.add(InStr(s, "COMMENT="))  
  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()  
    
  Print "\n  == T A G =="  
 
  If ordo.Count > 0 Then        ' Se è presente almeno un TAG
    
    If Mid(s, ordo[ordo.Max], 12) = "TRACKNUMBER=" Then agg = 15
    
    For j = 0 To ordo.Max  
 
    k = ordo[j]  
 
    While k < ordo[ordo.max] + agg  
        
      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$ As String
 Dim info$ As New String[]
 
 
   For j = 43 To 41 Step -1
     fr$ &= Hex(Asc(Mid(sf, j, 1)), 2)
   Next
 
   info$.Add(Val("&" & fr$))
   
   info$.Add(CStr(Asc(Mid(sf, 40, 1))))
   
   Return info$

End


Riferimenti

[1] Vorbis I specification