Dokumentace knihovny zvuků
Čas poslední aktualizace 25. Sep 2016 01:29:AMÚvod
V multimediálních aplikacích se na celkovém dojmu značně podílí zvuk. Zvláště ve hrách pak přidává na realističnosti prostředí a hráč si tak dokáže lépe představit, jaké by to bylo, stát v prostředí hry. Pro využití ozvučení v těchto projektech je vhodné vlastnit nástroj, který udělá za nás co nejvíce práce sám, aby na samotného programátora zbylo pouze používání několika jednoduchých funkcí, které všechny starosti vyřeší za něj. Pro tyto účely vznikla tato knihovna zvuků, která je postavena na zvukovém aplikačním rozhraní OpenAL. Je multiplatformní, protože je napsaný v c++ bez závislostí na operačním systému a používá pouze knihovnu OpenAL a Vorbis file, které jsou také multiplatformní.
Tento modul je primárně určen pro hry nebo pro aplikace, kde lze využít prostorový zvuk. Umožňuje vytvářet zdroje zvuku, nastavovat jim pozici a směr pohybu v prostoru, přičemž o všechny výpočty výsledné hlasitosti zvuků se stará OpenAL, které je svým stylem funkcí podobný grafické knihovně OpenGL. Podporovanými formáty zvukových souborů je WAV a OGG a jejich data se načtou do paměti vcelku, takže streamování není podporováno. Zvuková data lze sdílet mezi jednotlivými zdroji zvuku ve scéně a tím se sníží paměťová náročnost a redundance, protože každý zvukový záznam v databázi bude unikátní.
Soubory
Soubory knihovny zvuků
Text
Závislosti
- AL/al.h
- AL/alut.h
- string
- map
- vector
- list
- stack
- iostream
- vorbis/vorbisfile.h
- error_handler.h
Obsah
- Include
- Vytvoření zdroje zvuku
- Přehrávání
- Přehrávání s opožděným startem
- Parametry zvuků
- Parametry posluchače
- Pokročilé vlastnosti
- Uvolnění zvuku
- Vyprázdnění knihovny.
- Literatura
Vlastnosti
- Umožňuje načítat zvukové záznamy ve formátu WAV a OGG (algoritmus pro načítání Ogg byl přejat z ukázkového přikladu, který lze nalézt na [4]).
- Dokáže vytvořit až 32 hardwarových zdrojů zvuku a neomezeně virtuálních zdrojů (počet je omezen paměťovými možnostmi počítače). Počet najednou přehrávaných zvuků je závislý na počtu hardwarových zdrojů.
- Sdílí zvuková data mezi virtuálními zdroji zvuku.
- Poskytuje sadu jednoduchých funkcí, kterými se modul ovládá.
- Podporuje 3D zvuk díky OpenAL.
Include
Pro použití knihovny zvuků je potřeba ve vašem projektu naincludovat:
Upozornění: V hlavičkovém souboru soundslib.h je definován adresář s modely, který je nastaven na "Sounds/". Pokud chcete mít modely v jiné složce, tak hodnotu přepište.
Vytvoření virtuálního zvukového zdroje
Nejprve vytvoříme nový SoundElement (virtuální zdroj) a poté načteme data.
if( !soundLibrary.loadSound( zvuk1, "soubor.wav" ) )
chyba;
Pokud se zvuk používá poprvé, tak se data načtou ze souboru. Pokud už byl zvuk jednou použit, tak se nastaví jen příslušné informace a nic se ze souboru nemusí nahrávat.
Funkce vrátí vrátí false, pokud soubor neexistuje.
Pokud teď budu chtít použít stejný zvuk, ale pro jiný zdroj, tak použiju stejnou funkci. Rozdílem ale je, že v tomto případě už se nebude se souborem soubor.wav pracovat, protože data už jsou v paměti.
chyba;
Přehrávání
Přehrávání zvuků je velice jednoduché:
Přehrávání s opožděným startem
Kromě obyčejného přehrávání můžeme zvuk zaregistrovat a začít přehrávat až po uplynutí určitého času. K tomu využijeme následující kód:
Aby tato funkce fungovala, je nutné periodicky volat funkci run(), která zkontroluje, jestli se nemá nějaký zvuk začít přehrávat:
Parametry zvuků.
Každý virtuální zvuk má několik parametrů, které mu lze nastavit. Pro výčet všech doporučuji projít zdrojový kód nebo dokumentaci. Z těch nejdůležitějších je například pozice, opakování, rychlost pohybu a nebo relativní pozice vzhledem k posluchači.
zvuk1.setLooping( AL_TRUE );
zvuk1.setVelocity( 3, 2, 1 ); //vektor rychlosti
zvuk1.setSourceRelative( AL_FALSE ); //relativní pozice vzhledem k posluchači
Vlastnosti posluchače.
Dále můžeme nastavovat parametry posluchači. Zde se nastavuje pozice, rychlost a orientace.
soundLibrary.setListenerVelocity( 0, 0, 0 ); //vektor rychlosti pohybu
soundLibrary.setListenerOrientation( 1, 0, 0, 0, 0, 1 ); //orientace ( 1. vektor pohledu, 2. vektor směr nahoru )
Pokročilé vlastnosti
Zvláště u vlastnosti 'relativní pozice zdroje vzhledem k posluchači' je vhodné nastavit globálně tuto vlastnost pro nově vytvářené zdroje. Například chceme, aby byl zvuk slyšet pořád stejně nezávisle na pozici posluchače, což může být například hudba a nebo zvuky, které vydává hráč.
soundLibrary.setDefaultRelativity( AL_TRUE );
....
vytvoříme zvukové zdroje
....
....
soundLibrary.popAttrib(); //obnovíme staré parametry
Další věc se týká přidělování hardwarových zdrojů. Doporučuji nejdříve přečíst dokumentační text. Knihovna umožňuje rezervování hardwarového zdroje a ten pak lze globálně přiřazovat nově vytvářeným virtuálním zdrojům.
soundLibrary.pushAttrib(); //uložíme dosavadní parametry
soundLibrary.setDefaultForceSourceUse( AL_TRUE ); //nastavíme nutnost používání aktuálního hardwarového zdroje
soundLibrary.setDefaultSourdeId( 0 ); //hardwarový zdroj s indexem 0, který sme si rezervovali, se stane aktuálním
....
vytvoříme virtuální zvukové zdroje (všechny pak budou používat pouze hardwarový zdroj s indexem 0 a přehrávat se bude moci vždy jen jeden, čehož se využívá právě u zvuků, které mají vlastnost, že hraje vždy pouze jeden, jak například zvuky různých zbraní hráče, protože hráč může mít v ruce vždy jen jedinou zbraň.)
....
....
soundLibrary.popAttrib(); //obnovíme staré parametry
Smazání zvuku
Pokud už zvuk dále nechceme používat, zavoláme:
Tím se sníží počet referencí zvukových dat o jedna. Pak můžeme zavolat funkci, která otestuje počet uživatelů každého zvuku v databázi a pokud je hodnota rovna nule, tak se data smažou z paměti.
Vyprázdnění knihovny
Při ukončení programu je vhodné zavolat následující funkci, která smaže všechny data v knihovně.
Literatura
Pro pochopení některých funkcí je vhodné si přečíst vlastnosti knihovny v dokumentačním textu. Pro další informace je možné se přečíst články na ostatních odkazech.