La lettura dei MetaData per il file audio è analoga a quella vista per i file video e utilizza il medesimo codice, tuttavia le informazioni fornite sono differenti: ovviamente non avremo valori relativi al codec video, o all'altezza del filmato, ma solo informazioni relative al codec audio utilizzato (e alla relativa qualità) e soprattutto una serie di informazioni inerenti la musica (o la canzone); queste informazioni sono il corrispondente di ciò che nei file MP3 sono i tag ID3 e il Flash Player offre un supporto parziale per questi valori, che vengono memorizzati nel MetaData tags.
I MetaData solitamente presenti in un file audio sono:
- audiosamplerate: qualità di codifica dell'audio;
- tags: tag relativi alla canzone;
- audiochannels: numero di canali audio;
- aacaot: tipo di oggetto AAC (può essere 0, 1 o 2);
- moovposition: la posizione dei bytes atom nel file; questi bytes contengono alcune informazioni fondamentali sul filmato;
- duration: restituisce la durata del file;
- audiocodecid: restituisce il codec di compressione audio usato nel file Per l'AAC restituisce 'mp4a', per l'MP3 invece restituisce '.mp3';
- trackinfo: un array contenente diversi oggetti che a loro volta includono informazioni sulle tracce presenti nel file;
Per quanto riguarda il MetaData tags, è possibile trovare una lista dei tag più comuni presenti nei file audio Mpeg-4. Interessante in particolare il dato covr che contiene un'immagine (ad esempio la copertina dell'album da cui è tratto il file) e può essere caricata tramite Actionscript 3 sfruttando un oggetto Loader, vediamo come.
Caricare l'immagine contenuta nel file
Intanto abbiamo visto che i tag sono contenuti all'interno dei MetaData, per cui dovremo impostare la funzione onMetaData, quindi accedere all'oggetto tags e ancora al suo interno ricavare il valore di covr:
Listato 9.1. Ricava la covr dai dati
// una volta caricati i MetaData del file
function onMetaData(oggetto:Object){
// ricaviamo la covr
trace(oggetto.tags.covr)
}
Il parametro covr è solitamente un array, che contiene nel primo indice (0) l'immagine memorizzata sotto forma di byte, quindi il trace potrebbe restituire un risultato un po' "strano".
In Actionscript 3 possiamo sfruttare un Loader per caricare i bytes restituiti dal tag covr, grazie al comando loadBytes.
Listato 9.2. Inserisce la cover nello stage
// una volta caricati i MetaData del file
function onMetaData(oggetto:Object){
// ricaviamo la cover
var cover = oggetto.tags.covr
// creiamo un nuovo loader
var loader:Loader = new Loader();
// vi carichiamo i bytes della cover
loader.loadBytes(cover[0]);
// inseriamo il loader sullo stage
addChild(loader);
}
In figura è possibile vedere il risultato:
L'immagine viene automaticamente caricata alle sue dimensioni reali. Ogni file può contenere al massimo un'immagine, non è comunque un tag "obbligatorio" per cui possono esserci dei file privi di questo dato, quindi può essere una buona idea inserire un controllo sulla sua presenza prima di caricare l'immagine:
Listato 9.3. Controlla la presenza della cover prima di caricarla
// una volta caricati i MetaData del file
function onMetaData(oggetto:Object){
// controlliamo la presenza dei tags e della cover
if(oggetto.tags != undefined && oggetto.tags.covr != undefined){
// se è presente, ricaviamo la cover
var cover = oggetto.tags.covr
// creiamo un nuovo loader
var loader:Loader = new Loader();
// vi carichiamo i bytes della cover
loader.loadBytes(cover[0]);
// inseriamo il loader sullo stage
addChild(loader);
}
}
Il controllo viene eseguito sia su tags (potrebbero esserci file completamente privi di queste informazioni) che su tags.covr (il file potrebbe contenere dei tag, ma non quello della cover). Con questo controllo evitiamo che il Flash Player restituisca degli errori come invece avverrebbe se provassimo a caricare la copertina da un file che ne risultasse privo.