Obsah

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.

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:

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