Sunday, 3 January 2021

Hang és zene átírása az Enterprise és a TVC basic-je között

 

Néha váratlan szituációkba keveredhet az ember, amikor Enterprise-ról TVC-re, vagy TVC-ről Enterprise-ra kell átírnia olyan basic programot, melyben hang és zene is van. Ilyenkor nem szabad kétségbe esnünk! Először is inkább nézzük meg az eltéréseket a két gép hangzásbeli képességei között:
 
1. Az ENTERPRISE 3 négyszögjelcsatornát és 1 zajcsatornát képes egyszerre megszólaltatni, és a csatornák között különböző effektek (gyűrűmoduláció, alul- és felüláteresztő szűrő) is használhatók. TVC-n egyetlen csatorna van.
2. Enterprise-on háromféle torzítás használható, TVC-n ilyenre nincs lehetőség, bár bizonyos trükkel elérhetünk torzított hanghoz hasonló hatást TVC-n is, lásd lejjebb.
3. Az Enterprise sztereo hangot képes kiadni, a TVC monót.
4. Az Enterprise-on a hangerő finomabban állítható: 64 hangerőfokozat van (ami 256 értékre van elosztva, így egymás melletti 4 érték ugyanazt a hangerőt jelöli), TVC-n 16 hangerőfokozat írja le a hang erősségét. Enterprise-on a 64 fokozat külön-külön értendő a jobb és a bal csatornára, és mind a 4 Dave-csatornán külön-külön megadható az értéke.
5. Enterprise-on a hangpuffer képes a memóriába letárolni a hangokat, amiket meg kell szólaltatni, így előre kiadott parancsok alapján szólhat a háttérben hang, miközben a gép például rajzolgat. TVC-n mindig a megszólaltatás pillanatában kell megadni a parancsot ehhez, így például rajzolgatás közben SOUND utasításokat is be kell tenni, azok nem adhatók meg a rajzolás előtt. A TVC hangpufferébe mindössze egyetlen hang fér, és az kitart addig, ameddig a hang időtartamában meg van adva, így kb. max 5 másodpercig szólhat egyetlen hang, míg a gép például rajzol a képernyőre.
6. Enterprise-on a hangerő és a hangmagasság egy hangon belül burkológörbékkel szabályozható, TVC-n erre nincs lehetőség, bár másfajta módszerrel elérhető ehhez hasonló hatás, például FOR-NEXT ciklussal.
7. Enterprise-on többféle hangmagasság érhető el. Elérhetők mélyebb hangok, mint TVC-n, ezen kívül a magasabb hangok között is finomabb hangmagasság-különbségek adhatók meg, és magas hangokból is több van.
8. A TVC basicjében alapból rövidebb hangokat is meg lehet adni, mint Enterprise-on, és ezeket az igen rövid hangokat gyorsan lehet váltogatni egymás után, ami Enterprise-on nem oldható meg alapesetben. A TVC-nek ez a funkciója próbál kárpótolni minket azokért, amik Enterprise-on nem érhetők el.
9. TVC-n az egyetlen utasítással megszólaltatható leghosszabb hang kicsivel több, mint 5 másodperc, míg Enterprise-on egyetlen utasítással több percnyi hosszúságú hang is megszólaltatható. Ennek a gyakorlatban nincs igazán haszna, jelentősége.

Hogyan festenek ezek a különbségek a gyakorlatban?

A hangkeltés a két gépen igen hasonló. Mindkét gép basic-je a SOUND utasítást használja. A paraméterek elnevezése is hasonló, de működésük már többé-kevésbé eltér.
A TVC sound paraméterei:

PITCH, DURATION, VOLUME, ; (pontosvessző)

Az Enterprise sound paraméterei:
 
PITCH, DURATION, LEFT, RIGHT, INTERRUPT, SOURCE, SYNC, ENVELOPE, STYLE

A pitch és a duration a két gépen ugyanazt a hangtulajdonságot adja meg: pitch a hangmagasságot, duration a hanghosszt. A volume a hangerőt jelöli, ennek EP-n a left és a right felel meg együtt, külön a két csatornára. A ; (pontosvessző) azt jelenti, hogy ne legyen interrupt, ne szakadjon félbe az előző hang, míg az EP-s interrupt pont ennek az ellenkezője, tehát azt kell külön megadni, ha az előző hangot meg akarjuk szakítani. A source és a sync a több hangcsatorna kezeléséhez kell EP-n, az envelope-pal burkolót adhatunk meg, melyet előre már definiálnunk kell, a style segítségével pedig torzítások, valamint gyűrűmoduláció és szűrők érhetők el.

DURATION
A két gépen leginkább hasonlóan paraméterezhető paraméter a DURATION. Mindkét gépen 1/50 másodpercben adja meg a hang hosszát, így az itt megadott érték elvileg ugyanazt jelenti mindkét gépen. TVC-n maximum 255 lehet az értéke, Enterprise-on több ezer is lehet az értéke, de erre általában nincs szükség. Viszont a DURATION 1 érték TVC-n rövidebb hangot eredményez, mint EP-n, így több, eltérő hangmagasságú DURATION 1 érték egymás után TVC-n sajátos hatású, amit viszont EP-n nem tudunk egykönnyen elérni. Az ilyen rövid hangokból előálló hangzás többek között hangeffektekhez lehet jó TVC-n, és némileg hasonló hatás is elérhető így, mint Enterprise-on torzításokkal.
Fontos különbség, hogy TVC-n a DURATION 0 egy 0 hosszúságú hangot eredményez, magyarán nem szól semmi. Enterprise-on a DURATION 0 viszont az elérhető leghosszabb hangot eredményezi. (Erről már volt szó egy 2018-es számban, A sound utasítás rejtelmei című cikksorozatunkban.)

PITCH
Mindkét gépen a hangmagasság paraméterezhető vele, azonban teljesen máshogy. A legmélyebb elérhető hangot mindkét gépen a SOUND PITCH 0-val érhetjük el, ami EP-n mélyebb, mint TVC-n. A legmagasabb hang EP-n SOUND PITCH 127, TVC-n pedig SOUND PITCH 4094. (TVC-n a 4095 használható szünetnek, ilyenkor egyáltalán nincs hang. Enterprise-on kifejezetten ilyen érték nincs, bár a 127 és annál valamivel kisebb számok is olyan magas hangot jelölnek, amit gyakorlatilag nem hallani.) Enterprise-on tört PITCH értékek is megadhatók, TVC-n nem, de Enterprise-on sem fog minden tizeddel nagyobb szám a nála kisebbnél magasabb hangot adni, sőt a magas hangok tartományában több egész érték is ugyanazt a hangot jelöli EP-n.
Enterprise-on a normál C hangnak PITCH 37 felel meg, TVC-n 3349. EP-n eggyel növelve a PITCH értéket egy félhanggal magasabb hangot kapunk minden esetben, de tört értékek is megadhatók. TVC-n bonyolult képlettel adható meg a fél hanggal magasabb hangot jelölő szám. Zene átírásánál gyakorlatilag az EP-s PITCH értékekhez hozzá kell rendelni a TVC-s PITCH értékeket, ami nem bonyolult, de még egyszerűbb midiben szerkeszteni majd konvertálni zenét mindkét gépre.
 
Burkológörbék (envelope)
Az ENVELOPE NUMBER-t nem ismeri a TVC.
 
Mivel hangpuffer TVC-n gyakorlatilag nincs, a CLEAR SOUND-nak TVC-n nincs is igazán értelme, bár az utolsó hang tovább szól, miközben már tovább futhat a program. Ez megszakítható egy tetszőleges SOUND utasítással, így a CLEAR SOUND-nak leginkább megfelelő utasítás TVC-n egy SOUND DURATION 0 lehet.
- A SOUND DURATION 0 TVC-n tehát megszakítja az éppen szóló hangot. Tehát egy SOUND utasítás nem várja meg az előző SOUND lecsengését, hanem megszakítja azt. Hogy ne szakítsa meg, pontosvesszőt kell használni, például: SOUND; PITCH 3349,DURATION 25. Így, ha nem adunk meg pontosvesszőt, az olyan, mintha EP-n az INTERRUPT paramétert is megadnánk a SOUND-nál.
- A hangerő: TVC-n a VOLUME paraméterrel adható meg 0 és 15 közötti számmal: 0, ha egyáltalán nincs hang, 15 a leghangosabb. Enterprise-on a LEFT és a RIGHT paraméterrel adható meg külön-külön a  jobb és a bal csatorna hangereje, ez 0 és 255 közötti szám lehet.
Ha egyik gépről a másikra átírunk egy basic programot, akkor a  hangot legcélszerűbb elölről írni. Zenénél az egyes zenei hangoknak megfelelő pitch értékeket kell kicserélni (Enterprise-on könnyen kiszámolható, hogy egy adott szám milyen zenei hangot jelöl, míg a TVC gépkönyvében megtalálhatók az egyes zenei hangokhoz tartozó pitch értékek), hangeffekteknél pedig az adott gép képességeihez lehet igazítani a hangzást, például EP-re átírásnál torzítást, gyűrűmodulációt, sztereó hangot érdemes megszólaltatni, TVC-n pedig az egymás utáni rövid hangokkal és FOR-NEXT ciklusokkal lehet trükközni. Ha Enterprise-ról TVC-re kétszólamú zenét írunk át, DURATION 2 értékekkel felváltva meg lehet szólaltatni nagyon gyorsan egymás után a két szólam hangjait, ami egyetlen csatornán, jellegzetes hangzással játssza a két szólamot egyszerre. Az egyik szólam számára DURATION 1 is megadható, így sajátosabb lehet a hangzás.
Érdekesség: A hangmagasság és hanghossz paraméterezésére Bruce Tanner alkotta meg a PITCH és DURATION elnevezéseket. Az volt a cél, hogy a basic minél emberközelibb legyen. Valóban többet mond mindenkinek ez, mint más gépeken a hangkeltéshez használatos utasítások paraméterezése: a paramétereket egyszerűen vesszővel kellett elválasztani egymástól a CPC és a C16 ill. Plus/4-es gépeken, például SOUND 2,300,50. A spectrumos BEEP után is egymás után vesszővel elválasztva adhattuk meg a hanghosszt és a hangmagasságot, míg C64-en a POKE utasítással kellett a zenészeknek zöld ágra vergődniük.