„A hanggal nagyon kár volt előjönnöd – miért hasonlítod egy köcsögduda hangját egy hárfáéhoz?”
- CoVboy a Commodore Plus/4 hangjáról,
Commodore
Világ #7 levelezési rovat
Szomorú tény, hogy a Plus/4 hangja (is)
áldozatul esett a költségcsökkentésnek a tervezőasztalon. Az agyonzsúfolt TED chipbe már nem lehetett a Commodore 64 SID chipjét megközelítő hanggenerátort erőltetni. Valószínűleg ez a döntés is
egy jelentős tényező volt a platform üzleti buktájában.
 |
MOS 7360/8360, népszerűbb nevén TED, (forrás: C64-wiki) |
Azért ne csak a rosszra emlékezzünk, az évek során elég sokat
sikerült kihozni a szűk lehetőségekből. Valószínűleg a gép tervezői is
meglepődnének mi mindent kiprésel magából a hardverük a hangfalakon keresztül.
Ebben a posztban megkísérlem áttekinteni
hogyan is alakult a Plus/4 és a hang viszonya, különös tekintettel a magyar
programozók munkájára. Az évek során sok minden történt a hanggenerálással
kapcsolatban, ezeken az eseményeken fogunk végigsétálni.
Egy hangyányit több technikai részlet került a
posztba, ennek elsősorban az az oka, hogy bizonyos minimális mértékig szükséges
megérteni a hátterét a különböző tárgyalt témáknak. Azért próbáltam minimálisra
visszavágni amennyire lehetett, hogy még elmenjen egy Nők lapja tudományos
rovatba.
Hátrányból nekifutással
Kezdjük egy számvetéssel, mire is képes a
Plus/4 hanggenerálás terén!
A TED chip két hangcsatornát tud kezelni,
mindkettő négyszögjel hullámformát szintetizál úgynevezett oszcillátorok segítségével. A második csatornát be lehet állítani fehér zaj
generálásra is. (Lásd keretes írás lejjebb.) Hangerőt csak a két csatornára
egyszerre lehet állítani 9 fokozatban.
Az oszcillátorok nagyjából 4 oktávot átfogó
frekvenciasávban (109 Hz – 110 KHz) tudnak előállítani hangot a két csatornán
egymástól függetlenül.
Ezen kívül lehetséges még úgynevezett
egyenletes jelszint beállítása is, ebben az esetben a hullámgenerálás leáll, a
kiadott jel beáll a hangerőnek megfelelő maximális egyenletes erősségre. Az
általános hangerő gyors manipulálásával hangmintát (vagy ahogy annak idején
emlegettük: digi zenét) lehet visszajátszani, mint egy nagyon egyszerű digitális-analóg
átalakítóval.
És ezzel végére is értünk a lehetőségek felsorolásának.
Nem egy hosszú lista, de azért voltak rosszabbak is akkortájt.
 |
Alapvető hang hullámformák hangerő-idő diagramon ábrázolva |
Hullámformák és hanggenerálás
technikai részleteibe nem szeretnék nagyon elmélyedni. Annyit azért érdemes
megjegyezni, hogy a hangszintézis két alapvető fogalma a frekvencia (azaz
hangmagasság) és a hullámforma (vagyis a milyen érzetet kelt a hang).
Minél alacsonyabb a frekvencia, annál mélyebb
hangot érzékelünk (basszus). Nagyobb frekvencia magasabb, egy bizonyos határon
túl éles, sípoló hangmagasságot jelent.
Az oszcillátorok hullámformák segítségével képesek
„hangszereket” szintetizálni. A hullámformák onnan kapták a nevüket, hogy
hangerő-idő diagramon ábrázolva milyen formát rajzolnak ki. Alapvetően a
következő hullámformák jellemzőek a ’80-as évekbeli hangszintetizációra:
- Négyszög (square vagy rectangle) – zongorára vagy klarinétra emlékeztető hangzás.
- Szinusz (sine) – sípra hasonlító hangzás, de
természetes hangszer nem nagyon produkálja.
- Háromszög (triangular vagy triangle) – hegedűre vagy csellóra hasonlító hangzás.
- Fűrészfog (sawtooth) – furulya- vagy síp-szerű hangzás.
- Fehér zaj (white noise) – véletlenszerű zaj, a régi analóg TV-k „hangyafocija” alatti statikus sistergés. Hangeffektekre (például szél), cintányér és dobok szimulálására szokták gyakran felhasználni.
Ha szeretnél többet megtudni a
hullámformákról, akkor ezt az (angol nyelvű) videót ajánlom: Electrical
& Electronic Waveforms: sine, square, triangular, sawtooth, ramp. Ha nem tudsz angolul akkor is érdemes megnyitni a linket: odatekertem,
ahol a különböző hullámformákat lehet meghallgatni.
Természetesen ennél sokkal több tulajdonságát
lehet a hanggenerálásnak befolyásolni, például hangerő burkoló görbe (envelope), szűrés (filtering), kapuzás (gating), gyűrűmoduláció (ring modulation), stb. És akkor még nem beszéltünk sok hangeffektről, amit
előszeretettel használnak az elektronikus zenében, de a ’80-as évekbeli
számítógépeken nem állt rendelkezésre.
A felvágós rokon
Hogy hogyan viszonyulnak ezek a lehetőségek a
Commodore 64 SID-jéhez? Elég szomorú egy ilyen összehasonlítás, egyben nem is
igazságos, mert a C64-be egy akkori szintetizátorokkal vetekedő hanggenerátort
építettek. Nem véletlen, hogy a mai napig is népszerűek a SID-re készült zenék. A vele egy időben megjelent személyi számítógépek messze
elmaradtak mögötte. Azért azt ne felejtsük el, hogy a Plus/4 1984-ben jelent
meg, az Amiga követte 1985-ben, hogy minden konkurenciát földbe döngöljön.
Csak nagy vonalakban fussunk végig a főbb
különbségeken:
- A SID háromszög, négyszög (kitöltés-modulációval),
fűrészfog és fehér zaj hullámformát tud előállítani 3
hangcsatornán.
- Támogatja a burkológörbéket csatornánkként, a főhangerő 16 fokozatú.
- Képes gyűrűmodulációra és programozható három frekvenciasávú
szűrésre.
- Az hanggenerátorok 0 Hz és 4 KHz közötti frekvenciát képesek előállítani.
Összefoglalva tehát: 3 hangcsatorna 2 helyett,
4 hullámforma 2 helyett, alacsonyabb frekvenciatartomány magas tartomány
helyett, különálló hangerővezérlés hangcsatornánként, több fokozatú fő hangerő
és a többi extra szolgáltatás.
A sok különbség közül véleményem szerint a
legfájóbb a hullámformák és a basszus hiánya Plus/4-en, emiatt a zenék inkább
csipogó/visító hangtartományban mozognak és gyakran zavaróan élesek.
Hogy miért képes a hanggenerátor olyan
frekvenciák előállítására, ami bőven meghaladja az emberi hallás képességeit –
ez örök rejtély marad számomra. Talán kutyák betanítására szánták. 🐶
Helyette mehettek volna inkább lejjebb a frekvenciatartományban,
ami igazán nem okozott volna technikai problémát. Nem véletlenül szokták a pop
zenében a basszust (bass) emlegetni előszeretettel, attól válik
teljesebbé a zene hangzása. Annak idején annyira nem tűnt fel nekem a basszus
hiánya, de mai füllel meghallgatva a Plus/4 zenéket már nehezebben viselem.
Vagy csak megöregedtem, ez is egy lehetséges magyarázat.
Mindezek ellenére már a korai időkben is
sikerült élvezhető zenét kicsikarni a játékok színesítésére. Teljesség igénye
nélkül megemlíteném az Exorcist, Traiblazer, Bandits
at Zero, Bongo, Leaper és a Tutti
Frutti örökbecsű dallamait. (Jó, Shaun Southern-rajongó vagyok, most lebuktam. 😊)
Mi a frekvencia, Kenneth?
Utólag mindig könnyű okosnak lenni, ezért
mondhatnánk, hogy nyilván át lehet konvertálni a rengeteg SID-re készült C64
zenét Plus/4-re. Igaz, hogy a hangzás jó messze esik majd az eredetitől, de a
zene sokszor elsősorban a dallamról szól.
Bármennyire is kézenfekvő ez a lépés, mégse
jutott eszébe sok embernek. Az első programozó, aki ezzel a kihívással
megbirkózott nem más volt, mint Szigethy András, alias Pigmy, akit már emlegettem a konvertálásról szóló posztban.
Visszaemlékezése alapján a művelet hasonlóan
kezdődött az általános programkonvertáláshoz: kiszedte a zenelejátszó rutinokat
a C64 programokból, a zenészek mindig ugyanazt a saját lejátszót használták
minden játékban. Majd kézzel átírta a frekvenciákat, hogy a Plus/4 által
támogatott sávba essenek.
A végeredményt megcsodálhatjuk a
Musics from 64 című, Pigmy által készített zenegyűjteményben.
Később támadt az az ötlete, hogy mi lenne, ha
egy általános konvertáló rutint készítene, ami futásidőben dinamikusan számítja
át a frekvenciákat. Ehhez egy 16 bites osztást kellett megvalósítani, ami bitek
tologatásával végezte el a műveletet, jó lassan. A frekvencia átváltás művelet
a három csatornára nagyjából a processzoridő 40%-át emésztette fel.
A működési elve nagyon egyszerű: a C64 zenét
az eredeti lejátszó produkálta (ehhez szinte módosítani se kellett) és a C64
hardver regisztereinek megfelelő memóriacímekre beírta az értékeket. Viszont
Plus/4-en azokon a címeken közönséges memória van, tehát miután egy ciklus
lefutott a konvertáló rutin ki tudta olvasni onnan az adatokat és átszámítva a
frekvenciákat beírta a Plus/4 hangregisztereibe.
Ezzel megszületett az úgynevezett frekvenciakonverter
(freq converter) kategória.
Azért nem annyira sima ügy, mint amilyennek
tűnik. Van néhány bökkenő, ami az előbbiekben emlegetett jelentős képességbeli
különbségeknek köszönhetünk. Például a 3 csatorna hangját 2 csatornán kell
visszaadni, ehhez az egyik csatornán két konvertált csatorna hangját gyorsan
váltogatva szólaltatja meg a rutin.
Nagyobb probléma a hiányzó basszushangok,
illetve a nemlétező hullámformák, amivel hangeffekteket készítettek, többek
között dobokat. Az utóbbihoz jellemzően magas frekvenciájú fehér zajt
használtak, de azt csak az egyik hangcsatorna képes lejátszani Plus/4-en. A
korai konverterek ezt nem vették figyelembe, ezért a korai konvertált zenékben
jól felfedezhető, hogy a cintányér hangja zaj helyett éles csipogásként hallható.
Pigmy második frekvenciakonvertere már
lényegesen jobban optimalizált, a számoláshoz 4 bites szorzótáblákat használ,
ezért töredéke processzoridőt igényel. Ez már alkalmas volt arra, hogy mellette
demóeffektek és játékok kódja is fusson.
Később mások is készítettek saját frekvenciakonvertert,
Coby, CSM és TLC eszközeit is sokan használták programjaikban.
Digitális, jobb, mint a fatál is*
Egyértelműen kiderül a Plus/4 hardver
lehetőségeiből, hogy a tervezésénél figyelembe vették a hangmintavisszajátszás
támogatását. Ahogy már említettem, a „gyárilag” beépített egyenletes jelszintet
szánták erre.
Mivel ez a hardvertámogatás eléggé adja magát,
így már viszonylag korán megjelentek különböző demók és zeneszerkesztő
programok, amik kihasználták a hangmintavisszajátszás lehetőségét.
Itt nem akarok felsorolni kiemelkedő
darabokat, mert őszintén megvallom nem igazán érzem jelentősnek ezt a
kategóriát. Aki kíváncsi az ilyesmire annak ajánlom figyelemébe a Plus/4 World demo/digi kategóriáját, ahol az ég világon mindenféle digi zenét és sok mást is megtalál.
Amit viszont szeretnék megemlíteni: Nagy
Tamásnak (TomHX) köszönhetően még beszélni is megtanult kedvenc gépcsaládunk, annak ellenére, hogy a csak prototípusként létező Commodore v364 sosem jelent meg ezzel a beépített szolgáltatással.
(*Bocs. Hi, Chronos! 😆)
A digitális hangminta nem különösebben
összetett technikai megoldás. Lényegében megfelelő időközönként megmérjük a
hangerősséget ügyelve a precíz ütemezésre (mintavételezési frekvencia), majd a
mért analóg adatot letároljuk egy bizonyos skálán besorolva egy konkrét szintre
(kvantálás). Az utóbbit általában azzal jellemzik hány bitet használunk a
tároláshoz.
Mondanom sem kell mindkét paraméter esetében minél
nagyobb ez az érték, annál közelebb áll a tárolt hang az analóg forráshoz.
Hogy legyen valamilyen viszonyítási alap a
posztban leírtakhoz, íme három minőségi kategória jellemzői:
- Hangstúdiók legalább 96 KHz mintavételezési
frekvenciával és 24 bit kvantálással dolgoznak. (Van ennél jobb minőségszabvány
is.)
- Audió CD 44,1 KHz mintavételezési frekvenciával és
16 bit kvantálással rögzíti a hangot.
- Commodore Amiga alap hardver (Paula chip) minden trükközés nélkül 22 KHz és
8 bit felbontással képes visszajátszani a hangot (4 csatornán párhuzamosan).
Hangkezelésben jártasak szerint a
mintavételezési frekvencia fontosabb, mint a kvantálás. Tehát ha gyorsabban
tudjuk a digitális hangot visszajátszani azzal jobb eredményt kapunk, mintha
nagyobb felbontású lenne egy-egy hangminta. Ezen lehet vitatkozni, tény
viszont, hogy a nagyobb sebesség tisztább és élesebb hangot eredményez,
köszönhetően az így visszaadott felharmóniának a hangokban.
Viszont a kvantálásnál elvesznek bizonyos
részletek az analóg hangból és ezek a hiányzó darabkák zajként és torzulásként
hallhatóak a lejátszáskor.
Tehát maradjunk annyiban, hogy ki kell
facsarni a hardverből, amit csak lehet. 😅
Plusz négy Hertz szalámi
Mire is képes a Plus/4 valójában digitális
hangkeltés témakörben? Ez már egy összetettebb kérdés, vizsgáljuk meg a két
alapvető paramétert!
Frekventálás
Mintavételezési frekvencia megvalósításában
fontos a precíz ütemezés. Ehhez a TED beépített hardver időzítőit érdemes
használni. Van belőle három, de lényegében az első hasznos főleg, ami képes
ciklikusan megszakítást generálni a program által kért sűrűséggel.
A megszakítás rutin átveszi a processzort,
bármit is művel az épp és beállítja a hangerő regisztert a következő hangminta
értékre, aztán a processzor visszatér a megszakított művelethez.
Az időzítők frekvenciája: 886,7 KHz PAL gépeken, 894,9 KHz NTSC gépeken.
Azaz, ha azt szeretnénk, hogy CD minőségű
hangfrekvenciájával kapjuk a megszakításokat, akkor 886,7/44,1 ~= 20 lépésre
kell beállítani az időzítőt. (Általában hexadecimálisan hivatkoznak erre az
értékre, decimális 20 az hexadecimális $14.) Természetesen a Plus/4
ehhez nem elég gyors, bár el lehet érni ezt az értéket, de akkor nagyon kevés
idő marad bármilyen feldolgozásra.
A másik probléma a tárhely: még tömörített
adatként is brutális mennyiség egy 8 bites gépnek másodpercenként 44 100
hangmintát eltárolni. (Gyors fejszámolás: tegyük fel, hogy csak 3 bit egy minta
– 44 100*3/8 = 16 537,5 byte másodpercenként, tehát 4 másodperc és
tele a 64 KB.)
Ennek köszönhetően a legtöbb digi zene 5-8 KHz
körüli mintavételezési frekvenciát használ kompromisszumként a minőség
rovására.
 |
Letiltott képernyő és színes csíkok, Blue Keeps demó (forrás: Yape) |
Sajnos
van egy harmadik probléma is: ha a képernyőkezelés be van kapcsolva akkor a
kereten belüli részen (tehát ahol a képernyőtartalom valóban megjelenik) a processzor sebességét jelentősen visszaveszi a
rendszer, hogy ne akadályozza a TED RAM hozzáférését. Ennek köszönhetően
nagyobb frekvenciák eléréséhez a képernyőt kikapcsolják és maximum szép színes
csíkokat látunk ugrándozni, amit a keret színének váltogatásával érnek el.
Még nagyobb frekvenciát lehet elérni NTSC
képernyőszabvány bekapcsolásával. Ebben a módban a processzor órajele is nagyjából a negyedével magasabb, ezért összességében gyorsabban működik a gép. Viszont a
PAL szabványú megjelenítőkön ilyenkor csak zavaros futó kép látható, ezért csak
a hang miatt érdemes megjelenítési szabvány módot váltani.
Kvantumugratás
Mi a helyzet a kvantálással? A bevezetőben
említettem, hogy a hangerőt 9 fokozatban lehet állítani, ez kerekítve 3 bites
felbontást jelent.
Ha összevetjük akár csak az Amiga
lehetőségeivel (8 bit), elég sovány malac vágta. Szerencsére van remény több hangerőszint
kicsikarására, bármilyen hihetetlennek hangzik is.
Hogy pontosan hogyan működik az extra hangerőszintek
elővarázslása abba nem szeretnék belefolyni, a lényeg, hogy a két hangcsatornát
ultrahang frekvenciára állítva bizonyos kombinációikból fél hangerőszintek is
kijönnek. Ezzel a trükkel nagyjából 5 bitre lehet növelni a felbontást. Erről
többet olvashattok itt és itt (angolul).
A hangerőszint növelő trükköt néhány jobb
minőségre törekvő digi hangminta visszajátszó demóban is alkalmazták. Azt nem
sikerült kiderítenem kinek az ötlete volt ennek az alapja.
Ajánlom
Csabo két demóját, amikben kihasználja ezeket a lehetőségeket:
Vancouver
2010 és
2020 by the Numbers. Az utóbbiban
hallgathatjátok meg a legjobb minőségű digi zenét, amit Plus/4-re eddig
előállítottak (5,4 bit és 27.7 KHz). 😲
Csak tech demóként létezik, de érdekes próbálkozás Pigmy
3 csatornás digi zene lejátszója. Viszonylag bonyolult kezelni, mert soha nem lett összeállítva egy kiadható formátumra, külön kell a lejátszót és a hangmintákat betöltögetni. Sok sikert a kipróbáláshoz!
Kék tartás-hatás
1990-et írtunk és a világ forrongott, falak
dőltek le, politikai átrendeződés folyt a javában. De azt senki nem sejtette,
hogy egy nagyon jelentős változás készül betörni a Plus/4 zenei világába is
ebben az évben.
Augusztus, a nyári szünet vége felé közeledett
és az Anarchy nevű csapat romjaiból frissen alakult Vortex egyik tagja, Biánki Brúnó (alias WIT) kiadta Blue
Keeps című egy lemezoldalas demóját.
A demó összesen hat partból (különálló demó
egység) állt, nem volt igazán jelentős, az effektek és a design az akkori
időszakra jellemzőek. Viszont két partban atombomba robbant. Valószínűleg a
készítő se gondolta, hogy ekkora jelentősége lesz majd találmányának.
Abban a két partban C64-es zenéket
hallgathatunk meg. Ez akkor már nem volt annyira nagy újdonság köszönhetően a
frekvenciakonverter elterjedésének. A zenék itt is az eredeti C64-es lejátszóval
működtek, viszont a konvertált hang nem a Plus/4 oszcillátorain keresztül
szólalt meg, hanem valós időben dinamikusan generált hangmintaként játszotta le
a konverter.
Valódi három hangcsatorna, valódi fűrészfog és
háromszög hullámformák, de ami talán a legegyértelműbb extra: volt basszus! Bár
a zenehallgató partban a képernyő ki volt kapcsolva, ahogy korábban a digi
zenéknél ez gyakori volt, de ennek ellenére is sokak álla a padlóról pattant
vissza.
És ezzel megszületett az úgynevezett digi
konverter (vagy angolosan wave converter).
A hang messze nem volt tökéletes, az alacsony
mintavételezési frekvencia miatt eléggé mosott és zajos az eredeti C64
hangzáshoz képest. A digi zenéknél emlegetett időzítő hexadecimális $A0-ára
volt beállítva, ez nagyjából 5,5 KHz. De még így is messze túlteljesítette
amire bármilyen frekvenciakonverter valaha is képes volt.
Van azonban egy jelentős hátránya az új csoda
konverternek: lényegében a processzor mással nagyon nem ér rá foglalkozni lejátszás
közben, olyan mértékben leköti a valós időben mixelt három csatorna
előállítása. Nem véletlen, hogy a Blue Keeps másik emlegetett partjában
ugyan be volt kapcsolva a képernyő, de az álló grafikán kívül mindössze egy
scrollra futotta.
Mindenesetre az ötlet remek volt, a
kivitelezésen pedig lehetett javítani. Ezért a digi konverter, mint eszköz
megjelent a lehetőségek között. A kihívás minél jobban kihasználni a kevés
processzoridőt, ami a zenelejátszás mellett megmaradt.
A digi konverternek szintén készült több
változata, amik valamelyik aspektusain kívántak javítani. Coby-TCL változatát sokan használták, kicsit későn jött, viszont annál jobb
minőséget produkált TLC konvertere.
Ajánlom
Tarzan demóját, ami
Gomangani címmel jelent meg. Az utolsó partban 5 különböző digi konverterrel
hallgathatjuk meg ugyanazt a zenét. Köztük a
Tarzan
Converterrel is, ami extrém magas frekvencián üzemel (hexadecimális
$
38, azaz 15.8 KHz), de egyszerre csak 2 hangcsatornát kezel. Később
Ceekay javított rajta, hogy mindhárom
csatornát kezelje.
Magad uram, ha szolgád nincs
Bár a SID zenék így-úgy visszajátszva
megjelentek szinte minden demóban és (újabb fejlesztésű) játékban, de a hangzás
bizony még mindig messze alulmaradt az eredetihez képest. A digi konverter
pedig végleg nehézkesen használható a túlzott processzoridő igénye miatt.
Ha már a gép tervezői nem adtak megfelelő
hangot, akkor nincs más hátra, saját kézbe kell venni az ügyet. Nyilván ez a
gondolatmenet futhatott végig azon mérnökök agyán, akik hardverfejlesztésre
adták a fejüket és SID bővítő kártyát készítettek Plus/4-hez.
Ma már sok különböző megoldás létezik SID chip
illesztésére Plus/4-hez, hogy ezekhez mennyire lehet hozzájutni az már egy
árnyaltabb kérdés. Mindegyik hardverkiegészítő hasonlóan működik: a SID chip
regisztereit a Plus/4 memória egy bizonyos részén elérhetővé teszik és ezzel az
eredeti C64-es zenelejátszó közvetlenül a SID chipet programozhatja fel.
Van olyan kártya, amelyiknél ez a regisztertartomány
ugyanoda kerülhet, ahol az eredeti C64 hardver is elhelyezi. Ezzel
lehetséges, hogy a frekvencia- és digi konvertert alkalmazó programokból közvetlenül
átvegye a lejátszott eredeti C64 zenét, majd a Plus/4 hangját letiltva
tökéletes minőségben szólalhat meg a zene.
Vannak olyan programok, amik kifejezetten SID
kártya támogatással készültek. Ezek feltételezik a hardver jelenlétét és vagy
részben, vagy teljes egészében rá hagyatkoznak. A Plus/4 a SID hangját hozzákeveri a TED hangjához, és így három plusz két hangcsatorna áll rendelkezésre.
Szinte összes 2000-es években készült demo csak SID kártyával ad hangot. Később, ahogy más platformokon is, az alap hardverből maximum kifacsarása lett inkább érdekes és ezzel a hardver bővítések jelentősége eltörpült.
Az első SID chip illesztést nem magyarok
készítették (lásd
Solder-féle kártya), de mindenképp szeretném megemlíteni, hogy
Csory és
BSZ +
Hifi is elkészített egy-egy hardver illesztőt. A különböző SID hardverekről
a
Plus/4 World-ön találhatsz több információt
(angolul).
A Plus/4 emulátorok közül több is képes SID kártya emulálására, amihez egyszerűbb hozzájutni, mint a hardver verzióhoz.
Aki SID-et szeretne valódi gépéhez, annak pedig a Sidekick kártyát ajánlom, ami Raspberry PI-alapú, ezért könnyebb hozzájutni. Bár a SID csak szoftveres emuláció, de abból egyszerre kettő is lehet.
Köszönet BSZ-nek, Siznek és Csabonak a segítségért!