====== 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