====== 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). {{:info.png?nolink&64 |}}//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.