Libreria di informazioni sui files MPEG Audio per .NET
Sommario
A cosa serve la libreria
Lo scopo è semplice: permettere di estrarre informazioni audio da un file MPEG.
Sicuramente tutti conoscete gli MP3 (che non sta altro per MPEG Layer-3).
In realtà gli MP3 non sono altro che files MPEG senza video. Grazie a questo
condividono con gli MPEG tutte le caratteristiche che andremo ad esaminare. Vi
anticipo subito che la tiritera teorica può non esservi gradita quindi potete
benissimo saltare il prossimo capitolo :-).
Sommario
Il formato MPEG
Il formato MPEG (motion-picture expert group) ha avuto la sua
massima espansione grazie agli algoritmi di compressione dell'audio. Il vero punto
di forza, però, è la sua grande flessibilità. L'MPEG ha potuto così mantenersi
allo stato dell'arte, cavalcando, fra l'altro, l'onda del Dolby Pro Logic.
Come tristemente noi programmatori abbiamo imparato, quando si sente la parola
"flessibilità" ci suona un campanellino in testa. Ed è il campanellino dei guai.
Il formato MPEG è un formato "segmentato". Ciò vuol dire che ci sono tanti
segmenti autonomi montati uno in seguito all'altro. Ogni segmento contiene informazioni
sufficienti per sè stesso e non è assolutamente conscio dei segmenti seguenti.
Il file MPEG è quindi una serie di frames, ciascuno indipendente dagli altri. Per questo motivo è sempre possibile riprodurre un file MPEG anche se ne è ottenuto metà (ad esempio da un download). E' sufficiente che sia leggibile un singolo frame header perchè sia possibile decodificare uno spezzone. Certi tipi di files hanno la dimensione dei frame che varia in funzione del bitrate e della compressione. Questi particolari tipi di files sono detti a bitrate variabile (VBR - variable bit rate).
Il tag ID3v1
Non preoccupatevi troppo della lunghezza dei campi che passate alla mia libreria. Se sono troppo lunghi verranno automaticamente troncati per rispettare le specifiche.
Sommario
Installazione
Scaricate il file compresso. Decomprimetelo in una cartella temporanea. Nello zip c'è la DLL pronta per essere usata e il file help in formato HTML compresso. Una volta decompresso potete installare la DLL nel global assembly cache (GAC) oppure inserirla in una cartella di staging. Per installarla nel GAC aprite una shell di comando e digitate
gacutil /i MindFlavor.Audio.dll.
Sommario
Usare la libreria
Usare la libreria è decisamente facile. Semplicemente create una nuova istanza della class MindFlavor.MPEG.Information passando nel costruttore il nome del file (ad es. MP3) che volete scandire. Per la documentazione on-line cliccate qui.
Vediamo un pò di codice di esempio:
Information info = new Information("C:\\mp3\\audio.mp3", 1);
In questo modo otteniamo le informazioni del file MPEG audio.mp3, scansionando soltanto il primo header (passando 1 come è secondo parametro).
if(info.Tag != null)
{
Console.WriteLine(info.Tag.Title);
Console.WriteLine(info.Tag.Artist);
Console.WriteLine(info.Tag.Album);
Console.WriteLine(info.Tag.Comment);
Console.WriteLine(info.Tag.Year.ToString());
Console.WriteLine(info.Tag.Genre.ToString());
}
Ora abbiamo stampato sulla console alcune informazioni del tag ID3v1. Il check se è null o meno è necessario perchè alcuni flussi mp3 potrebbero non avere il tag (ad esempio quelli corrotti).
lblVersion.Text = info.Headers[0].VersionID.ToString() + ", " +
info.Headers[0].Layer.ToString();
if(info.IsVBR)
Console.WriteLine("VBR (" + info.AverageBitRate + " Kbs)");
else
Console.WriteLine(info.Headers[0].BitRate.ToString());
Console.WriteLine(info.Headers[0].PositionInBytes.ToString());
Console.WriteLine(info.Headers[0].Emphasis.ToString());
Console.WriteLine(info.Headers[0].ChannelMode.ToString());
Console.WriteLine(info.Headers[0].IsCopyrighted.ToString());
Console.WriteLine(info.Headers[0].SamplingRate + " Hertz");
Console.WriteLine(info.Headers[0].IsOriginal.ToString());
Console.WriteLine(info.Headers[0].IsFramePadded.ToString());
Ora invece abbiamo mostrato alcune informazioni sul primo header. Dato che nel costruttore abbiamo scelto di scansionare solo il primo questo sarà l'unico header disponibile nell'array Headers.
In caso volessimo operare delle modifiche al tag bisognerà ricordarsi di chiamare il metodo UpdateFileTag.
Sommario
Applicazione dimostrativa
Per testare le potenzialità della classe ho scritto una semplicissima applicazione form. Lo screenshot sotto mostra un esecuzione. La potete scaricare dalla sezione downloads.
Sommario
Download
Libreria
| Versione |
Data |
Dimensione |
Download |
| 1.3.1351.662
| 13 Settembre 2003
| 42 KB
|
|
Applicazione di esempio
| Versione |
Data |
Dimensione |
Download |
| 1.0 (con sorgenti)
| 14 Settembre 2003
| 73 KB
|
|
Sommario
|