Umíme to s Delphi: 139. díl – vložte si do empétrojky fotku

Dnešní díl seriálu se týká empétrojek a navazující technologie – ID3 tagů. Popíšeme si druhou verzi tagů – ID3v2. Vysvětlíme se, v čem se tato verze liší od svých předchůdců, popíšeme si strukturu tagu a ukážeme si nejsilnější stránky tagu.

V dnešním článku budeme pokračovat v popisu problematiky technologie MP3. Přsněji řečeno, zaměříme se na jednu z podtechnologií, které se empétrojek týkají, a to na ID3 tagy, které jsou součástí většiny MP3 souborů a které umožňují obohatit empétrojku o textové informace týkající se názvu skladby, jména interpreta, roku vydání apod.

V předchozích článcích jsme se zaměřili už na celou řadu aspektů empétrojek a tagů ID3, něco nám však dosud chybí, a právě to bude dnešní náplní:

  • ve 134. dílu jsme se podívali obecně na technologii MP3
  • 135. díl nás naučil vyrobit v Delphi první jednuduchý MP3 player
  • 136. díl byl pln teoretického popisu tagů ID3 verze 1 a verze 1.1
  • ve 137. díle jsme napsali aplikaci, která dokáže číst a zobrazovat ID3 tagy z empétrojek
  • v díle 138 jsme pak aplikaci obohatili o možnost editace těchto tagů.

Po prozkoumání předchozího souhrnu je zřejmé, že nám chybí jedna podstatná záležitost – dosud jsme se nic nedozvěděli o druhé verzi ID3 tagů, o tzv. ID3v2. Protože druhá verze je velmi inovativní a přináší celou řadu novinek, podíváme se na její principy právě dnes.

ID3 tagy verze 2 (ID3v2) – co to je

ID3 verze 2 je novým systémem umožňujícím rozšiřovat audio soubory o textové informace. Díky tomu je možné uchovávat všechny podstatné informace, které nás o souboru zajímají, přímo jako jeho součást. Jinak řečeno, ID3v2 představuje „kousek“ dat, které jsou nějakým způsobem připojeny, zakomponovány do binárních dat audio souborů.

Pojďme se podívat na to, jak vlastně ID3v2 tagy nesou data. Základní informace je následující: každý ID3v2 tag obsahuje jeden nebo více malých kousků dat. Tyto „kousky“ se nazývají rámce (frames).

Každý rámec přitom může obsahovat jakýkoliv druh informací, který by se nám mohl hodit a který nás vůbec dokáže napadnout, například název skladby, jméno alba, zpěváka/interpreta, související webovou adresu, slova skladby, přednastavení hudebního ekvalizéru, obrázky a fotky apod.

Zde je také hned hezky vidět zásadní rozdíl mezi ID tagy verze 2 a předchozími verzemi tagů. První verze (1 a 1.1) totiž měly pevně předdefinovaný obsah a neexistovala žádná cesta, jak do tohoto obsahu vložit jiné údaje, než bylo povoleno. Těžko jsme například mohli použít ID3v1 k přenosu obrázků, k přenosu přednastavených hodnot ekvalizéru apod. Právě tato omezení byla nejsilnějším důvodem pro vznik druhé verze tagů.

ID3v2 tagy – ukázka

Nyní, když víme, že ID3v2 tagy umožňují přenášet v podstatě cokoliv a že jsou z hlediska své využitelnosti velmi univerzální a flexibilní, pojďme se podívat na příklad toho, jak může audiosoubor nesoucí tag ID3v2 vypadat.

 1.   Obecné informace o písni
 2.  Slova skladby
 3.  Informace o vloženém obrázku 
 4.  Fotka z koncertu
 5.  Komentář
 6.  AudioData

Výše uvedená tabulka je ukázkou toho, jak může vypadat audiosoubor nesousí ID3v2 tag. Řádky 1 – 5 jsou přitom součásti tagu, řádek 6 pak obsahuje samotná audiodata (samotnou píseň). V tomto ukázkovém souboru využiváme tag pro uložení informací o skladbě, dále pro uložení jejích slov a také pro uchování obrázku interpreta (například ve formě fotografie z živého konzertu).

Zpracování ID3v2 tagu

Jeden z hlavních cílů návrhu nové verze tagů, jak už jsme si uvedli výše, spočíval ve snaze zajistit flexibilitu a rozšiřitelnost tagů. Z toho důvodu se v ID3v2 nesetkáme s žádným omezením délky tagu ani jeho jednotlivých součástí, s žádným omezením obsahu tagu a jeho součástí a v neposlední řadě také s žádným striktně stanoveným umístěním ID3 tagu v hudebním souboru. Jinak řečeno, pakliže jsme byli z ID3v1 zvyklí, že ID3 tag musí být vždy umístěn na posledních 128 bajtech v souboru, nic takového nemůžeme v nové verzi očekávat. Přesto, tag je v drtivé většině případů umístěn na začátku souboru.

Důvod je ryze praktický: pokud umístíme tag na začátek souboru a budeme skladbu streamovat, dozvíme se při streamování hned na samém počátku všechny potřebné informace. Streamujeme-li skladbu obsahující (na svém konci) ID3v1 tag, nevíme po celou dobu přehrávání nic a všechny texty si přečteme možná až na konci.

U nové verze tagů neexistuje v reálu žádné omezení velikosti tagů, proto pokud chceme (a pokud věříme, že je to účelné), můžeme do tagu zapsat třeba šestnáctimegabajtový komentář nebo dvoumegovou fotografii. Přesněji řečeno, velikost rámce je omezena na 16MB a velikost celého tagu pak na 256 MB, nicméně tyto hranice nám při reálné práci opravdu nevadí.

Z toho všeho ovšem plyne poněkud obtížnější zpracování tagu ze strany přehrávačů a dalšího softwaru. Vytvoření přehrávače empétrojek, který dokázal přečíst tag ID3v1, bylo dětskou slavností – stačilo načíst obsah posledních 128 bajtů empétrojky, zkontrolovat, že první tři znaky obsahují řetězec TAG a rozsekat načtená data do sekcí recordu.

Vytvoření softwaru pro zpracování ID3 tagu verze 2 je podstatně obtížnější, protože se nemáme „čeho chytit“. Nelze dokonce ani pevně stanovit, kterou část souboru je nutné přečíst za účelem získání dat tagu. Dopředu nevíme nic o velikosti jednotlivých položek, neznáme dokonce ani jejich obsah. Jinak řečeno, aby přehrávač dokázal pracovat s ID3 tagy ve verzi 2, musí obsahovat relativně sofistikovanější parser, který bude znát hodně podrobností o tazích ID3.

Ani to však nemůže stačit: řekli jsme si, že každý tag může obsahovat v podstatě cokoliv. Je tedy velmi obtížné napsat takový parser, který by dokázal všechny informace přečíst a interpretovat. Při psaní parseru je tedy nutné dodržovat následující pravidla:

  • parser musí přečíst a zpracovat všechno, co zná, a zároveň
  • parser musí ignorovat a přeskočit všechno, co nezná.

Důležité je, aby parser při nalezení neznámé informace nespadl. Nalezení neznámé informace nesmí způsobit ani zahození dosavadních získaných dat – jedinou správnou odezvou je přeskočení neznámých informací.

Možná vás nyní napadá ještě jedna otázka. Když je tag umístěn kdesi v souboru, zřejmě na začátku, a nemá přesně stanovenou délku ani obsah, co se stane, když na tento soubor pustíme přehrávač nekompatibilní s technologií ID3v2. Ten nebude s to rozpoznat, že se právě nachází na tagu a bude tag s největší pravděpodobností považovat za součást binárních dat písně. I s tímto problémem tvůrci ID3v2 počítali a technologii obohatili o jakousi pojistku („unsynchronization scheme“), která právě zabraňuje nekompatibilním přehrávačům v tom, aby tak považovali za hudební data a přehrávali jej.

Zajímavou vlastností ID3v2 technologie je také podpora kódování Unicode, takže pokud potřebujeme zapsat třeba slova písně v původním jazyce, neměli bychom být nijak limitováni. Do tagu také můžeme zapsat jazyk, v němž jsou informace uloženy, takže nám v zásadě nic nebrání přenášet v tagu více slova písně v několika jazycích.

Přestože ID3v2 tag je navržen tak, že nezná žádná omezení délky a že umožňuje vložit do sebe třeba i obrázky, pořád využívá obsazený prostor tak efektivn, jak je to jen možné. V případě, že zkonvertujete ID3v1 tag (který zabírá v každém případě 128 bajtů) do verze ID3v2, s největší pravděpodobností bude druhá verze menší.

V nejhorším možném případě, pokud všech 128 bajtů tagu ID3v1 bylo použito (obsazeno), tedy pokud jsme využili přesně 30 znaků pro každou z položek, bude velikost tagu ID3v2 o 56 bajtů větší. To je přitom nejhorší myslitelný scénář: v drtivé většině konverzí ID3v1 na ID3v2 nebude obsazeno všech 128 bajtů, proto výsledná velikost bude časo ještě menší.

Shrnutí – základní vlastnosti ID3v2 tagů

Na závěr této úvodní kapitoly popisující vlastnosti ID3v2 tagů si pojďme udělat malé shrnutí toho, co jsme se dosud dozvěděli:

  • ID3v2 tag je z implementačního hlediska vlastně jakýmsi kontejnerem, například jako soubory PNG, který umožňuje vkládání nových „kousků“, částí, v závislosti na tom, jak postupuje vývoj souboru a jeho zpracování
  • Umístění tagu na začátku hudebních souborů znamená pohodlnou možnost streamování skladeb.
  • Obsahuje jakousi pojistku nazvanou „nesynchronization scheme“, která zabraňuje přehrávačům nekompatibilním s ID3v2 v tom, aby e pokoušely přehrát tag.
  • Maximální velikost tagu je 256 MB, maximální velikost jednoho rámce je pak 16 megabajtů.
  • ID3v2 tagy šetří prostorem jak je to jen možné, data jsou určitým způsobem komprimována.
  • Tagy podporují kódování Unicode.
  • Technologie není ve své podstatě striktně zaměřena na hudební audiosoubory, lze ji využít i pro ostatní druhy audia.
  • Přichází s předdefinovanými rámci pro uložení všech relevantních informací, například jméno skladatele, interpreta, název skladby a alba, druh média, informace o autorských právech apod. Kromě toho si můžete nadefinovat jakýkoliv vlastní rámec pro uložení čehokoliv, co vás o skladbě zajímá.
  • Může obsahovat nejen slova, ale také informace o rozmístění slov v toku skladby (známé karaoke). To vše je možné v libovolném jazyce.
  • Může nést informace o hlasitosti skladby a o jakýchkoliv jiných nastavení ekvalizéru.
  • Může být připojen k databázi tyou CDDB.
  • Může obsahovat nejen obrázky, ale ve své podstatě jakékoliv jiné soubory, které chceme vložit.
  • Podporuje odkazy a webové adresy.

Na závěr

Dnešní článek se týkal druhé verze ID3 tagů – ID3v2. Vysvětlili jsme si, čím se tato verze liší od svých předchůdců, jaké má základní vlastnosti a v jakých směrech je flexibilnější a univerzálnější. Zjistili jsme, že na rozdíl od ID3v1 nabízí „dvojka“ mnohem více možností, je však zřejmé, že její zpracování je podstatně obtížnější.

Témata článku: Software, Programování, Fotky, Unicode, Fotka, Uložená data, Drtivá většina, Nová součást, Apod, Karaoke, Nový kousek, Součást, Základní skladba, Díl, Nový druh, Ostatní druh, Základní popis, Jednotlivé fotky

Určitě si přečtěte


Aktuální číslo časopisu Computer

26 procesorů v důkladném testu

Zhodnotili jsme 18 bezdrátových reproduktorů

Jak fungují cash back služby?

Pohlídejte své děti na internetu