2023/03/28

Köcsögdudától a filharmonikusokig

„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.

Musics from 64
(forrás: Plus/4 World)
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.

2020 by the Numbers
(forrás: Plus/4 World)
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.

Blue Keeps
(forrás: Plus/4 World)
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.

Gomangani
(forrás: Plus/4 World)
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.

BSZ-Hifi SID kártya
(forrás: Plus/4 World)
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!

Nincsenek megjegyzések:

Megjegyzés küldése

Népszerű posztok