Casino online









Mercato forex







I Tag ID3 Versione 2.3



Header principale
Al contrario del suo predecessore, il sistema di tagging versione 2.3 viene posto non alla fine, ma all'inizio del file e non ha dimensione fissa, come accennato in precedenza. Infatti in questa nuova versione si può aggungere un numero arbitrario di informazioni al file, ognuna di questa racchiusa in un contenitore "a tenuta stagna" separato da tutti gli altri e comunemente detto frame. I frames, a loro volta, possono però avere lunghezza prefissata, e ne è un esempio l'header frame, ossia il frame principale che comunica l'inizio di tutto il tag ID3.
L'header frame è lungo 10 bytes e costituisce i primissimi dati inseriti all'interno del file, secondo questa semplice suddivisione:
  1. Identificatore tag ID3 (3 bytes) : semplicemente la stringa "ID3"
  2. Versione tag (2 bytes) : siccome si tratta di tag ID3, la versione è sempre 3. Perciò il primo byte avrà valore 3, mentre il secondo 0, ossia 03 00
  3. Flags (1 byte) : i flags, propriamente, sono come enumeratori su bit, ossia costituiscono degli "interruttori" che possono essere accessi o spenti. Ho trattato di questo argomento nel capitolo sugli enumeratori della versione 2 della mia guida al Visual Basic .Net 2005, reperibile su questo sito. Comunque, ogni bit di questo byte fornisce una diversa informazione, ma solo i primi tre bits vengono usati e hanno rispettivamente questi significati:
    • Bit 7, Desincronizzazione : se impostato su 1, viene attivata la funzione di desincronizzazione, un dettaglio che non spiegherò in questo tutorial
    • Bit 6, Estensione dell'Header : se impostato su 1, indica che l'header contiene ulteriori informazioni e che quindi è necessario continuarne la lettura anche oltre. Tale header aggiuntivo in realtà contiene un solo bit aggiuntivo di informazione (sul CRC): tutto il resto dei suoi 6-10 bytes è impiegato per definire dimensioni e rapporti con l'header principale. Alquanto inutile, direi
    • Bit 5, Indicatore sperimentale : usato solo quando il tag si trova in uno stato di sperimentazione
    Ad esempio, quindi, il byte 01100000 = 60 = 96 segnalerà queste informazioni: Desincronizzazione disattivata, Header esteso, Fase sperimentale. Gli altri bit non vengono utilizzati
  4. Dimensione (4 bytes) : rappresenta la dimensione, in bytes, di tutto il tag ID3, ossia comprendendo tutti i vari frames successivi ed eventualmente anche la dimensione dell'estensione dell'header stesso. Questa dimensione non conta i primi 10 bytes originali del main header stesso. E se questa vi sembra una complicazione, aspettate di leggere come diavolo si deve scrivere questo numero. Avendo a disposizione 4 bytes, ovviamente, uno penserebbe di potervi inserire liberamente un intero a 32 bit: sbagliato! In questo caso molto particolare, il primo bit di ogni byte viene sempre impostato a 0 e non può essere utilizzato (Dio sa perchè! forse per limitare la grandezza del tag). Quindi i bit disponibili diventano 28. Ad esempio, il numero 260 dovrebbe comunemente essere rappresentato in questo modo:

    00000000 00000000 00000001 00000100
    00 00 01 04

    Invece, poichè si sono stati sottratti i bit iniziali di ogni byte (in grassetto), dobbiamo assumere che questi non ci siano e scrivere questo:

    00000000 00000000 00000010 00000100
    00 00 02 04

    In questo modo, è come se il bit 7 del byte 3 si fosse spostato a sinistra di un posto. Per facilitare la compresione, si può pensare che ognuno di questi 4 bytes contenga sette bits anzichè otto

Struttura Header principale
3 bytes 2 bytes 1 byte 4 bytes
Identificatore ("ID3") Versione tag Flags Dimensione tag (28bit)

Prima di continuare, vorrei riprendere in analisi la nostra ormai famosa Rapsodia Ungara per un'ulteriore chiarificazione. Apriamo il file ancora una volta con l'hex editor. Selezioniamo i primi 10 bytes, e dividiamoli secondo le specifiche dell'header principale: Nel tutorial precedente, abbiamo cercato l'inizio dell'header principale andando un po' a tentativi. Ora possiamo verificare se abbiamo sbagliato oppure se ci è andata bene. Infatti, basta saltare i primi 4086+10 bytes di informazione per trovare l'inizio dell'mp3 vero e proprio. L'indirizzo che otteniamo è 4096, che corrisponde all'esadecimale 1000, ossia proprio quello che avevamo individuato come inizio dell'header mp3.


I primi 10 bytes


In generale, in ogni frame dichiarato nel corpo del tag, i primi 10 bytes assumono sempre la stessa funzione:
  1. Nome del tag (4 bytes) : un titolo di un qualsiasi frame, costituito da quattro caratteri alfanumerici
  2. Dimensione (4 bytes) : dimensione del frame, escludendo questi 10 bytes
  3. Flags (2 bytes) : ovviamente, se si può sprecare dello spazio, perchè non farlo? I 6 bits usati, infatti, sono rispartiti sui primi tre bits di due bytes:

    abc00000 def00000

    1. Preservazione frame : se un software che non riconosce il frame altera il tag ID3 in qualche modo, questo campo indica se si debba comunque mantenere il frame nel file (0), oppure se scartarlo quando il file viene modificato (1)
    2. Preservazione file : se un software che non riconosce il frame altera il file in qualche modo, questo campo indica se si debba comunque mentere il frame nel file (0), oppure se scartarlo (1)
    3. Sola lettura : se impostato a 1, questo campo indica che il frame è in sola lettura e che, quindi, la modifica di una qualsiasi delle sue parti potrebbe comportarne il malfunzionamento. Si attiva questo bit, ad esempio, quando il contenuto del frame deve essere calcolato sulla base di qualche parametro. Qualora il frame venisse modificato senza i dovuti accorigmenti, questo bit dovrebbe essere annullato (0)
    4. Compressione : se il contenuto del frame è stato compresso con algoritmo zip deflate (SharpZLib), questo bit è impostato su 1. In questo caso, ci saranno altri 4 bytes aggiunti alla fine dell'header che indicano la dimensione decompressa
    5. Cifratura : se impostato a 1, questo bit comunica che il contenuto del frame è stato criptato. Le informazioni occorrenti a un programma per decrittare correttamente tale frame vengono fornite in un header a parte, il quale contiene un identificativo della società a cui appartiene l'algoritmo di criptazione, un byte indentificativo del metodo usato e l'insieme dei dati cifrati
    6. Raggruppamento : questo bit indica se il frame appartiene ad un dato gruppo di frames. Se impostato a 1, ci sarà un ulteriore byte in coda a questo header che specifica il numero identificativo del gruppo in questione
Struttura Frame Header
4 bytes 4 bytes 2 bytes
Identificatore Dimensione frame (28bit) Flags

Ciò detto, ecco una descrizione di alcuni dei più importanti frames usati.


Frame di testo
I frame di testo sono in assoluto i più importanti, poiché contengono gran parte delle informazioni attribuite al brano e che possono essere ridotte sottoforma di stringa, come, ad esempio, il titolo, l'autore, l'anno di pubblicazione, eccetera... In sostanza, i frame di testo sostituiscono, integrano e ampliano di molto ciò che era prima salvato secondo le specifiche della versione 1.1. La fisionomia di questi frames è davvero semplice: dopo l'header, che come indentificativo conterrà una sigla di quattro lettere la prima delle quali è sempre una "T", viene un byte che rappresenta il tipo di codifica e poi tutto il testo voluto.

Header Contenuto
4 bytes 4 bytes 2 bytes 1 byte x bytes
Identificativo Dimensione Flags Codifica Testo del frame

Di questi frames ce n'è infatti una quantità esagerata; nella lista che segue riporterò i frames più importanti, specificando prima il loro identificativo di quattro lettere (che dovrà apparire nell'header del frame stesso) e poi la loro funzione. Vediamo di estrapolare ancora qualcosa dalla Rapsodia. I primi bytes che si presentano sono, ancora:


I primi bytes

In questa immagine possiamo cogliere un frame TIT2 che riporta il titolo "Rapsodia ungara 2" e i frame TPE1 e TCOM, che contengono il nome dell'autore e compositore "Franz Liszt" (ovviamente non è Liszt che suona, ma non sapevo chi fosse il pianista).


Frame di collegamento
Tutti i frames di questa famiglia sono dello stesso genere dei frames di testo, ma le stringhe al loro interno sono sempre collegamenti a siti web. Eccone una breve lista:
Riconoscimenti
Il frame dei riconoscimenti ha struttura uguale a quella dei frames di testo, ma il suo identificatore è "IPLS". Il testo che contiene non è che un insieme di stringhe, separate da un byte nullo (0) che rappresentano rispettivamente il ruolo della persona e il suo nome, ad esempio: "Effetti sonori[NULL]Mario Rossi[NULL]Tecnico audio[NULL]Pinco Pallino[NULL]...".

Testo della canzone
Un'altra interessante feature che i frames offrono nei tag ID3v2.3 è quella di memorizzare nel file mp3 anche le parole del testo della canzone. Questo viene fatto mediante il frame di testo sincronizzato, il cui indentificatore è "SYLT". Oltre all'header normale, questo frame ha un altro header, che segue subito il primo, e i cui bytes corrispondono a queste informazioni:
  1. Codifica (1 byte) : questo byte indica la codifica del testo. Come accade generalmente anche negli altri frame, è impostato a 0
  2. Lingua (3 bytes) : la lingua in cui il testo della canzone viene scritto. Non sapendo cosa introdurre in questi misteriosi 3 bytes, è lecito lasciare anche questi dati impostati su 0
  3. Formato del timestamp (1 byte) : poiché ogni parte del testo viene associato ad un dato momento a cui apparire sullo schermo, deve essere seguito anche da alcune informazioni sul timestamp, ossia sul tempo trascorso dall'inizio della riproduzione. Questo byte specifica se ci si debba riferire a millisecondi (e il suo valore è 2) oppure agli stessi frame come unità (1). Io consiglio di usare la prima opzione, poiché consente una maggiore precisione
  4. Tipo di contenuto (1 byte) : il testo della musica può riferirsi a diversi ambiti e perciò assumere diversi significati, tra i quali:
    • Non specificato (0)
    • Testo della canzone (1)
    • Trascrizione del testo (2)
    • Nome della parte o del movimento (3) (es. "Adagio")
    • Evento di scena (4) (se si tratta della musica di un'opera o di un video
    • Accordi (5)
    • Altro (6)
    Sarebbe molto utile ad un musicista avere la trascrizione di tutti gli accordi suonati nel brano, ad esempio. E questo frame permette di far non solo questo
  5. Descrizione del contenuto (x bytes) : una stringa che descrive il contenuto, terminata con un carattere nullo

Header aggiuntivo
1 byte 3 bytes 1 byte 1 byte x bytes
Codifica Linguaggio Formato timestamp Tipo di contenuto Descrizione contenuto

Dopo l'header seguono i tanti pezzetti di testo sincronizzati, ognuno dei queli è formato da due parti:
Commenti
I commenti sono altri frames di testo che contengono tutto quello che non può stare nei frames sopra descritti. L'identificativo è "COMM". La sua struttura è molto semplice:

Struttura commento
1 byte 3 bytes x bytes x bytes
Codifica Linguaggio Descrizione contenuto Commento

Tutte le stringhe ivi contenute devono terminare come al solito con un carattere nullo.


Immagini allegate
Usando i tag ID3v2.3 è anche possibile allegare alcune immagini al file mp3, ad esempio quelle del CD da cui il file è stato preso. Tutte le immagini immesse, che possono avere differente scopo, sono incapsulate in un frame il cui identificatore è "APIC". Le informazioni che vengono dopo l'header del frame sono:
  1. Codifica (1 byte)
  2. MIME type (x bytes) : il MIME type è una stringa che descrive il tipo del file in questione. In questo caso, sarà "image/jpeg" per le immagini con estensione *.jpg "image/png" per le png e così via. È essenziale per far sapere al programma che legge il tag come decodificare i dati immagine passati successivamene
  3. Tipo di immagine (1 byte) : un singolo byte che può assumere questi valori:
    • 0 : Altro
    • 1 : Icona 32x32 (valida solo con file *.png)
    • 2 : Icona (di altro tipo)
    • 3 : Copertina (fronte)
    • 4 : Copertina (retro)
    • 5 : Depliant
    • 6 : Etichetta del CD
    • 7 : Artista principale / Solista
    • 8 : Artisti
    • 9 : Direttore d'Orchestra
    • 10 : Orchestra / Band
    • 11 : Compositore
    • 12 : Autore dei testi
    • 13 : Località della registrazione
    • 14 : Immagini prese durante la registrazione
    • 15 : Immagini prese durante il concerto
    • 16 : Screenshot del film/video
    • 18 : Illustrazione
    • 19 : Logo dell'artista
    • 20 : Logo della casa discografica
  4. Descrizione (x bytes) : stringa con terminatore nullo (max 64 caratteri)
  5. Immagine (x bytes) : l'immagine stessa, byte per byte
Struttura Immagine allegata
1 byte x bytes 1 byte x bytes x bytes
Codifica MIME type Tipo di immagine Descrizione breve dell'immagine Immagine vera e propria


Oggetto
Oltre ad immagini, il tag può contenere anche un generico file od oggetto. In questo caso si usa il frame identificato "GEOB" (General Encapsulated OBject). Ecco la sua struttura:

Struttura Oggetto
1 byte x bytes x bytes x bytes x bytes
Codifica MIME type Nome del file Descrizione contenuto File/Oggetto vero e proprio


Contatore
Questo simpatico frame tiene il conto di quante volte il file viene riprodotto, e aumenta il proprio contatore di uno ogni volta. Tutto quello che contiene è semplicemente un intero a 32 bit che indica il numero a cui si è arrivati. Nonostante 32 bit comportino una dimensione abbastanza grande, arrivando fino a più di 2'000'000'000, se il contatore supera questo valore si può sempre aggiungere un altro byte all'inizio formando interi sempre più grandi (a 40, 48, 64, 72 bit, eccetera...). Il suo identificatore è "PCNT" (Play CouNTer)


Indice di gradimento
Altro simpatico frame che indica quanto è gradito il brano all'utente. Ha come indentificatore "POPM" (POPulariMeter) e consta di tre semplici campi:
  1. Email ell'utente (x bytes) : stringa a terminatore nullo
  2. Voto (1 byte) : voto assegnato, da 1 a 255
  3. Contatore (4 byte) : ha la stessa funzione del frame PCNT
Nell'immagine proposta prima possiamo notare un frame POPM che riporta il nome del programma al posto dell'email ("Windows Media Player 9 Series") e l'indice di gradimento (255), mentre il contatore è assente, in quanto non è obbligatorio.


Informazioni di vendita
Questo frame contiene tutte le informazioni inerenti all'ente che vende e/o distribuisce il file e possiede questi campi:
  1. Codifica (1 byte)
  2. Prezzo (x bytes) : stringa a terminatore nullo che rappresenta il prezzo del file/cd
  3. Scadenza (8 bytes) : una stringa formattata secondo "YYYYMMDD" che rappresenta la data fino alla quale il prezzo stabilito rimane valido
  4. Indirizzo del venditore (x bytes) : stringa a terminatore nullo che rappresenta l'home page o l'indirizzo e-mail dell'ente che distribuisce il file
  5. Modalità di acquisto (1 byte) : determina come si è venuti in possesso del file. Il byte può assumere questi valori:
    • 0 : Altro
    • 1 : Un CD standard, contenenta anche altre conzoni
    • 2 : File audio compresso, proveniente da un CD
    • 3 : Scaricato da Internet
    • 4 : Scaricato in Streaming da Internet
    • 5 : In allegato a uno spartito
    • 6 : In allegato a un libro di spartiti
    • 7 : Altri mezzi
    • 8 : Proveniente da fonti non inerenti alla musica
  6. Nome del venditore (x bytes) : stringa a terminatore nullo che rappresenta il nome del venditore
  7. Descrizione del prodotto (x bytes) : stringa a terminatore nullo con una breve descrizione del file
  8. MIME type (x bytes) : stringa a terminatore nullo rappresentante il MIME type dell'immagine che segue
  9. Logo del venditore (x bytes) : immagine rappresentante il logo del venditore

Struttura Informazioni di Vendita
1 byte x bytes 8 bytes x bytes 1 byte x bytes x bytes x bytes x bytes
Codifica Prezzo Scadenza Indirizzo venditore Modalità acquisto Nome venditore Descrizione file MIME type Logo venditore


Gran parte del materiale qui riportato è stato prelevato dal sito ID3.Org






 

The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.