BASSMOD - Zvuková knihovna - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



C/C++

BASSMOD - Zvuková knihovna

2. ledna 2002, 00.00 | Před nedávnem jste měli možnost si přečíst o zvukové knihovně FMOD. A aby jste měli z čeho vybírat, přinášíme vám pohled na další knihovnu, která se zabývá přehráváním zvuku - tentokráte jde o knihovnu BASSMOD.

Aneb zvuku není nikdy dost

Před nedávnem jsem napsal článek o zvukové knihovně fmod. Tato knihovna je velmi kvalitní a já se dočkal mnoha ohlasů na tento článek. Proto jsem se rozhodl napsat další článek o zvukových knihovnách. Tentokráte jsem pod svým drobnohledem prozkoumal knihovnu BASSMOD.

Její oficiální stránky naleznete:

http://www.un4seen.com/

Stáhnete si verzi 1.3, archiv se jmenuje bass13m.zip. Obsahuje základ knihovny, který tvoří dynamická knihovna bassmod.dll. Je zde také několik příkladů a hlavně velmi důležitá nápověda.

Srovnám-li knihovnu s fmodem, je mnohem jednodušší, ale na oficiálních stránkách naleznete navíc různé přídavky a vylepšení. Zaměřme se ale na bassmod.dll.

Poznámka:
Do projektu musíte přidat statickou knihovnu bassmod.lib
IMPLIB bassmod.lib bassmod.dll

Jak jsem říkal knihovna je mnohem jednodušší než fmod a nenabízí tolik možností, proto nebude pro mne problém, vyjmenovat vám všechny jeho možnosti. Knihovna obsahuje tyto funkce:

BASSMOD_ErrorGetCode - vrátí chybový kód
BASSMOD_Free - uvolní všechny využité prostředky bassmodu
BASSMOD_GetCPU - vrátí využití procesoru
BASSMOD_GetDeviceDescription - popis a nastavení zvukového ovladače
BASSMOD_GetVersion - verze bassmodu
BASSMOD_GetVolume - vrátí hlasitost
BASSMOD_Init - inicializuje bassmod
BASSMOD_MusicFree - uvolní z paměti aktuální skladbu
BASSMOD_MusicGetLength - vrátí délku skladby
BASSMOD_MusicGetName - vrátí jméno skladby
BASSMOD_MusicGetPosition - vrátí pozici ukazovátka ve skladbě
BASSMOD_MusicIsActive - jestli se přehrává skladba
BASSMOD_MusicLoad - nahraje do paměti skladbu
BASSMOD_MusicPause - přeruší přehrávání skladby
BASSMOD_MusicPlay - započne přehrávat skladbu
BASSMOD_MusicPlayEx - započne přehrávat skladbu (více možností)
BASSMOD_MusicSetPosition - nastaví pozici ukazovátka v přehrávané nahrávce
BASSMOD_MusicStop - stopne přehrávání skladby
BASSMOD_SetVolume - nastaví hlasitost výstupu

Vynechal jsem funkce na synchronizaci. Podívejme se jak to šlape v akci.

Příklad:

Dnes opět vyzkoušíme udělat jednoduchý přehrávač zvukových souborů. Bassmod se specializuje na soubory IT, XM, S3M, MTM, MOD, UMX, jde o syntetické skladby. Pro přehrávání využívá tzv. XMPlay engine.

První, co v příkladu najdete, je funkce, která má za úkol vypisovat chybové hlášky. Využívá API funkci MessageBox.

static void Error(char *es)
{
char mes[200];
sprintf(mes,"%s\n(error code: %d)",es,BASSMOD_ErrorGetCode());
MessageBox(win,mes,"Error",MB_OK);
}

Teď přichází na řadu inicializace knihovny bassmod.

/* test na verzi bassmodu 1.3 */
if (BASSMOD_GetVersion()!=MAKELONG(1,3)) {
Error("BASSMOD - chybná verze");
return;
}
/* inicializace bassmodu - default device, 44100hz, stereo, 16   bits */
if (!BASSMOD_Init(-1,44100,BASS_DEVICE_NOSYNC)) {
  Error("Nelze inicializovat zařízení.");
  return;
 }

Nejprve je dobré otestovat, jestli využíváme správnou verzi knihovny bassmod. Funkce BASSMOD_GetVersion() vrací číslo verze. Dále inicializujeme bassmod funkcí
BASSMOD_Init(int device,DWORD freq,DWORD flags);
Hodnota device představuje číslo ovladače. Implicitní (defaultní) nastavení je -1. Parametr freq představuje výstupní frekvenci (kvalitní nastavení je 44,1 KHz).
Hodnota flags je doplňující přepínač, mi nastavíme BASS_DEVICE_NOSYNC, to znamená, že vypneme synchronizaci. Jinak můžeme použít přepínač na 8 bitové rozlišení BASS_DEVICE_8BITS. Nebo můžeme využít monofoní zvuk BASS_DEVICE_MONO atd.

Další obsáhlejší akce v našem programu je načtení zvukového souboru.

if (OpenDialog1->Execute() == false)
return;
BASSMOD_MusicFree();
if (BASSMOD_MusicLoad(FALSE,OpenDialog1->FileName.c_str(),0,0,BASS_MUSIC_LOOP
       |BASS_MUSIC_RAMPS|BASS_MUSIC_SURROUND|BASS_MUSIC_POSRESET) == false) {
 Error("Chyba v načítání.");
 return;
}
BASSMOD_SetVolume(TrackBar1->Position);
Label1->Caption = "Song:" + (AnsiString) BASSMOD_MusicGetName();
Krokovac->Max = BASSMOD_MusicGetLength(false);
Label3->Caption = "Délka:" + (AnsiString) BASSMOD_MusicGetLength(false);
}

Do systému BASSMOD načteme zvukový soubor funkcí
BASSMOD_MusicLoad(BOOL mem,void *file,DWORD offset,DWORD length,DWORD flags);
Parametry jsou velmi vykutálené, mem určí, jestli bude načítat skladbu (true - z paměti, false - ze souboru).
Ukazatel void *file je ukazatel na zvukové data, pokud načítáme přímo ze souboru, zadáme zde jméno souboru (cestu).
offset - zadáme 0
length - nastavení typu načítání (jen pro mem = true), chceme-li načítat do konce souboru, nastavíme 0
flags - přepínače, pro opakované přehrávání skladby zadáme BASS_MUSIC_LOOP, BASS_MUSIC_SURROUND - využije surround

Při přehrávání zvukových souborů potřebujete také nastavit hlasitost výstupu. To provedete funkcí
BASSMOD_SetVolume(DWORD volume);
Hodnotu hlasitosti nastavujeme v rozmezí od 0 do 100.
Pokud chcete znát název skladby, zjistíte to přes funkci BASSMOD_MusicGetName, která vrací řetězec názvu skladby.
BASSMOD_MusicGetLength(BOOL play) - vrací délku skladby (true - délka skladby v bajtech, false - délka v časových jednotkách)

Takže nyní už skladbu přehráváme. Ale když nás omrzí, tak jí chceme vypnout nebo přerušit přehrávání.
Funkce BASSMOD_MusicPause přeruší přehrávání. Trochu nelogická mi přijde funkce BASSMOD_MusicStop, myslel jsem, že tato funkce vypne přehrávání zvukového souboru, ale při opětovném spuštění nahrávky pokračuje přehrávání na místě, kde skončilo přehrávání (jako u magnetofonu). Takže pokud budete chtít přehrávat od začátku skladby, jak je zvykem u většiny přehrávačů, zadáte
BASSMOD_MusicSetPosition(0);

Poslední zajímavá věc na příkladu je
DWORD WINAPI BASSMOD_MusicGetPosition();
Tato funkce vrátí hodnotu, kde se nachází pomyslné ukazovátko - pozice v přehrávané skladbě. Není to tak jednoduché, z této funkce můžeme získat 2 hodnoty. Mi ale potřebujeme LOWORD hodnotu a tu získáme přes
LOWORD(BASSMOD_MusicGetPosition());

Celý příklad stáhnete zde (670KB).

Hodnocení
Pokud mám hodnotit celkově knihovnu BASSMOD, je velmi zdařilá. Má však pouze základní možnosti jako přehrávání, změna hlasitosti, posunování ve zvukovém záznamu. Pokud vám tyto možnosti pro váš projekt plně postačují, je to volba pro vás. Nevýhodou bezesporu je málo podporovaných zvukových formátů. Tento nedostatek můžete doplnit různými přídavky, které se nachází na oficiálních stránkách. Ale o tom se zmíním v poznámce.
Nesmím zapomenout, co tahle legrace stojí. Pro vaše freeware programy je tato knihovna zadarmo. Za 100 dolarů máte BASSMOD k dispozici pro shareware. Co myslíte, to je za hubičku. No a pro komerční software si BASSMOD pořídíte za 995 dolarů.

Poznámka pod čarou
Ke knihovně BASSMOD je možné stáhnout několik přídavků. Velmi zajímavě zní LAME 3.7, je to MP3 encoder. Bohužel odkaz na oficiálních stránkách nebyl funkční. Ovšem stáhl jsem ActiveX prvek nazvaný DMC2. A ten je hodně povedený. Jedná se o ActiveX komponentu, která je postavená na BASSMODu. Tato ActiceX komponenta toho umí mnohem více než samotný BASSMOD. Namátkou - přehrává i wav a mp3 soubory. Ovšem zkoušel jsem ji až při dopisování tohoto článku, tak vám nepodám více informací, ale najdete ji zde.



 

Tématické zařazení:

 » Rubriky  » C/C++  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: