Teorie











Extrakce příznaků

7.1           Výpočet základních příznaků

Mezi základní příznaky spadá výpočet hlasitosti pro různá frekvenční pásma. Výpočet celkové intenzity zvuku je pro spojitý průběh definován jako:

,

kde N je měrný výkon. Měrnému výkonu je úměrná velikost výchylky akustického zdroje, tedy absolutní hodnota signálu v daném okamžiku. Pro diskrétní signál je intenzita za dobu T definována vztahem

,

kde s(k) je hodnota signálu v diskrétním čase k.

Pro správný výpočet intenzity z frekvenční oblasti nám bohužel aritmetický průměr nestačí (používá se například u vizualizací koncipovaných jako zásuvný modul Winampu). Při pouhém zprůměrňování hodnot jednotlivých frekvencí bude výsledná veličina závislá i na jejich počtu. Při testování jsem však zjistil, že tento způsob výpočtu pomocí aritmetického průměru lépe vystihuje skutečně vnímání hudby. Rozdíl mezi výpočtem z časové a frekvenční oblasti je znázorněn na následujících grafech:

Graf  7.1 - Výsledný výpočet při gradujícím signálu s jednou frekvencí 1 kHz

Graf  7.2 - Výsledný výpočet při gradujícím signálu s více (měnícími se) frekvencemi („overload“)

 

Graf  7.3 - Velikost vypočtených hodnot při hudebním vzorku „Olympic – Želva“

 

U grafů 7.1 a 7.2 je vidět, že výpočet aritmetického průměru z frekvencí má tendenci dávat vyšší hodnoty při větším obsahu frekvencí než výpočet skutečné intenzity, a ve výsledku se aritmetický průměr chová dynamičtěji. Tento poznatek nám přináší způsob, jak velmi jednoduše zjistit množství frekvencí zastoupených v hudbě. Stačí udělat pouze rozdíl těchto hodnot. Výsledek se dá dobře využít při rozeznávání hudebních stylů. Výpočet intenzity hlasitosti z časové oblasti je také předáván příznakům a je použit pro automatickou korekci vstupní hlasitosti FFT.

Další výpočty jsou založeny pouze na výpočtech ve frekvenční oblasti. Frekvenční rozsahy algoritmů pro výpočet hlasitosti jednotlivých frekvenčních pásem jsou v tabulce 7.1.  

 název

rozsah FFT

frekvenční rozsah

beat

2 - 9

30 - 200 Hz

bass

2 - 15

30 - 270 Hz

mid

15 - 240

270 - 5.100 Hz

high

240 - 500

5.100 - 10.800 Hz

Tabulka  7.1 – Frekvenční rozsahy příznaků

Frekvenční rozsahy byly určeny experimentálně pro nízkofrekvenční složky a pro vysokofrekvenční složku. Rozsah pro střední kmitočty byl zvolen tak, aby vyplnil zbývající pásmo. Vzniklo tak poměrně rozsáhlé pásmo, které se v praxi často dělí na nízké a vysoké středy. Zde by to ovšem při vizualizaci mnoho nepřineslo, neboť není vždy jednoduché sluchem odlišit, do jaké skupiny ten či onen zahraný tón patří, a pak by vnímaná hudba nemusela u většiny jedinců korespondovat s vizuálními vjemy.

Průměrované hodnoty pro jednotlivé příznaky mají v názvu koncovku Avg. Jejich hodnoty nejsou počítány přesně aritmetickým průměrem, ale následujícím vzorcem, který je pro tyto účely dostatečný.

 

kde hodnota je aktuální hodnota signálu, hodnotaAvg je jeho průměrovaná hodnota a délka je velikost průměrovaného vzorku. S rostoucí velikostí proměnné délka klesá rychlost, s jakou dochází ke změně počítané hodnoty.

 

7.1           Extrahované příznaky 

Pro řízení světelných efektů je navrženo více než dvacet algoritmů pro extrakci příznaků. Tyto algoritmy jsou implementovány ve finálním programu a jejich grafické rozhraní je popsáno v další kapitole 8 nazvané Vytvořená aplikace. Zjednodušeně zde popíšu princip některých těchto algoritmů. Pro názvy algoritmů jsem zvolil angličtinu, neboť lépe vystihuje jejich funkci. 
 

Beat Detection I

Tento algoritmus měří celkovou hodnotu frekvencí obsažených v rozsahu 30 – 280 Hz a porovnává je s nastavenou prahovou hodnotou. Je-li součet frekvencí nižší než práh, výstupem je 0, je-li vyšší, výstupem je hodnota 255.

      if (beat > prah) return 255;
           else
      return 0;

Ve výsledné aplikaci je tento algoritmus ještě doplněn o možnost prodloužit čas, po který je na výstupu návratová hodnota 255, o nastavený časový úsek v rozsahu 0 – 1500 ms s rozlišením 30 ms. Při splnění podmínky jen v jednom průchodu bude totiž hodnota 255 na výstupu pouze 30 ms, a to nemusí být vždy dostatečné pro dokončení příkazu zpracovávaného světelnou technikou. Pro ovládání žárovky jsem shledal hodnotu 150 ms jako optimální a při vložení příznaku je tato hodnota nastavena implicitně.
 

Beat Detection II

Jde o algoritmus „Beat Detection I“ vylepšený o dynamicky se měnící práh. Při překročení prahové hodnoty se tato hodnota nastaví na onu vyšší hodnotu. V opačném případě se prahová hodnota postupně průměruje s průměrnou hodnotou, tedy s beatAvg. Tento algoritmus je tím pádem nezávislý na konkrétní hlasitosti hudební produkce.

      if (beat > prah)
      {
            prah = beat;
            return 255;
      }
      else
      {
            prah = ((15*prah) + beatAvg) / 16;
            return 0;
      }

 

Move - Volume Speed

Algoritmus je určený pro pohyb s otočnou hlavou, zrcátkem scanneru nebo například k otáčení promítaného obrazce (goba). Samozřejmě nic nebrání  použití tohoto algoritmu například k řízení jasu žárovky.
 
     
if (volumeAvg > prah)
      {
            poloha += volumeAvg / konstanta;
            if (poloha
> 510) poloha=0;
            if (poloha > 255) vystup = 510 - poloha;
            else
                  vystup = poloha;
        }
        return vystup;

Výstupem je plynule se měnící hodnota od 0 do 255 a zpět, kde rychlost změny je závislá na hlasitosti přehrávané skladby. Pomocí proměnné práh lze úplně vypnout činnost tohoto algoritmu při nízké hlasitosti a proměnnou konstanta lze upravit výslednou rychlost. Může se tedy použít jeden tento algoritmus pro řízení pohybu ve směru X s nulovou prahovou hodnotou a druhý pro směr Y s nenulovým prahem. Při nízké hlasitosti se bude pohybovat paprsek pouze ve směru X a při překročení prahu se připojí i pohyb ve směru Y, kde při vzrůstající hlasitosti se bude  zvyšovat i rychlost celého pohybu.
 

Play Scene 

Výstupem tohoto algoritmu je trvale hodnota 255. Slouží k pevnému nastavení hodnot kanálů protokolu DMX512. Lze tedy vytvořit konkrétní scénu, uložit a přiřadit ji k výstupu tohoto příznaku. Tento algoritmus je ještě doplněn o dva parametry, které lze nastavit, a to je prahová hodnota hlasitosti, při jejímž překročení se scéna zapne, a časový údaj, po jehož vypršení se přiřazená scéna zapne také. Implicitně jsou oba tyto parametry nulové.

 

      //zapni po překročení určité doby
      if (casovac > cas)
            // zapni po překročení hlasitosti
            if (prah < volume)
                  vystup = 255;
      return vystup;

 

Primary Color High, Mid, Low, nebo Contraposite 

Tyto čtyři algoritmy byly vytvořeny především pro nastavení primární barvy scény. Porovnávají průměrné zastoupení nízkých, středních a vysokých frekvencí. Na základě převahy jednoho spektra frekvencí nad ostatními se aktivuje na výstupu hodnota 255, která může nastavit onu konkrétní barvu nebo scénu. Čtvrtý algoritmus Primary Color Contraposite se aktivuje v případě, že ani jedna z předchozích podmínek není splněna.
 

Strobo enabler

Tento algoritmus detekuje vhodnost použití stroboskopického efektu. Na základě sledování používání stroboskopu v praxi, konzultace a subjektivního pocitu byla určena hudba, u které je tento efekt vhodný. Dalším sledováním rozdílů mezi hudbou vhodnou a nevhodnou pro stroboskopický efekt jsem při programování aplikace použité jako zásuvný modul v multimediálním přehrávači Winamp zjistil, že u hudby vhodné pro tento efekt převažuje součet nízkých a vysokých frekvencí nad středními, kde střední frekvence nesmí překročit určitý práh. V této nové aplikaci by však šlo použít ještě lepší příznak, který by porovnával frekvenční sytost a dynamiku. Obecně by se dalo říci, že při nízké frekvenční sytosti a vysoké dynamice je tento stroboskopický efekt vhodný. Také se u tohoto příznaku musí hlídat dosažení určité minimální hlasitosti.
 

High, Mid a Bass Level

Tyto tři algoritmy pouze předávají na výstup aktuální hodnoty hlasitosti nízkých, středních a vysokých tónů. Jejich výstup je ale ještě upraven křivkou danou následujícím výrazem:

      vystup = (pow(vystup/255, 4)*255);
 

Submaster

V tomto případě se nejedná o žádný příznak z hudby. Jde pouze o klasický ovládací prvek používaný na osvětlovacích pultech. Jeho účelem je ovlivňovat výslednou velikost hodnot předem nastavené scény na výstupu osvětlovacího pultu. Zde slouží jako doplněk pro lepší korespondenci s osvětlovacím pultem a nepočítám s jeho velikým uplatněním.
 

Average Bass, Mid, High

            Tyto tři algoritmy předávají na výstup průměrné hodnoty hlasitosti nízkých, středních a vysokých tónů. Dají se použít také například jako algoritmus Primary Color pro namíchání primární barvy. V tomto případě, je-li k dispozici RGB barevný měnič, může vzniknout výsledná barva jemným namícháním jednotlivých složek modré, zelené a červené. Přiřazení barev jednotlivým výstupům může být například podle Alexandera Wallacera Rimingtona (narozeného roku 1850) tak, že nejnižším frekvencím hudby (bass) přiřadíme světlo s nejnižší frekvencí (červené), středním frekvencím hudby přiřadíme střední frekvence světla (zelenou) a posledním vysokým tonům přiřadíme horní spektrum světla (modrou). Výsledný odstín a jeho jas je pak dán poměrem obsahu jednotlivých frekvencí v hudbě. Pro názornost doplňuji následující ilustrací:

Obrázek  7.2 – Míchání barev RGB

 

BPM

Tento algoritmus vychází z algoritmu „Beat Detection II“. Je doplněn o fakt, že rytmus je pravidelný, tedy vzdálenost mezi jednotlivými takty u jedné skladby by měla být pokud možno stejná. Horší je to s rozeznáním faktu, zda se ještě pořád jedná o tutéž skladbu, nebo data, které zpracováváme, jsou už ze skladby následující. Proto tento algoritmus musí být schopen především dynamicky zareagovat na změnu a ne se držet jen předcházejícího rytmu. Navíc u tohoto algoritmu nejde jen o rozeznání velikosti BPM, ale musí okamžitě informovat o taktech v hudbě.  Princip tohoto algoritmu zde popíšu jen stručně. K měření rytmu se používá veličina, která se skládá ze součtu aktuální celkové hlasitosti (volume) s aktuální hlasitostí nízkých frekvencí (beat). V následujícím grafu 7.4. je označena modrou barvou. Žlutá a růžová barva jsou v grafu pouze informativní a znázorňují aktuální hlasitost (žlutá) a skutečnou intenzitu vypočtenou z časové oblasti (růžová). Hnědou barvou jsou zaznamenány skutečné takty v hudbě a azurovou takty, které jsou algoritmem rozeznány. Zde je vidět příjemný fakt, že takty jsou rozeznány již na nástupní hraně těsně před tím, než je jejich skutečná poloha. Kompenzuje se tak eventuelní zpoždění celé aplikace. Poslední, fialovou barvou je znázorněna měřící hodnota. Tato měřicí veličina je do poloviční doby mezi takty necitlivá a po uplynutí této doby začne klesat k průměrné hlasitosti. Ve fázi, kdy je v poklesu, se měří příchod špičky v hudebním signálu. Nachází-li se měření ve stejné vzdálenosti od posledního taktu, jako byla vzdálenost předcházející, je měřená veličina zvýhodněná a může dojít k signalizaci taktu, i když měřící křivka nepoklesne pod hodnotu měřeného signálu. V případě, že nedojde k detekci taktu (viz. například třetí takt z leva), algoritmus se pro jednou zachová, jako kdyby byl takt signalizován, a příští měření v očekávaném taktu je měřeno s menším zvýhodněním měřicí podmínky. V případě, že se vyskytne velmi vysoká hladina hlasitosti (pravděpodobně způsobená bicím nástrojem) mimo rytmus, se celé měření restartuje. Hodnota měřicího prahu je vždy po signalizaci taktu vypočtena z poměru její hodnoty a průměru velikostí v těchto místech měřené veličiny. Algoritmus však nefunguje vždy spolehlivě. Obsahuje proto další výstupní veličinu, kterou je kvalita, s jakou je detekce rytmu rozeznána. Příznak se tedy může aktivovat pouze v případě, že víme, že je signalizovaný rytmus přesný. V opačném případě může řízení převzít příznak jiný. Tento algoritmus je ve zdrojovém kódu v souboru VizualizaceDlg.cpp označen jako funkce BPM.

 

Graf  7.4 – Průběh měření u algoritmu BPM