SINCLAIR ZX81 Sound Digitizer | Hungaria ...

SINCLAIR ZX81 Sound Digitizer | Hungarian

Mar 18, 2023

The English version can be read here.

Előszó

A most közzétett programom eredeti forráskódját 1986-ban írtam. Nemrégiben találtam rá az egyik régi spirálfüzetben. Begépeltem, de nem működött, mert sok hibája van. Sajnos csak ezt az assembly forrást találtam meg, hex kód, vagy BASIC loader sehol. Talán valamelyik kazettámon, vagy másik füzetemben megvan. Mindegy, nekiálltam és kijavítottam. A szegényes, 1 bites monó tudása ellenére is csodaszám volt akkoriban.

Pár év múlva terveztem és építettem egy 2 bites hangdigitalizálót a C64-hez. Annak már szebb lett a hangja, a kétszeres bitmélység, azaz a részletesebb mintavételezés miatt. Több demóhoz is használtam. Még egy sampler alapú DAW-ot is írtam, ami hasonló volt, mint az Amiga sampe módszere, csak 1 csatornán. Ezután építettem egy 4 bites készüléket is (alább látható), de az már csak tesztelve lett, demóhoz/játékhoz semmi sem készült vele. Pedig, a 4 bit már sokkal részletesebb mintavételezést eredményezett, s ezzel jóval tisztább, szebb lett az eredmény. De "a sors keze" úgy hozta, hogy lett egy Amigám, és akkor már inkább ahhoz építettem egy 8 bites digitalizálót.

Az 1991-ben épített 4 bites digitalizálóm. Talán rendbe teszem és használom valamihez. Vagy, csak írok róla egy cikket. 🙂

A digitalizálásról

"Digitális jelfeldolgozásnak (angolul Digital Signal Processing, DSP) vagy digitalizálásnak nevezzük azt a folyamatot, amikor egy fizikai mennyiséget valamilyen módon számítógéppel feldolgozhatóvá teszünk."
Wikipedia

Ez azt jelenti, hogy azt a hangot, amit már analóg elektronikus jellé alakítottunk, még át kell alakítani olyan formára, hogy a számítógép tudjon vele mit tenni. Manapság ezt a hangkártyák végzik, de akkoriban még nem léteztek, illetve, csak a hang szintetizálására alkalmas chipek voltak a legtöbb mikroszámítógépben.

Az alábbi ábrákon a kék vonal szimbolizálja az analóg hangot.

  • Az 1 bites (piros), azaz LO/HI állapot nagyon durva eredményt ad.

  • A 2 bitesnél (sárga) már 4 jelszintet tudunk megkülönböztetni. Látható, hogy némileg finomodott az eredmény, kezd hasonlítani az eredetihez.

  • Tovább duplázva a bitek számát, a 4 bit (zöld) 16 jelszintet produkál, ami egész jól leköveti az analóg jelet.


Ez utóbbi megoldást alkalmaztuk a C64-en és más hasonló gépeken. A maguk korában nagyon jónak számítottak. Ezt már csak az Amiga múlta felül a 8 bitjével (256 jelszint), ami szinte a kék vonal lenne. Ahogy egyre jobb lett a technika, nagyobbak lettek az igények, s bevezették a 16 bitet, amit a mai napig használunk a hétköznapi eszközeinkben. Pl.: MP3 lejátszó, mobiltelefonok, TV-k, és a számítógépek hangkártyái is. Ennél nagyobb bitszámot (24/32) csak a stúdiókban használnak.

Amit még fontos tudni, az a mintavételezési frekvencia (azaz, minta/másodperc vagy bit/másodperc), amit álltalában kilohertz (kHz) adnak meg. Itt is annál szebb a felvétel, minél nagyobb az érték.

Megvalósítás a ZX81-en

Az általános CD-nél 44.1 kHz a mintavételi sebesség, 16-bittel. Ami azt jelenti, hogy másodpercenként 88200 bájt kerül feldolgozásra. Ez nemcsak a RAM kapacitást haladja meg, hanem a legtöbb korabeli mikroszámítógép CPU sebességét is. Nincs mit tenni, kompromisszumot kell kötni. Ha azt választjuk, hogy maximum 3 kHz-es hangmagasságot akarunk rögzíteni (ez nagyon sok hanganyagnál elég), akkor 6 kHz-es mintavétel kell. Ez 1 bittel 750 bájt másodpercenként, ami kb. 19 másodperc hanganyagot jelent a 16 kB-os RAM 14 kB-nyi szabad helyén.
Az 1 bites mód választásának okáról alább írok.
Mivel a bitszám adott, így amin tudunk változtatni, az a mintavételi frekvencia, aminek a beállítása meghatározza a rögzített hang hosszát, s ezzel fordítottan arányosan változtatva a hang "szépségét". A felvett hang jellege határozza meg az ajánlott minimális mintavételi frekvenciát.

A program tesztelésénél készített képen jól látni, hogy az 1 kHz-es jel esetén, a nulla állapotban 3-4 mintát vesz. Ez azt jelenti, hogy ezzel a beállítással a maximálisan hibátlanul feldolgozható frekvencia pont a fent említett 3-4 kHz. Nincs más dolgunk, mint egy 3 kHz-es LOW-PASS filtert alkalmazni a digitalizálandó zenére, hogy a felharmonikusok ne zavarjanak be a folyamatba. Ez a beállítás tökéletesen megfelel az emberi beszédhez is.

A további méréseknél látni, hogy a 992 Hz-es jel felvétel után 1010 Hz lesz a lejátszás során. Ez valójában 0,018%-os gyorsulás, ami szinte semmi, de legyünk precízek, ez az eltérés könnyen javítható. Az eltérés abból adódik, hogy a programban a felvételi és visszajátszási utasítások nem ugyanazok. Ha az utasítások M ciklusidejét összeszámoljuk, pár NOP utasítás megoldja.

A program és működése

A ZX81 olyan olcsó kis gépnek készült, hogy semmilyen hangeszköz, még egy beeper sem került bele. Ráadásul még könnyen programozható USER port, LPT port, vagy bármilyen párhuzamos I/O port sem került bele. Van ugyan EXPANSION portja, de arra kicsit bonyolultabb egy digitalizálót tenni, mert még egy I/O modullal kell illeszteni a buszra. 17 évesen még nagy feladat lett volna ez akkoriban a számomra, így marad hát a gyárilag ráépített, a programok tárolására és betöltésére szánt magnó-csatlakozók. Ezzel meg is kaptuk a választ arra, hogy miért csak 1 bites lett a digitalizáló programom.

  • A program lelke a magnó portot olvasó IN A,($FE), és az azt író OUT ($FF) utasítás.

  • A [R/P]LOOP2 ciklus egyenként dolgozza fel az egymás utáni 8 bitet, ami kiadja az 1 bájtot.

  • A [R/P]LOOP1 ciklus a beállított HL regiszter szerint indulva a záró memóriacímig megismétli a fenti ciklust.

  • A mintavételi sebességet az LD B,$16 / DJNZ $FE mikróciklus végzi. A B regiszterbe töltött érték határozza meg a mintavételi sebességet. Ez nem konkrét érték, csak arányszám.

  • A NOP-ok és a programot nem befolyásoló utasítások, csak a már említett pontos szinkronizálás miatt vannak.

Sajnos, a ZX81 a magnó-kimenetet a video-kimenettel közösen használja (ULA chip), így normál kép nem látható a program futása alatt, csak a hangváltozással arányos csíkozását nézhetjük.

Zárszó és letöltés

Természetesen, ma már ez a program csak érdekességként, vagy oktatási példaként funkcionálhat. Bár, a programnak akkoriban sem volt sok haszna, mert a játékhoz használhatatlan, a zenéléshez meg... hát igen.🙂

Ha szeretnél játszadozni vele, itt megtalálod. Minimum 16 kB-os RAM modul szükséges hozzá.

Köszönöm a figyelmet!

Ha tetszett az írásom, és meghívsz egy kávéra, bátorítasz, hogy írjak még hasonló érdekességeket számodra.

Ti piace questo post?

Offri un caffè a NICKMANN Studio

More from NICKMANN Studio