Obsah
1. Přehrávače hudby určené pro zvukový čip AY-3–8910 na Linuxu
2. Přehrávače hudby určené pro zvukový čip AY-3–8910 na MS Windows
3. Vortex Tracker II
4. Zvukový čip SN76489
5. Programování čipu SN76489
6. Generátor šumu
7. Přehrávání samplovaných zvuků na čipu SN76489
8. Odkazy na Internetu
9. Obsah dalšího pokračování seriálu
1. Přehrávače hudby určené pro zvukový čip AY-3–8910 na Linuxu
V předchozí části tohoto seriálu jsme si řekli, že zvukový čip AY-3–8910 byl zabudován v mnoha různých systémech – od herních konzolí přes osmibitové domácí počítače až po na svou dobu velmi výkonné osobní počítače Atari ST. Z toho také vyplývá, že existuje několik různých formátů hudby, jenž jsou zhruba rozděleny do dvou kategorií – osmibitové počítače s mikroprocesory Z80 a počítače Atari ST založené na mikroprocesoru Motorola 68000 (popř. některé jeho výkonnější variantě, například 68010). Pro operační systém Linux existuje několik různých přehrávačů, pomocí nichž lze přehrát hudbu uloženou v několika formátech, včetně „univerzálního“ AY formátu, který neobsahuje instrukce mikroprocesorů, ale jen hodnoty registrů čipu AY. Jednou ze známějších aplikací je aylet určený pro textovou konzoli (používá se buď textové uživatelské rozhraní či ovládání z příkazového řádku – to je výhodné například při hromadné konverzi hudby do formátu WAV a její následnou komprimaci do MP3 apod.) a její „grafická“ verze xaylet. Hudbu určenou pro AYčko však lze přehrávat i v některých universálních hudebních přehrávačích. Mezi tyto přehrávače patří Audacious (v podstatě se jedná o fork XMMS) s modulem (pluginem) nazvaným VTX (Vortex Player). Autorem implementace tohoto modulu pro přehrávač Audacious je Pavel Vymetálek (viz čtvrtý screenshot).
Obrázek 1: Screenshot programu aylet běžícího v textové konzoli.
Obrázek 2: Screenshot programu xaylet, o dekoraci oken se stará Fluxbox.
Obrázek 3: Hlavní okno a okno playlistu přehrávače Audacious
Obrázek 4: Nastavení modulu VTX v přehrávači Audacious
2. Přehrávače hudby určené pro zvukový čip AY-3–8910 na MS Windows
Výběr přehrávačů hudby určené pro AYčko, které běží pod operačním systémem Microsoft Windows, je taktéž zajímavý a poměrně obsáhlý. Známý je přehrávač ZX Spectrum Sound Chip Emulator, dříve nazývaný jednoduše ZX Spectrum plAYer (obrázek 5 a 6). Jak již název této aplikace napovídá, jedná se o přehrávač hudby určené pro osmibitový domácí počítač ZX Spectrum 128+, který AYčko obsahoval. Podobným přehrávačem, dokonce s dobovým uživatelským rozhraním, je MicroSpeccy (obrázek 7 a 8). Tento přehrávač emuluje jak zvukový čip AY, tak i původní „jednobitový“ reproduktor ZX Spectra (známý beeper, který však při správném naprogramování dokáže divy), který je v některých skladbách použit společně s AYčkem. Hudbu určenou pro počítače Atari ST lze přehrát pomocí programu JAM (Just Another Musicplayer), který byl původně vyvíjen přímo pro Atari ST a teprve později došlo k jeho přepsání pro operační systém Microsoft Windows. Právě tento program byl použitý při tvorbě ukázkové hudby v předchozí části tohoto seriálu. Podobně jako další přehrávače, i zde je možné nastavit (obrázek 11), která verze zvukového čipu se má emulovat a taktéž zvolit způsob zapojení tří zvukových kanálů AYčka (existuje totiž několik možností, jak zapojit stereo výstup).
Obrázek 5: Hlavní okno přehrávače ZX Spectrum Sound Chip Emulator.
Obrázek 6: Dialog s informacemi o přehrávači ZX Spectrum Sound Chip Emulator.
Obrázek 7: Hlavní okno přehrávače MicroSpeccy.
Obrázek 8: Konfigurace přehrávače MicroSpeccy.
Obrázek 9: Hlavní okno přehrávače JAM.
Obrázek 10: Playlist přehrávače JAM.
Obrázek 11: Nastavení přehrávače JAM.
Obrázek 12: Informace o souboru s přehrávanou hudbou.
3. Vortex Tracker II
Zajímavým programem, který se dodnes používá pro tvorbu hudby určené pro zvukový čip AY, je Vortex Tracker II. Tato aplikace pracuje podobným způsobem jako většina trackerů – nejprve se vytvoří tóny jednotlivých nástrojů použitých ve skladbě (zde lze využít všech možností zvukového čipu, včetně přehrávání samplů) a posléze se editují stopy, do nichž jsou zaznamenány přesné časy, kdy má který tón zaznít, délka tónu, jeho výška, opakování zvuku atd. Někteří současní tvůrci hudby pro čip AY sice stále používají programy určené pro ZX Spectrum 128+ či Atari ST, mnozí však přešli právě na Vortex Tracker II, protože po zkomponování celé skladby je možné provést export do mnoha formátů, jež lze přehrát jak výše popsanými hudebními přehrávači, tak i „nativními“ přehrávači pro již zmíněné Spectrum a Atari. Vortex Tracker lze samozřejmě použít i ve funkci hudebního přehrávače, i když ovládání je v tomto případě zbytečně komplikované – jednodušší je použít některý z výše zmíněných jednoúčelových programů.
Obrázek 13: Informace o aplikaci Vortex Tracker II.
Obrázek 14: Hlavní obrazovka aplikace Vortex Tracker II.
4. Zvukový čip SN76489
Posledním zvukovým čipem pocházejícím z éry osmibitových domácích počítačů, který si v tomto seriálu popíšeme, je čip označený SN76489 popř. SN76489A. Tento čip je použitý například v osmibitovém domácím počítači Sharp MZ-800 (na tomto počítači byla mj. vyvinuta i barevná verze české hry Hlípa, oblíbená byla také akčně-logická hra Flappy) nebo několika herních konzolích: Sega Game 1000, Sega Master System, Sega Game Gear, Sega Mega Drive či ColecoVision. Existují dvě verze tohoto čipu – první je označena SN76489 a druhá SN76489A. Tyto verze se od sebe odlišují především rozdílnou délkou interního posuvného registru (15 vs. 16 bitů), což má poměrně velký – a hlavně slyšitelný – dopad na výšku tónu generovaného šumového signálu. Tón vygenerovaný verzí SN76489 má při přehrávání na SN76489A o 6,25% nižší frekvenci (výšku). Taktéž zvuk šumu je odlišný, protože délka posuvného registru ovlivňuje i periodu, po které se pseudonáhodný „šum“ opakuje (tato perioda je rovna buď 215-1 nebo 216-1, viz další kapitoly).
Obrázek 15: Zapojení vývodů zvukového čipu SN76489. Pomocí symbolů „<“ a „>“ je naznačeno, zda se jedná o vstupní, výstupní či obousměrný pin.
5. Programování čipu SN76489
Zvukový čip SN76489 obsahuje tři generátory obdélníkového signálu a jeden generátor šumu (ten je založený na pseudonáhodném generátoru bitové sekvence vytvořeném pomocí posuvného registru se zpětnou vazbou, podobně jako u čipu POKEY). Pro každý generátor je možné nastavit jeho hlasitost (tj. amplitudu) na jednu ze šestnácti úrovní – v tomto ohledu má tedy tento zvukový čip vlastnosti prakticky stejné jako POKEY či AY-3–8910 (týká se to zejména možnosti přehrávání samplovaných zvuků, podobně jako u AY je však závislost na nastavené hlasitosti nelineární). Frekvenci obdélníkového signálu a tím i výšku vytvářeného tónu lze nastavit pomocí desetibitového čísla, které se použije při dělení hodinového signálu. Vzorec pro výpočet frekvence obdélníkového signálu je velmi jednoduchý: fout=fclk/32×N (Hz), kde N je již zmiňovaná desetibitová hodnota. Frekvenci šumu lze vybrat ze tří pevně nastavených hodnot děliče frekvence: 16 (na Sharpu odpovídá frekvenci 6928 Hz), 32 (3464 Hz) a 64 (1732 Hz). Je taktéž možné, aby byla frekvence šumu odvozena od frekvence třetího generátoru obdélníkového signálu (jeho index je 2). V tomto případě je možné frekvenci nastavovat stejně jako u generátorů obdélníkového signálu, tj. desetibitovou konstantou, ovšem s tím omezením, že je pro tento účel obsazen třetí kanál.
Obrázek 16: Osmibitový domácí počítač Sharpu MZ-800, který obsahovat čip SN76489.
Vzhledem k tomu, že do čipu SN76489 se data přenáší po jednotlivých bajtech (nelze adresovat jednotlivé registry, neboť čip neobsahuje piny pro zápis adresy – viz obrázek číslo 15), je formát jednotlivých bajtů (zpráv) zvolen tak, aby bylo zcela přesně určeno, kterou hodnotu (či) hodnoty daný bajt představuje. Existují čtyři typy přenášených zpráv (nastavení spodních 4 bitů děliče frekvence, nastavení vyšších 6 bitů děliče frekvence, nastavení generátoru šumu a změna hlasitosti jednotlivých kanálů), které jsou přehledně popsány na adrese http://www.scav.ic.cz/sharp_mz-800/sharp_mz-800_6_PSG-SN76489AN.htm a http://www.scav.ic.cz/sharp_mz-800/vse_o_MZ-800/vse_o_MZ-800–6_Zvukovy_generator.htm. Interně je veškeré nastavení uloženo do osmi registrů s různou bitovou délkou. Ve čtveřici čtyřbitových registrů jsou uloženy hlasitosti jednotlivých kanálů (3 kanály s obdélníkovým signálem a 1 kanál se šumem), další tři desetibitové registry obsahují konstanty pro děliče frekvence kanálů s obdélníkovým signálem, a konečně jeden tříbitový registr obsahuje nastavení generátoru šumu (frekvence a typ šumu).
Obrázek 17: Detail klávesnice a magnetofonu zabudovaného v počítači Sharp MZ-800.
6. Generátor šumu
Generátor šumu zvukového čipu SN76489 může pracovat ve dvou režimech. V obou případech se používá posuvný registr o délce 15 či 16 bitů (podle verze čipu), jehož obsah je s každým taktem posunut doprava o jeden bit. Poslední bit posuvného registru představuje výstup z generátoru šumu. V prvním režimu je poslední bit posuvného registru spojen s bitem prvním, tj. sekvence bitů se neustále cyklicky opakuje (původní sekvence obsahuje pouze jeden jedničkový bit, tj. výstupem je pravidelný obdélníkový signál se střídou 1:15 resp. 1:14). V režimu druhém je zpětná vazba poněkud složitější – přes logické hradlo XOR jsou na vstup prvního bitu přiváděny výstupy z bitu posledního a třináctého (popř. dvanáctého), takže výsledkem je sekvence pseudonáhodných hodnot, jejichž opakování nastane až po proběhnutí 215-1 resp. 216-1 stavů (poslední stav je představován samými nulami) – jedná se o totožné chování, jakého je možné docílit s využitím již popsaného zvukového čipu POKEY, který obsahoval dokonce několik podobně sestrojených poly čítačů (polycounter). Princip činnosti generátoru šumu pracujícího v prvním režimu (cyklický posuvný registr) je zobrazen na schématu pod odstavcem:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+---> | 1| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| -> Output
| +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+-++
| |
+----------------------------------------------------+
V případě, že je generátor šumu přepnut do druhého režimu, schéma zapojení posuvného registru (přesněji řečeno jeho zpětné vazby) se změní následovně:
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+---> | 1| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| -> Output
| +--+--+--+--+--+--+--+--+--+--+--+--+-++--+--+-++
| ______ 0 | |
| 0 / //---+ |
+-------------------------------( XOR (( 0 |
\_____\\------------+
Obrázek 18: Princip práce čtyřbitového poly čítače generujícího binární pseudonáhodný šum.
7. Přehrávání samplovaných zvuků na čipu SN76489
S využitím zvukového čipu SN76489 lze přehrávat i samplované zvuky, čehož se poměrně často využívalo především v různých hrách. Nejjednodušší způsob přehrávání samplovaných zvuků představuje metoda PCM (Pulse Code Modulation). Její princip je velmi jednoduchý – frekvence všech tří zvukových kanálů je vynulována (signál má konstantní hodnotu) a jejich hlasitost se v pravidelných intervalech (odpovídajících vzorkovací frekvenci) mění. Mezi nevýhody PCM patří omezení na čtyřbitové vzorky (popř. při vhodné kombinaci všech tří kanálů se jedná o cca 5 bitů) a taktéž to, že závislost skutečné hlasitosti na nastavené hodnotě není lineární, což vede k nutnosti vytvoření převodní tabulky. PCM lze však jednoduše naprogramovat, přičemž rychlost změny hlasitosti je přímo určena vzorkovací frekvencí (u dále popisované pulsní šířkové modulace je nutné data do SN76489 zapisovat mnohem rychleji, což může být v některých případech problematické, zejména tehdy, pokud nemá počítač dostatečně přesný časovač).
Druhou možností přehrávání samplovaných zvuků je využití pulsní šířkové modulace – PWM (Pulse Width Modulation). V tomto případě je frekvence všech tří zvukových kanálů opět nastavena na nulovou hodnotu, generátor šumu může být nastavený libovolně, ale jeho hlasitost musí být nulová, aby nebyl jeho výstup slyšitelný. Následně se programově mění hlasitost všech tří kanálů buď na minimum (0×0f) či naopak na maximum (0×00) na základě bitového vzorku odpovídajícího hlasitosti přehrávaného vzorku (jeden vzorek je přehrán například sekvencí 16 binárních hodnot; frekvence jejich přehrávání odpovídá šestnáctinásobku vzorkovací frekvence původních samplů). Předností je větší dynamika zvuku, ovšem zvětšují se nároky na přesné a dostatečně rychlé časování – frekvence zápisu dat do čipu SN76489 je přímo úměrná jak původní vzorkovací frekvenci, tak i požadovanému dynamickému rozsahu. Většinou se volí rozumný kompromis, například vzorkovací frekvence je nastavena na 10 kHz a dynamický rozsah odpovídající zhruba kazetovému magnetofonu (cca 45 dB). Princip pulsní šířkové modulace je ukázán na devatenáctém obrázku (předpokládá se přitom, že dochází ke zkreslení výsledného analogového signálu vlivem „paralelních“ kapacit v zesilovači a „sériové“ indukčnosti reproduktoru).
Obrázek 19: Princip pulsní šířkové modulace (PWM) v případě, že je na výstupu signál integrován (například za pomoci kondenzátoru – sklon modré čáry odpovídá časové konstantě τ RC článku).
8. Odkazy na Internetu
- General Instrument AY-3–8910,
http://en.wikipedia.org/wiki/General_Instrument_AY-3–8910 - AY programy, hudba, etc.,
http://bulba.untergrund.net/main_e.htm - Project AY,
http://www.worldofspectrum.org/projectay/ - AY Players,
http://www.worldofspectrum.org/projectay/ayplayers.htm - SNDH – Atari ST YM2149 Archive,
http://sndh.atari.org/ - 8bitcollective,
http://www.8bitcollective.com/ - Chiptune,
http://www.chiptune.com/ - Chiptune na Wikipedii,
http://en.wikipedia.org/wiki/Chiptune - STsndplay,
http://www.nocrew.org/software-stsndplay.html - Jam for Windows (Just Another Musicplayer),
http://creamhq.de/ - SND Player,
http://sndplayer.atari.org/ - AY Hudba,
http://www.dmoz.org/Computers/Multimedia/Music_and_Audio/Audio_Formats/AY/ - www.ayland.x.pl – Internetové rádio vysílající hudbu ze ZX Spectra,
http://www.ayland.x.pl/nowosci.php - SN76489 sound chip details
http://web.inter.nl.net/users/J.Kortink/home/articles/sn76489/ - SN76489 notes
http://www.smspower.org/maxim/docs/SN76489.txt - MZ-800 course Chapter 6
http://www.sharpmz.org/mz-800/800course020.htm - PSG – SN 76489AN
http://www.scav.ic.cz/sharp_mz-800/sharp_mz-800_6_PSG-SN76489AN.htm - Programovatelný zvukový generátor (PSG)
http://www.scav.ic.cz/sharp_mz-800/vse_o_MZ-800/vse_o_MZ-800–6_Zvukovy_generator.htm - Music for Sharp MZ-800
http://www.scav.ic.cz/download/MZ-800/MZ-800_Software/COM/MZF/PROGS/800/Music/ - Texas Instruments SN76489
http://en.wikipedia.org/wiki/Texas_Instruments_SN76489
Obrázek 20: Hard plAYer – obdoba HardSIDu, ovšem s využitím zvukového čipu AY-3–8910.
9. Obsah dalšího pokračování seriálu
V následující části seriálu o architekturách počítačů se budeme zabývat především zvukovým čipem Paula použitým ve slavných počítačích Amiga. Právě tento čip odstartoval éru samplované počítačové hudby přehrávané jen s minimální asistencí mikroprocesoru (mikroprocesor tedy nemusel provádět ani přenos dat ani vzájemné mixování jednotlivých zvukových vzorků). Na počítačích PC byla Paula překonána až zvukovou kartou Gravis Ultrasound, předchozí zvukové karty určené pro přehrávání samplované hudby byly tvořeny buď pouhými D/A převodníky, nebo D/A převodníky s doplněným DMA kanálem – viz další části tohoto seriálu. Příště si taktéž popíšeme princip takzvaných (hudebních) modulů – jedná se o ve své době velmi populární soubory se zkratkami .mod, .xm či .s3m, ve kterých jsou uloženy jak navzorkované zvuky jednotlivých hudebních nástrojů, tak i stopy obsahující informace o tom, ve které chvíli a s jakou rychlostí mají být jednotlivé samply (navzorkované zvuky) přehrávány.
Obrázek 21: Legendární počítač Amiga 500 vybavený zvukovým čipem Paula.