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.
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.
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ě.
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;
}
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.
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;
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.
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.
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);
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.
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
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
|