4 csatornás zenelejátszó TVC-re | 2. rés ...

4 csatornás zenelejátszó TVC-re | 2. rész

Aug 15, 2024

imageHa lemaradtál róla, az első részt ITT olvashatod el.

EMLÉKEZTETŐ

Az első részben számba vettem:
- a hangkeltés lehetőségeit
- a csatornák keverésének elvi lehetőségeit, azok hátrányait, nehézségeit
- végül, egy egyszerű gyakorlati tervet vázoltam fel, szimulált grafikonnal tesztelve

HOGYAN TOVÁBB?

Ahogy írtam, a következő lépés a mátrix legenerálása, és a kód megírása.

Az előző részben írtam, hogy egy 16*16-os, 2 dimenziós adatmátrixban lesznek letárolva az előre kiszámolt értékek. Sokkal gyorsabb megoldás, mint azt a nagyon bonyolult matematikai képletet megírni assemblyben. Nem beszélve arról, hogy minden egyes keverésnél le kellene futnia a hosszú, és ezáltal lassú kódnak. Ráadásul háromszor.

A MÁTRIX LEGENERÁLÁSA

A mátrix mérete, és felépítése a két hangcsatornából adódik. Az egyik koordináta az egyik csatorna, a másik koordináta a másik csatorna. Mérete pedig a hangerőből adódik, ami 0-tól 15-ig terjed, tehát 16 különböző értéket vehet fel.

Ebből adódik a 16*16-os mátrix, ami 256 variációt ad. Ez 256 bájtot jelent. Elhelyezkedése a memóriában szokásosan, az adott sorok egymás után kerülnek letárolásra.

Legenerálását legkönnyebben egy excel segítségével tudjuk. Az alábbi képen a táblázat első és utolsó 32 sorát látjuk. Nézzük az oszlopok jelentését:

  • Az NO jelzés alatt, 0-tól 255-ig tartó variációk száma látható.

  • Az A csatorna jele. 16 soronként nő egyet, ez a mátrix sorát fogja jelölni.

  • A B csatorna jele, 0-15-ig, majd új sorként újra 0-15-ig, egészen a végéig. Ez a mátrix oszlopa.

  • A DC a Dinamika Compressio. Egy kompenzációs érték, ami a csatornák pillanatnyi értékéből ered.

  • A Z pedig az a végeredmény, ami az A és B csatorna DC-vel kompenzált, limitált értéke.

image

A táblázat tartalmát diagrammon szemléltetve ez tárul a szemünk elé:

image

A kék és zöld vonal mutatja a két csatornát. Jól látható a periodikusság.
A piros vonal a dinamika kompenzáció, ami egy Fresnel lencse metszetéhez hasonlít a legjobban.
És végül, a fekete vonal a két jel eredőjét mutatja. Egy furcsa, logaritmikus görbéket tartalmazó szimmetrikus alakzat, amit némileg a mátrix képén is látni.
Nos, ez az a dinamikusan kiegyensúlyozott, az emberi fül logaritmikus hallásának megfelelő, a túlvezérléstől limiterrel védett digitális keverés "tökéletes" eredménye. Csak kár, hogy 4 bites.

A KEVERŐ KÓD

Amikor össze keverünk két jelet, akkor az egyik csatorna jelének az értékét szorozzuk 16-tal, ez fogja megadni a mátrix adott sorát, és hozzá adjuk a másik csatorna jelének az értékét, ami pedig a mátrix oszlopát határozza meg. A kapott érték lesz a mátrix adott cellájának a pozíciója. Ezt a számot hozzáadjuk a mátrix memóriában elfoglalt kezdőcíméhez, és már olvashatjuk is ki az eredményt. Ha a mátrix a memóriában a 256-os blokkhatáron kezdődik, akkor a 16 bites címzéskor a felső bájtnak megadjuk a blokk számát, majd az alsó bájtnak a számolt mátrix pozíciót. Nézzük meg ezt kód formájában. Az RLCA bitrotálást végez balra, ami kétszeres szorzást eredményez. Lentebb azokat a szorzási tényezőket tüntetem fel, amik az egymás utáni láncolás eredményét mutatják.

Az A regiszterben az 1-es csatorna jele, a B regiszterben a 2-es csatorna jele.
RLCA - Az 1-es csatorna jelét 2-vel szorozzuk
RLCA - Az 1-es csatorna jelét 4-gyel szorozzuk
RLCA - Az 1-es csatorna jelét 8-al szorozzuk
RLCA - Az 1-es csatorna jelét 16-al szorozzuk
ADD A,B - Hozzáadjuk a 2-es csatorna jelét
LD H,$20 - A mátrix ez esetben a $2000 címen kezdődik, ez a H regiszter lesz
LD L,A - Az A regiszterben a mátrix cella pozíciója, amit az L regiszterbe teszünk
LD A,(HL) - Az A regiszterben megkapjuk az eredményt a HL által mutatott cellából

Az A regiszter értékét letároljuk egy átmeneti címen, majd a fenti rutint megismételjük a 3. és 4. csatornával is. Az ott kapott eredmény az A regiszterben lesz, amit a B regiszterbe teszünk, és az A regiszterbe visszatöltjük az átmeneti helyről az 1. és 2. csatorna eredményét. Végezetül, ezt a két részeredményt is összekeverjük a fenti kóddal, és kész is vagyunk.

Szimbolikusan így írható le a keverés folyamata: Z=(A+B)+(C+D)

A kapott végeredményt kétszer balra toljuk, hogy a hangregiszternek megfelelően legyenek a bitek, illetve hozzá adjuk a kívánt grafikai üzemmódot, amit egy memóriacímen is tárolhatunk, ha változtatni akarjuk időnként, s az eredményt kiírjuk a portra.

HOGYAN TOVÁBB?

A cikkem következő részében a lejátszó megvalósításáról olvashatsz majd, illetve már teszteket is hallgathatunk.

Köszönöm a figyelmet!

Ha tetszett a cikkem, é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

Altro da NICKMANN Studio

PrivacyTerminiRapporto