
A program zenei állományt futtató funkciójának használatához rendelkeznünk kell valamilyen, a zenei állományok lejátszására alkalmas programmal.
Az MP3 szabvány értelmében az ilyen kiterjesztéssel rendelkező állományok információikat tekintve önleíróak, vagyis a bináris adatfolyam egy bizonyos részszakaszában tárolják az előadóra, az album és a zeneszám címére, valamint a kiadás évére vonatkozó információkat.
Az állomány rendelkezik egy 128 bájt hosszúságú fejrésszel, melyben a „TAG” karakterlánc vezeti be az információs bájtfolyamot, és amelyet meghatározott bájt hosszúságban követ a többi információs karakter. Lássuk, hogyan nyerhetjük ezt ki.
A programunkban a LEKÉRDEZÉS gomb segítségével érhetjük el, hogy a megadott állományból kinyerjük a kérdéses információkat. A megoldáshoz a System.Text és a System.IO névtér osztályait fogjuk felhasználni.
A megoldás első lépése, hogy a megadott állománynévről eldöntjük, hogy létezik-e. Amennyiben igen, akkor megnyitjuk azt olvasásra úgy, hogy az eredmény-adatfolyamot egy FileStream objektumnak adjuk át.
if(File.Exists(textBox1.Text))
{
FileInfo fi = new FileInfo(textBox1.Text);
FileStream fs = fi.Open(FileMode.Open, FileAccess.Read, FileShare.None);
A bájtfolyam tárolására szükségünk van egy bájttömbre.
byte[] b = new byte[128];
Az adatfolyam objektumának Seek metódusával a szükséges információhalmaz első bájtjára pozícionálunk.
fs.Seek(-128, SeekOrigin.End);
Létrehozunk egy BinaryReader objektumot, melyet összekapcsolunk az adatfolyammal, és megadjuk a dekódolás mikéntjét is, mely jelen esetben Default.
BinaryReader br = new BinaryReader(fs,System.Text.Encoding.Default);
A BinaryReader objektum Read metódusával betöltjük az adatfolyamot a bájttömbbe.
Létrehozunk egy karaktertömböt, valamint egy Decored objektumot.
char[] c = new char[b.Length];
Decoder d = Encoding.Default.GetDecoder();
A Decored objektum segítségével a megfelelő dekódolást alkalmazva kiolvassuk a bájttömb információit a karaktertömbbe.
d.GetChars(b, 0, b.Length, c, 0);
Ezt követően egy karakterláncba olvassuk a karakterlánc elemeit, mely már a végleges, feldolgozható adathalmazt tartalmazza.
string tag = "";
for(int i=0;i<c.Length;i++)
{
tag += c[i].ToString();
}
A karakterlánc első három karakterét megvizsgálva eldöntjük, hogy az a „TAG” részláncot tartalmazza-e, vagy sem. Amennyiben igen, akkor elkezdjük a feldolgozást.
string h = tag.Substring(0, 3);
if(h == "TAG")
{
A karakterlánc 3-adik és 30-adik karakter közötti részlánca tartalmazza a zeneszám nevét.
textBox4.Text = tag.Substring(3, 30);
A következő részlánc az előadó nevét hordozza.
textBox2.Text = tag.Substring(33, 30);
Négy karakteren a kiadás évét is megtaláljuk.
textBox3.Text = tag.Substring(93, 4);
Az album címe és egy kis megjegyzés számára is van hely, melyet kiolvasunk.
textBox5.Text = tag.Substring(63, 30);
textBox6.Text = tag.Substring(97, 30);
...
Mindezen törekvésünk azonban csak akkor vezet eredményre, ha az állomány kódjában megtalálhatóak ezek az információk. A példa tesztelésekor találkoztunk olyan állománnyal, mely semmilyen információt nem tartalmazott a zeneszám címén kívül.