Přehrávač LnxTracker pro Z80
Jako další můj projekt je LnxTrackem hudební editor, ve kterém se dá vytvářet hudba a zvukové efekty pro zvukové čipy AY (např. ZX Spectrum 128) a SAA (např. SamCoupé). LnxTracker podporuje také hudební interface SAAY! (1x AY + 1x SAA), TurboSound B/C (2x AY) a TurboSound Easy (2x AY + 1x SAA). Dá se v něm tedy vytvářet hudba hrající ve 3 až 12 kanálů současně. Aby mohla být hudba přehrávána na reálném stroji, potřebuje právě tuto hudební rutinu LnxTrackerEngine (dále jen LTEN).
LTEN je v Beta verzi. Ovládání se může měnit.
LTEN se skládá ze tří hlavních částí. První zpracovává posloupnost hudby, Patterny a určuje ve kterém kanálu se bude přehrávat jaký sampl a s jakými parametry. Kanály jsou pevně rozdělené tak, že kanál 0-2 je první AY čip, 3-5 je druhý AY čip (TurboSound) a kanály 6-11 jsou SAA. Druhá část se stará o přehrávání samplů na čipech AY a třetí poslední část se stará o přehrávání samplů na čipu SAA-1099.
LTEN se ovládá pomocí nadefinovaných návěstí, začínající vždy „mus.“. Návěstí mají tyto základní funkce:
Návěstí | Funkce |
---|---|
mus.load_play | Inicializuje spuštění hudby |
mus.stop | Zastaví právě přehrávanou hudbu a stiší všechny kanály |
mus.Patterns | Volá se při přerušení. Zpracuje přehrávanou hudbu |
mus.int_AY | Volá se při přerušení. Přehrává samply na čipu AY |
mus.int_TS | Volá se při přerušení. Přehrává samply na dvou čipech AY (TurboSound) |
mus.int_SAA | Volá se při přerušení. Přehrává samply na čipu SAA |
mus.int_All | Volá se při přerušení. Přehrává samply na dvou čipech AY a jednom SAA |
Dále mají rozšířené funkce:
mus.GetChan | Vrací adresu objektu pro konkrétní kanál |
mus.module_smp | Zde se ukládá adresa dat všech Samplů použitých v hudbě |
mus.module_effects | Zde se ukládá adresa dat všech Samplů použitých jako zvukové efekty |
mus.PlaySmp | Spustí v určeném kanále určený Sampl |
mus.PlayEffect | Spustí v určeném kanále určený zvukový efekt |
Jak ovládat rutinu
Jako první je potřeba zajistit pravidelné volání rutin při přerušení. Volat při přerušení by se měla neustále, i když nic nepřehrává. V závislosti na tom jaké rutiny se budou volat, rozhodne se kompiler které části kodu z přehrávací rutiny vloží. Takže pokud se bude volat jen část pro AY, nepřikompilují se rutiny pro SAA.
org 50000 ; od adresy 50000 ;volaná rutina při přerušení pro konfiguraci SAAY! (1x AY + 1x SAA) INT push_all ; Makro - push všech registru ; (AF, BC, DE, HL, AF', BC', DE', HL', IX, IY) call mus.Patterns ; Spracování Hudby / Patternů call mus.int_AY ; Přehrávání zvuků na AY call mus.int_SAA ; Přehrávání zvuků na SAA pop_all ; Makro - pop všech registrů ret
Při přerušení se dají volat tyto rutiny:
Návěstí | Funkce |
---|---|
mus.Patterns | Spracování Hudby / Patternů - musí se volat jako první |
mus.int_AY | Zpracování samplu pro AY |
mus.int_SAA | Zpracování samplu pro SAA |
mus.int_TS | Spracování samplu pro TurboSound |
mus.int_All | Spracování samplu pro TurboSound a SAA |
Příklady: Vždy nejprve zavoláme mus.Patterns která spracuje hudbu. Pokud budeme hudbu chtít přehrávat na AY a SAA současně (SAAY!), musí se zavolat mus.int_AY a poté mus.int_SAA. Pokud budeme chtít používat TurboSound, musíme volat mus.int_TS, ten obslouží obě AY. Pokud budeme chtít používat jen SAA, stačí volat mus.int_SAA.
Když máme zajištěné pravidelné volání při přerušení, můžeme spustit hudbu. Do registru DE dáme adresu exportovaných dat z LnxTrackeru a zavoláme mus.LoadPlay. Tato funkce také inicializuje SAA1099, který inicializaci vyžaduje. Hudba by měla začít hrát. Pokud jí chceme ukončit, zavoláme mus.Stop.