Umíme to s Delphi: 134. díl – pod pokličku souborů MP3

Po odmlce, která trvala déle než jsme všichni původně předpokládali, vás opět vítám u dalšího pokračování seriálu Umíme to s Delphi. Téma, které dnes otevřeme, patří k těm lehčím a oddechovějším: budeme se zabývat soubory MP3 a jejich zpracováním v Delphi. Dnes se podíváme na to, jaká je podstata komprese MP3 a jak je možné, že soubory MP3 dokáží při srovnatelné kvalitě záznamu zabrat podstatně méně diskového prostoru než jiné druhy souborů.

Na samotný úvod článku se musím omluvit všem, kteří na podzim loňského roku marně čekali na další pokračování seriálu. V červnu jsem sliboval, že v listopadu jsem zpět; jak už to tak bývá, skutek utek. Zahraniční pobyt se nečekaně protáhl (vlastně dosud neskončil :) ) a než se mi podařilo pořídit veškeré náležitosti potřebné ke kvalifikovanému psaní článků o Delphi, Nový rok byl pryč.

Nyní je konečně vše připraveno, včetně mě, takže se můžete těšit na opětovný přísun článků o programování v Delphi. Začínáme, jak jsem již naznačil, jednodušším tématem: zpracováním MP3 souborů v Delphi.

Co jsou vlastně empétrojky?

Pravděpodobně víte, co se skrývá pod zkratkou MP3. Tato zkratka se stává rozšířenější a používanější ruku v ruce s tím, jak roste všeobecná popularita empétrojek. Přesto, abychom si ujasnili pojmy a abychom dali šanci opravdu všem, ve stručnosti zkratku MP3 popíšeme a vysvětlíme (viz také seznam dostupných definic zkratky MP3 na serveru Google).

MP3 je komprimovaný formát audio souborů, který je oblíbený pro stahování z internetu a pro využití v přenosných přehrávačích. Kvalita zvuku se liší v závislosti na bitovém toku zvoleném při záznamu. Posuzování kvality zvuku je subjektivní, obvykle se uvádí, že záznam s nižším bitovým tokem než 128 kbps (kilobitů za sekundu) má znatelně horší kvalitu. Takové záznamy vynikají vyšší mírou komprese, což se projeví úsporou místa na záznamovém médiu, avšak tato úspora znamená slyšitelné snížení kvality. Pro domácí audio systémy se doporučuje hodnota alespoň 256 kbps.

Pojem MP3 je vlastně zkráceným vyjádřením MPEG audio layer 3. MP3 soubor je mnohem menší než typické – nekomprimované – soubory wav, tříminutový song může například zabírat až 30 MB jako wav soubor, avšak jen 2 – 7 MB ve formátu MP3. Důležité je, že podstata MP3 komprese umožňuje dosáhnout takové úspory, aniž by posluchač měl poznat rozdíl v kvalitě zvuku.

Tento zdánlivý zázrak je způsoben velmi inteligentně navrženým kompresním algoritmem, který bere v úvahu kromě jiného i vlastnosti lidského ucha a při kompresi se mj. zaměřuje na frekvence, které jsou lidským uchem tak jako tak obtížně slyšitelné. Později se na princip MP3 konverze podíváme podrobněji, prozatím však dodejme, že ono proklamované „zachování kvality“ nemusí být vždycky tak úplně stoprocentní – někteří posluchači uvádějí, že „oni tedy rozdíl v kvalitě poznají“. Mohou mít pravdu: já upřímně přiznám, že žádný rozdíl obvykle neslyším, avšak to může být také způsobeno zcela nedostatečnými až směšnými „audio systémy“, které k poslechu obvykle používám. Ale vážně: je pravděpodobné, že citlivější (tj. dosud neohluchlé) osoby mohou slyšet rozdíl třeba u bicích nástrojů apod.

V poslední době je často slyšet otázku, zda jsou soubory MP3 ilegální. Odpověď je jednoduchá – soubor MP3 sám o sobě ilegální není, stejně jako není ilegální použití kompresního algoritmu (tj. Vytvoření souboru MP3). Ilegální je případné další používání empétrojek – typicky šíření souborů chráněných autorskými právy nebo prodávání originálních nahrávek převedených do MP3. Je zřejmé, že díky vynikajícícm vlastnostem souborů MP3 (malá velikost a zároveň vysoká kvalita) je tento formát pro ilegální – ale samozřejmě i legální – šíření hudby jako dělaný.

Princip MP3 komprese

Přestože toto téma se nijak netýká práce v Delphi a zpracování empétrojek v tomto vývojovém prostředí, podíváme se v této podkapitole stručně na princip komprese MP3. Pokud vás pohled pod pokličku nijak nezajímá, můžete tuto kapitolu přeskočit, protože byste se při jejím čtení nepochybně nudili. Cílem tohoto seriálu ale je přinášet ucelené informace včetně teoretičtějších základů a včetně popisu souvislostí. Z toho důvodu stojí myslím za to prozkoumat trochu i MP3 kompresi, protože je ukázkou toho, jakých výsledků mohou chytré hlavičky dosáhnout.

Nápad vytvořit ztrátový kompresní algoritmus pro zvuková data se zrodil v roce 1987 ve Fraunhofer Instutut Integrierte Schaltungen (IIS) v německém Erlangenu. Ve spolupráci s University of Erlangen byla vytvořena kódovací schémata zvuku pro budoucí využití v digitálních telekomunikačních a rozhlasových službách (Eureka 147, DAB radio). V roce 1991 bylo uveřejněno nejvýkonnější kompresní schéma Layer III, které bylo v roce 1992 v rámci MPEG 1 (Moving Picture Experts Group) schváleno jako ISO standard. Layer III je také součástí audio specifikace MPEG 2 standardu, který byl schválen od roku 1994.

Pokud ukládáme zvuk v CD kvalitě, potřebujeme na uložení každé sekundy přibližně 150KB. Při digitálním audio signálu tato hodnota znamená datový proud 1400kbit/s. Použitím komprese MPEG můžeme datový tok (a tedy velikost výsledného souboru) zmenšit až v pomětu 1:12

Takže: MP3 komprese je ztrátová komprese zvukového souboru. Výsledná velikost souboru po kompresi může dosáhnout až jedné dvanáctiny původní velikosti, což už je opravdu znát. Na druhé straně – komprese je ztrátová, což znamená, že z komprimovaného MP3 souboru již není možné rekonstruovat původní, originální nahrávku.

Jak jsme zmínili výše, říká se, že MP3 komprese zachovává kvalitu. Pokud se ptáte, jak můe ztrátová komprese zachovat kvalitu, vězte, že vysvětlení je v zásadě takovéto: programy používající kompresi MP3 způsobí ztrátu kvality v nahrávce, avšak jen jen tam, kde to posluchač nepozná.

Metody používané při MP3 kompresi

K dosažení tohoto nelehkého cíle se používá řada metod, uvedeme jen několik nejvýznamnějších:

  • Práh sluchu – zvuky, které jsou pod prahem slyšitelnosti, prostě lidské ucho neslyší. Zvuky situované pod tímto prahem není nutné vůbec zahrnout, protože je lidské ucho jednoduše neslyší.
  • Maskování – jedná se o vypuštění takových frekvencí, které lidské ucho stejně neslyší. Maskování je velmi efektivní metodou, protože dokáže zmenšít soubor, aniž lidské ucho postřehne, že je „něco jinak“. Představte si například vizuální analogii: díváte se do ostrého sluníčka a několik desítek metrů od vás přeletí vlaštovka. Vy ovšem vlaštovku ani neuvidíte, protože světlo ze sluníčka je natolik dominantní, že jakékoliv další vizuální skutečnosti před vámi zůstanou skryty. Podobný princip je použit při maskování v rámci MP3 komprese: při přehrávání silných zvuků prostě neslyšíte ty slabší. V důsledku maskování se ovšem může teoreticky stát, že jednoho krásného dne přijde posluchač, kterému se bude zdát zvuk ochuzený, protože bude tvrdit (a může mít pravdu), že jeho sluch je citlivější a že jemu ořezané frekvence prostě chybí. Při maskování jsou nejčastěji vypouštěny nevýrazné pasáže, které ve skladbě sice kdosi hraje, nicméně je nemilosrdně přehlušen hlasitějšími nástroji.
  • Joint stereo – skladby, které jsou zaznamenány tereo, mohou být zkomprimovány také tak, že vybereme taková frekvenční spektra, u nichž je stereozvuk (prostorový zvuk) jen velmi těžko (nebo vůbec) patrný. Tato spektra následně převedeme a zaznamenáme v mono zvuku. Zjednodušeně řečeno – takové pasáže, v nichž je stereo zbytečné, protože ho stejně neslyšíme, jednoduše zaznamenáme jako mono. Ve skutečnosti je problém trochu složitější a namísto dvou kanálů (levý L a pravý P) se používá jeden středový (M = L + P) a jeden okrajový (S = L – R), nicméně pro naše potřeby se jedná již o přílišné podrobnosti.
  • Variabilní bitrate – asi je zřejmé, že pokud se pokusíme zaznemenat celou skladbu ve stejném datovém toku, například 128 kbps, dojde k jednomu ze dvou nepěkných extrémních jevů:
    • Buď budeme některé pasáže skladby nahrávat zbytečně „velkoryse“, protože z jejich povahy vyplývá, že by jim stačil i nižší datový tok a stejně bychom nepoznali žádný rozdíl v kvalitě – tím okamžikem jsme zbytečně zabrali (a tedy ztratili) kus místa na disku,
    • A nebo budeme některé pasáže nahrávat naopak s nedostatečným datovým tokem, což v důsledku způsobí, že například vytříbené saxofonové sólo bude v některých místech slyšitelně méně kvalitní.

Pokud bychom použili konstantní bitrate, došlo by pravděpodobně k oběma extrémním jevům zároveň. Variabilní bitrate tento problém řeší – v místech, kde lze snést nižší bitový tok, je použit nižní bitový tok, a v akusticky náročných pasážích je naopak použita vyšší bitrate, a záznam je v těch místech tedy kvalitnější. Problémem variabilnho bitrate je skutečnost, že nemusí být podporován některými (především přenosnými) přehrávači.

Jak bylo také naznačeno výše, standardní formát pro ukládání empétrojek bývá obvykle 128 kbps a uvádí se, že tento bitrate stačí. Mnozí lidé mají proti tomuto tvrzení výhrady, proto chcete-li se dobrat svého ideálního bitrate,budete patrně muset učinit několik pokusů,v jejichž rámci zjistíte, co zní ašemu sluchu dobře a co naopak ne.

Lidské ucho vnímá frekvence přibližně od 20Hz do 20 kHz, malé děti slyší více (pozor při přehrávání empétrojek kojencům), staří lidé naopak méně. Pokud použijete nižší bitrate (řekněme 128 kbps nebo méně), může se stát, že postřehnete absenci výšek od 10kHz výš, především u vážné hudby, ale i v „citlivých“ pasážích běžných písniček.

Podívejme se ještě na jeden důležitý parametr empétrojek, a tím je vzorkovací frekvence (sample rate). Vzorkovací frekvence udává zjednodušeně řečeno počet hodnot, který je za jednu sekundu zaznamenán při digitalizaci analogového signálu. Jinak řečeno, pokud máme vzorkovací frekvenci např. 20kHz, znamená to, že jedna vteřina digitálního signálu bude „vyrobena“, „složena“ z celkem 20000 hodnot.

V této souvislosti platí jednoduché pravidlo říkající, že pokud chceme zachovat dobrou kvalitu digitálního záznamu a zaznamenat analogový signál v celé jeho zvukové šíři, vzorkovací frekvence by měla být alespoň dvojnásobkem nejvyšší frekvence zvuku v daném analogovém záznamu. Už víme, že lidské ucho je schopné vnímat zvuky o frekvenci do 20kHz. Budeme-li tedy chtít při vzorkování skladby zachovat zvuky o frekvenci do 20kHz, měoli bychom použít vzorkovací frekvenci 40kHz nebo vyšší. Všimněte si prosím, že u audio CD se z tohoto důvodu obvykle používá vzorkovací frekvence 44,1 kHz.

Vyrábíme empétrojku

Ne že by se to jakkoliv týkalo Delphi, ale když už jsme se dostali do podrobnějšího popisu MP3 technologie, mrkneme se i na to, jak takovou empétrojku vyrobit. Řekněme, že máme CD, z jehož songů bychom si kvůli úspoře místa chtěli vyrobit empétrojky. Naím cílem je zachovat CD kvalitu písniček.

Chceme-li vyrobit „kvalitní“ empétrojku, tj.takovou, jejíž kvalita bude srovnatelná se zdrojovým (digitálním) CD, budeme potřebovat v obecnosti dva programy (je smozřejmé, že dnes jsou obě činnosti ypicky integrovány v jedné a téže aplikaci pro zpracování audia):

  • Tzv. Grabber (grabovač),
  • Tzv. Encoder (empétrojkovač).

Grabber je program, který je schopen zkopírovat audiostopy z CD na pevný disk. Tyto audiostopy budou následně uloženy jako soubory s příponou WAV. Důležité však je, že při grabování nedochází k žádné ztrátě kvality: jde o doslovný převod 1:1. Pokud bychom nepoužili grabování, ale „obyčejné“ nahrávání z cédéčka, jednalo by se o něco jiného a ztratili bychom kvalitu: digitání signál z CD mechaniky by se převedl v D/A (digitálně-analogovém) převodníku CD mechaniky na analogový, zpracoval by se (přičemž by se k němu přidal všudypřítomný analogový šum) a následně by se opět digitalizoval zvukovou kartou. Výsledkem by byla dramatická ztráta kvality.

Z toho plyne, že chceme-li v empétrojce zachovat kvalitu cédéčka, musíme použít grabování, nikoliv obyčejné přehrávání a nahrávání. Starší a levnější mechaniky nemusí být schopny grabovat, nicméně většina stávajících mechanik by neměla mít potíže.

Předpokládejme tedy, že jsme nagrabovali obsah CD na disk. Následuje druhá část manévrů, při níž se konečně dostane ke slovu naše oéblíbená MP3 komprese. Nagrabovanou WAV stopu je nutné encoderem převést do souboru formátu MP3. Při encodování je možné zvolit bitrate, což (jak jsme si nesčetněkrát vysvětlili výše) je zásadní ukazatel, který přímo ovlivňuje kvalitu i velikost výsledku. Je zřejmé, že platí jednoduché pravidlo – přímá úměrnost: vyšší bitrate = vyšší kvalita = víc zabraného prostoru.

Je nutné najít rovnovánhu mezi tím, jakou kvalitu hledáte a kolik prostoru jste ochotni pro empétrojku uvolnit. Možná si říkáte, že pár set kilobajtů na osmdesátigigabajtovém disku není přece žádný rozdíl, nicméně vezměte v úvahu, že empétrojky se čím dál častěji používají v přenostných paměťově založených přehrávačích, jejichž kapacita je silně omezená (obvykle nejvýše několika stovkami megabajtů).

Ještě dodejme, že pokud zvolíte bitrate 256 kbps, nepoznáte skoro s jistotou žádný rozdíl od originálu: pokud použijete dobrý encoder, bude se skoro shodovat i frekvenční analýza výsledného souboru a originálu.

Další nastavení jsou již otázkou otestování a praxe. Joint stereo je vhodné prakticky vždycky při bitrate nižší než 192 kbps, při nahrávání z nekvalitního zdroje stačí nízký bitrate (např. 98 kbps). Vyzkoušejte, uvidíte.

Na závěr

Dnešní článek byl nakonec o něčem úplně jiném, než měl původně být. Otevřeli jsme problematiku MP3 souborů a podívali jsme se na několik teoretických informací týkajících se jejich vytváření a podstaty. Věřím, že i když jsme toho prozatím mnoho nenaprogramovali, dnešní článek vás nenudil. Slibuji, že za týden se již opravdu podíváme na Delphi a prozkoumáme společně možnosti, které nám toto vývojové prostředí nabízí pro zpracování souborů MP3.

    Diskuze (9) Další článek: Ceny ADSL v ČR dramaticky klesají

    Témata článku: , , , , , , , , , , , , , , , , , , , , , , , , ,