====== Zvukové efekty v ASM projektu ======
V tomto příkladu se podíváme, jak využít zvukový engine LnxTrackeru k ozvučení našeho ASM projektu pro ZX Spectrum. Princip je takový že při nějaké události chceme přehrát zvuk, sampl, který si připravíme v LnxTrackeru.
===== LnxTrackeru =====
Nejprve si tedy zvuk nadefinujeme v LnxTrackeru. V tomto případě nebudeme vytvářet žádnou hudbu, jen zvuky / efekty. V LnxTrackeru vytvoříme novou hudbu, prázdný projekt (New). Nastavíme si na kterém čipu budeme efekty spouštět (Mode). V editoru patternů není potřeba nic vkládat, efekty si nadefinujeme pouze v editoru samplů. Poté co si zvuky nadefinujeme, musíme jim přiřadit ID. ID je krátký název, bez háčků a čárek, bez mezer. Například "fire", "crash", "click", "snd1" atd. Je to název který se bude používat v ASM editoru pro identifikaci szvuku.
Projekt si uložíme jako hudební skladbu, i když obsahuje jen nadefinované samply.
Nyní zvuky vyexportujeme pro assembler editor. V menu File/Export/Samples, a vyexportujeme soubor s koncovkou BIN. Dále si vyexportujeme ID názvy samplů, File/Export/Effect ID soubor s koncovkou ASM. Naše testovací soubory se budou jmenovat "zvuky.bin" a "zvuky.asm".
===== LnxSpectrum assembler =====
Nyní se přesuneme do Assembler editoru v ZX Spectrum emulátoru LnxSpectrum. V ASM editoru založíme nový prázdný projekt. Poté připojíme do ASM projektu námi vyexportované soubory BIN a ASM z LnxTrackeru.
{{ :lnxtracker:lnxtracker_export3.jpg?nolink |}}
Následně připojíme naše data do ASM projektu a také přilinkujeme hudební rutinu pomocí ''include''. Přehrávací rutina je součástí vnitřní knihovny kompileru. Napíšeme tento kód:
org 50000
InfoBlok defw 0
include "LnxTrackerEngine.slb" ;hudební rutina LnxTrackeru
zvuky include "zvuky.bin" ;naše exportovaná data z LnxTrackeru
include "zvuky.asm" ;naše exportovaná data z LnxTrackeru
Následující kód budeme psát za org 50000. Pro náš základní příklad budeme potřebovat tyto návěstí z LnxTrackerEngine:
* mus.module_smp (Inicializuje skladbu a následně spustí)
* mus.PlaySmp (Spustí zvuk)
* mus.GetChan (Zjistí adresu infobloku určeného kanálu v registru A)
* mus.int_AY (Přerušení pro ovládání AY čipu)
* mus.int_SAA (Přerušení pro ovládání SAA čipu)
Opět tady platí stejně jako v předchozím příkladu, že mus.int_AY a mus.int_SAA se musí volat 50x za sekundu, ideálně s přerušením. Můžete si všimnout, že nepotřebujeme mus.int_Patterns, pro přehrávání zvuků není potřeba. Ale pro hraní hudby potřebný je. Tu ale v tomto příkladu hrát nebudeme.
Náš sampl budeme chtít přehrávat na čipu AY, kanále A, ten má číslo 0 (0-2 AY, 3-5 AY2, 6-11 SAA). Nejprve si zjistíme adresu infobloku pro tento kanál. Je potřeba ho zjistit jen poprvé, dále už potřeba zjištovat není, jeho hodnota se nikdy nezmění.
org 50000
ld a,0 ;Kanál č. 0
call mus.GetChan ;Adresu nám vrátí v registru IX
informujeme zvukovou rutinu, kde se nacházejí naše samply.
org 50000
ld hl,zvuky ;adresa samplů
ld (mus.module_smp),hl