S3M-player

[eng]

   Po celkem úspěšném přepracování původního MOD-playeru je sice možné bez problému přehrávat vícekanálové trackery, ale těch kvalitních ve formátu MOD bohužel zrovna moc k dispozici není a převést do tohoto formátu novější formáty lze jen zřídka. Z toho důvodu jsem si řekl, že by nebylo od věci přepracovat loader přehrávače tak, aby byl schopen přehrát i S3M, které mají velmi podobnou strukturu. Bohužel si pánové od Future Crew (autoři formátu ScreamTracker 3) řekli, že je dobrý nápad uložit vzorky ve neznaménkovém formátu, což je přesně naopak, než u ProTrackeru. Převádět vzorky v reálném čase znamená instrukci navíc (a k tomu nějaké rozhodování MOD/S3M), takže do toho se mi moc nechtělo a převést vzorky dopředu by spolklo přes 1s/1MB a to se mi rovněž nelíbí (nesnáším přístroje s odezvou delší, než tak 100ms). Navíc je původní hlavička poměrně dost HW specifická, takže jsem se rozhodl pro možnost třetí a sice napsat prográmek, který samply konvertuje do potřebného formátu a zároveň, když už to musí být, přežvýká poněkud nestravitelnou S3M hlavičku do něčeho velmi podobného MODům. To mi velmi usnadnilo jejich načítání, protože jsem nemusel nijak extra zasahovat do původního loaderu. Vysledný formát, který jsem pracovně nazval MD3 (ModTracker 3) kombinuje jednoduchost ProTrackeru s výhodami ScreamTrackeru 3 (stereováha, komprese "notového zápisu", delší vzorky, ...).

Takhle nějak vypadá S3M-player. Dole MCU, uprostřed SRAM a USB-COM, nahoře zdroj a audio výstup a nad tím vším kabely LCD a IDE rozhraní. Takhle nějak vypadá S3M-player. Dole MCU, uprostřed SRAM a USB-COM, nahoře zdroj a audio výstup a nad tím vším kabely LCD a IDE rozhraní. S3M-player s fešným LCD.

1. Základní vlastnosti

Mixing: 16-bit mono/stereo
Vzorkování: 4 - 48kHz (teoreticky i víc)
Resampling: žádný nebo lineární interpolace
Max. kanálů: 4 při 35kHz vzorkování
8 při 21kHz vzorkování
10 při 17kHz vzorkování
Zdroj dat: HDD nebo CF karta s FAT16 (základní podpora adresářů)
nebo sériový port
Formáty: Nekomprimovaný ProTracker (*.MOD)
Upravený ScreamTracker 3 (*.S3M)

   Všechny hodnoty platí pro AVR taktované na 20MHz, nicméně použitý ATmega644 lze značně přetaktovat.


2. Popis zapojení

   Na zapojení se oproti minulé verzi moc nezměnilo. Jen analogový mixing kanálů pomocí rezistorů byl nahrazen digitálním (kvůli stereováze, která je u S3M dost využívána), takže byly odstraněny.


   K vlastnímu zapojení opět jen stručně: Jádrem zapojení je celkem výkonný MCU AVR ATmega644-20PU na 20MHz. Disponuje slušným množstvím FLASH (64KB) i RAM (4kB). Externí SRAM IC4 je kvůli kapacitě adresovaná SW, pomocí dvou rozšiřujících 8-bit bufferů IC2 a IC3. Zabírá to pouze dva porty (porta: adresy, portc: data) a pár řídících signálů. Paměť by měla být svižná (v mém případě to chodí na 55ns verzi). Na těchto portech je nadrátováno také IDE rozhraní v 16-bit módu. Jeho adresace je řešena přes zbytek bufferu IC3. Zde bych upozornil, že LED D8 je občas nezbytná - některé HDD bez ní odmítají komunikovat (CF možná taky). Na stejných portech je navíc ještě HD44780 LCD a tlačítka. Audio výstup je kvůli kvalitě zvuku 16-bit a to sériový přes SPI rozhraní. MCU na SPI rozhraní emuluje I2S sběrnici (nebo obdobu pro TDA1545 převodník). Více k tomuto audio výstupu zde.

2.1 Taktování

   Použitý MCU samozřejmě chodí minimálně na 20MHz, ale při experimentování jsem zkoušel trochu přitlačit. 24MHz nebyl problém, což mě docela překvapilo. Můj prastarý ATmega32 se začal pochybně chovat už nad 18MHz, kdy program fungoval, ale jen když byl zarovnán od sudé adresy FLASH ;-). Tak jsem zkusil 27MHz a kupodivu stále bez problému. Větší krystal jsem nenašel, tak jsem ze stolních usazenin vyhrabal 32MHz oscilátor a po pár wait-cyklech navíc pro SRAM a IDE to kupodivu chodí bez obtíží. To se hodí zvlášť pro vícekanálové MODy. Nevím jestli je to náhoda nebo takhle chodí všechny novější ATmega644, takže pokud to někdo zkoušel a má podobnou zkušenost, případně odhalil nějakou skrytou nefunkčnost, nechť se ozve, docela by mě to zajímalo (můj kus je typ -20PU, série 0617). Jinak na 6V1 to jelo i na 40MHz, ale to už se nelíbilo ostatním komponentám ;-).

3. Programové vybavení

   Program je opět kompletně v ASM, ale tentokrát jsem ho pečlivě dělil do několika souborů, takže už to není jedna 10k+ řádků dlouhá nudle jako jiné moje "produkty". Navíc jsem hojně využíval makra a komentoval, takže by kód měl být docela čitelný.
   Skladbu lze, podobně jako u minulé verze, nahrát přes sériový port bez řízení toku nebo načíst z HDD nebo CF karty se souborovým systémem FAT16. V menu je podporována jedna úroveň adresářů, kterých může být maximálně 255, stejně jako skladeb. Pro přehlednost jsem přidal řazení podle názvu.
Zdrojáky a překlad pro TDA1543, zdrojáky a překlad pro TDA1545.

3.1 Ovládání

   Ovládání by mělo být zřejmé ze schématu. V zásadě to chodí tak, že je nejřív otestována externí SRAM. Pokud je jí alespoň 64KB, tak je vše OK a pokud ne, tak program záměrně zatuhne. Dále je testováno IDE zařízení. Pokud tam je a má správný formát (FAT16), tak přehrávač vstoupí do menu adresářů. Odtud se lze dostat buďto do menu skladeb v adresáři nebo přímo do přehrávacího módu. Pokud něco nesedí, tak přejde přehrávač do režimu, kde tahá data pouze z USARTu. Načtení dat z USARTu lze také spustit tlačítkem COM. Sosání dat z USARTu je ukončeno, když 1,5s nic nepříjde - data lze poslat libovolným terminálem, není použita parita ani řízení toku, MCU to stíhá bez problému.
   Nepodporované skladby by měl přehrávač přeskočit, ale není to vždy zaručeno, protože se netestuje kompletní soubor, ale jen pár hlavních položek hlavičky.

3.2 Nastavení

   Na začátku hlavního modulu "m644_modplay.asm" je většina nastavení pro celý přehrávač. Stručný popis významu položek uvádí tabulka.

Název parametru Význam
XTAL Frekvence hodin
HCOC Přidá wait-cyklus navíc do SRAM komunikace (obvykle nutné nad 24MHz)
USRDIV Dělička pro USART, baud=XTAL/(16*(USRDIV+1))
MEMTST Zapne kompletní test SRAM (trvá to asi 1s/1MB/20MHz), vhodné při oživování
STORA Zapne IDE interface, jinak pouze načítání přes sériák
LCDON Zapne LCD interface.
LING Jazyk textu na LCD.
MAXCH Maximální podporovaný počet kanálů, minimálně 4, maximálně až 32, ale vezme si to hodně RAM, takže bude třeba zmenšit audio FIFO buffer (defaultně 16)
MAXINS Maximální podporovaný počet nástrojů trackeru, standardně 48, lze ubrat i přidat, ale vezme si to nějakou to RAM navíc
DAC Typ audio sběrnice, 1543=I2S, 1545=TDA1545
SRATE Požadovaná vzorkovací frekvence (od 4 do asi 48kHz, možná víc)
STEREO Zapne stereo mixing, jinak jsou oba kanály shodné
LINRES Zapne lineární interpolaci při resamplingu (bere nějaký ten výkon MCU navíc)
MAMPLD Určuje amplitudu kanálu ve výsledném mixu, pro 4 kanály by měla být hodnota 1, pro vícekanálové 0 (snížená amplituda)
DRAWVU Zapne VU-metry na LCD (bere asi 5% výkonu MCU)

   Další nastavení jsou roztrušena po celém zdrojáku, ale do těch obvykle není nutné vrtat. Jediné, co stojí za zmíňku, je velikost audio FIFO. Tento buffer by měl být co největší - pokud bude přehrávač provozován s malým počtem kanálů (MAXCH), pak se uvolní nějaká ta RAM a je ho možné prodloužit. Nemůže ale být kratší než 1kB, protože je sdílen modulem "storage.asm" jako datový buffer.

3.3 Fuse bity

   Vzhledem k frekvenci oscilátoru by měl být naprogramovan fuse-bit CKOPT (amplituda oscilátoru). To je občas nezbytné kvůli blízkosti pinů USARTu, který dost ruší. Dál by měl být vypnutý JTAG, protože jinak patřičná část portc nemá tvrdou log.1 a náběžná hrana dat je pak dlouhá - chyby při zápisu. Možná by to šlo pořešit i zvedacími rezistory, ale nezkoušel jsem.

4. Podporované efekty a formáty

   Dokáže přehrát nekomprimované MODy, teoreticky s libovolným počtem kanálů (pochopitleně při adekvátně nízkém vzorkování). Dále dovede přehrát upravené S3M. K tomu účelu slouží prográmek "S3M convertor". Ten by měl být schopen načíst libovolnou ScreamTracker 3 skladbu a převést ji do mého vlastního formátu ModTracker 3 (MD3). Samotná převodní utilitka "s3m2md3.exe" je samozřejmě konzolovka, ale pro pohodlí jsem k ní dodělal prográmek s grafickým rozhraním umožňující celkem snadné převedení většího množství souborů najednou.

Utilitka ke stažení: S3M_2_MD3_convertor.zip (462kB).


Podporované efekty MOD
# Název efektu Stav implementace
0 Arpeggio funkční
1 Portamento up funkční
2 Portamento down funkční
3 Tone-portamento funkční
4 Vibrato funkční, pouze sinus
5 Tone-portamneto + Volume slide funkční
6 Vibrato + Volume slide funkční
7 Tremolo funkční
8 Panning (stereováha) funkční
9 Nastevení ofsetu vzorku funkční
A Volume slide funkční
B Skok na jiný list pouze vpřed
C Nastav hlasitost funkční
D Skok v listu funkční
E0 Nastav filtr není
E1 Portamento up jemně funkční
E2 Portamento down jemně funkční
E3 Glissandro není a nebude, nepoužívá se
E4 Vibrato waveform není
E5 Fine-tune není
E6 Pattern loop není
E7 Tremolo waveform není
E9 Retrig note funkční
EA Volume slide up jemně funkční
EB Volume slide down jemně funkční
EC Cut note funkční
ED Note delay funkční
EE Pattern delay není
EF Invert loop není
F Set speed/tempo funkční

Podporované efekty S3M
# Název efektu Stav implementace
A Set speed funkční
B Position jump funkční
C Pattern break funkční
D Volume slide/td> funkční
E Portamento down funkční, extra-fine mód jen přibližně
F Portamento up funkční, extra-fine mód jen přibližně
G Tone-portamento funkční
H Vibrato funkční
I Tremor není
J Arpeggio funkční
K Vibrato + volume slide funkční
L Tone-portamento + volume slide funkční
M Set channel volume není
N Channel volume slide není
O Set sample offset funkční
P Panning slide není
Q Retrigger funkční
R Tremolo funkční
S1 Glissando není
S2 Set fine-tune není
S3 Set vibrato waveform není (jen sinus)
S4 Set tremolo waveform není (jen sinus)
S5 Set panbrello waveform není
S6 Pattern delay není
S7 Set new note action není
S8 Panning funkční
S9 Extended channel effects není
SA Set sample offset high není
SB Pattern loop není
SC Note cut funkční
SD Note delay funkční
SE Pattern delay není
SF Select active macro není
T Set tempo funkční
U Fine vibrato funkční
V Set global volume není
W Global volume slide není
X Set panning funkční
Y Panbrello není

   Efekty jsem se snažil odladit tak, aby se chovaly identicky s MP trackerem takže by to mělo znít stejně. Pokud najdete nějaký MOD, který by se výrazněji lišil, tak mi ho pošlete abych mohl poladit algoritmus.

5. Formáty

   Pár dokumentací ProTrackeru a ScreamTrackeru 3 ke stažení uvádí následující tabulka:

Dokumentace Popis
FH-MFDL2.ZIP Původní dokumentace, hrubý popis většiny formátů
MOD-FORM.TXT Kvalitní dokumentace z nějaké mid2mod utilitky
MODFILXX.TXT Rovněž kvalitní dokumentace z MOD playeru TNT MP11

   Nejlepší "dokumentace" jsou ale zdrojáky programu MP tracker. Vlastní dekodér je sice napsán naprosto příšerně, navíc je to převzat z nějakých prehistorických přehrávačů (a upraven do C++), ale stále je to nejsnažší cesta, jak pochopit funkci a chování efektů.

6. Několik nahrávek z MOD-playeru

   V následujícím videu je přehráno pár vícekanálových S3M:



(c) 2011, Stanislav Mašláň - Všechna práva vyhrazena.

Last update: 22.10.2011 Up

webzdarma.cz