Welcome, Guest. Please login or register.


Author Topic: Magyar népzene SOUND paranccsal (Read 2338 times)

Offline Tuby128

  • EP addict
  • *
  • Posts: 1448
  • Country: hu
Magyar népzene SOUND paranccsal
« on: 2022.December.06. 21:04:55 »
(English version below)

Írtam egy basic programot ami a szolmizációs hangokat lejátsza. Megkértem a feleségemet, hogy segítsen valami dalt leszolmizálni, mert ô ehhez jól ért.

A "Kis kece lányom" dalt választotta.
A progamot megpróbáltam mindenütt kommentálni, hogy érthetô legyen, mit akarok.

Volt néhány problémám, amit nem tudtam megoldani, mert már nagyon régen nem használtam az enterprise számítógépet.
1. nem tudom hogy lehet két hang közé rövid szünetet tenni. Az EP bepakol mindent a pufferbe, és egymás után lejátsza. Két hang közt nem tudom hogy lehet szünetet csinálni. Most csaltam, és egy nem hallható magassgú (pitch 120) tettem be közé.
 Most hogy így bele gondolok, talán erre való az envelope utasítás?
2. A hangpuffer mérétét megpróbáltam a program elején lecsökkenteni, úgy hogy bezárom a hangcsatornát, átparaméterezem, majd megnyitom újra. Sajnos nem történik semmi.
Azt szerettem volna, hogy az éppen kírt hang legyen hallható, de a puffer mérete miatt nem lehet.
 Ha lenne olyan parancs, hogy ellenôrizhetném, mennyi hang vár a pufferben, akkor valahogy megvárhatnám, de ilyen parancsot nem ismerek.
3. szerettem volna a "8" számból print kiíráskor "1/8"-at csinálni, de már elfelejtettem hogy kell. C nyelven printf("1/%d",8) lenne.
 ha azt írom be, hogy
print "1/",8
akkor a betûk nagyon távol lesznek egymástól. Most így dereng a "print using" parancs, de már elfelejtettem hogy kell használni
4. RENUMBER parancsot akartam használni, nem 100 kezdéssel, de sem a RENUMBER AT 500 sem a RENUMBER FROM 500 nem érthetô a gépnek.
+1. Hogyan lehet elkerülni, hogy a READ paranccsal olvasott puffer ha elfogy, akkor ne legyen hibaüzenet?

A 3db EP felhasználói kézikönyvemet valahol elkevertem, nem találom. Így telefonon próbáltam megnyitni a PDF fájt, de nagyon nem tudtam navigálni.

REM :UK
I wrote a basic program, which can play solmisation sounds. I asked my wife to help me fill the music sheet in BASIC DATA blocks, because she studied music.

She did choose the "Kis kece lanyom" hungarian volks music.
I tried to comment every element of the basic program, thus can be understandable for others.

I had some problems, which I was not able to solve, because I have not been use the EP long ago.
1. I don't know, how to place vers short pause between sounds. The EP queues all "waiting sounds" in a buffer, and plays immediately after each other. Here I cheated, i put a sound with very high "inaudible" pitch (120) inbetween.
 If I try to remember, maybe for this reason the "envelope" command was made?
2. I tried to reduce the sound buffer size. I closed the channel, changed the size and opened it again. Unfortunately I did not noticed any change.
My wish was, that the printed sound should be the same, what we can hear. But because the buffer is too big, it does not happen.
 If there would be a command to check the buffer emptyness, then I could wait until it finishes a sound, but I don't know this kind of command.
3. I wanted to print "1/8" instead of "8", but I already forgot how to do it. In C language the command
printf("1/%d",8)
would do that. If I use the Basic command
print "1/",8
there is space between them.
I remember there was a "print using" command, but I already forgot, how to use it.
4. I wanted to RENUMBER some lines, from 500, but the "RENUMBER AT 500" and "RENUMBER FROM 500" was ***Not understood.
+1. How can I avoid, if the READ command finished all DATA statement, the BASIC stops with error message?

I have 3 pieces EP User manual book somewhere, but I was not able to find it. I tried to download the PDF onto my Phone, but it was very inconvienient to use.
« Last Edit: 2022.December.31. 16:15:07 by szipucsu, Reason: Túl hosszú témacím lerövidítése »

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
1. nem tudom hogy lehet két hang közé rövid szünetet tenni.
Hivatalosan 0 hangerővel: LEFT 0,RIGHT 0. Időtartama mondjuk DURATION 1. (De, ha nagyon precízek akarunk lenni, akkor az előző hang hosszából 1-et ki kéne vonni, mert sok szünet után elcsúszhat a ritmus, ha például PC-s automata dobgéppel akarod nyomatni a kíséretet, akkor ez kiütközhet.) Ehhez a DATA sorban a SZUN nevű string jó lenne, és a READ után beírod, hogy IF valami$="SZUN" THEN SOUND LEFT 0,RIGHT 0,DURATION 1.
De én anno egyszerűen a 127-es PITCH értéket használtam szünethez.
Szobatiszta megoldás még, ha egy envelope numbert létrehozol, ahol az elején vagy felfut, vagy lecseng gyorsan a hang, így az egymás melletti azonos hangok nem folynak egybe.

A SET SOUND BUFFER nem azt a hangbuffert kezeli, amire gondoltál, hanem az envelope-ok számára fenntartott hely méretét lehet vele állítani. Állítólag semmi más elől nem veszi el a helyet az se, ha maximális méretű, így akár mindig megadható lehetne a maximális 255 az alap 20 helyett, hátha teljesen véletlenül, de valami rejtélyes oknál fogva kell.
A bufferes problémád kiküszöbölésére más módszer kell. Például, nem a DURATION-ben adod meg a hosszt, hanem a PRINT után FOR ciklussal addig várakoztatod a gépet, ameddig a hang szól. Valami ilyesmi:

SOUND INTERRUPT, PITCH akármennyi, DURATION 200
PRINT hang neve, oktáv, hanghossz
FOR VARJUNK=1 to hanghossz*200
NEXT

Ha kevés az adat, a READ IF MISSING EXIT DO:A$,B,C vagy valami hasonló kell. De te nem használsz ciklust, hanem GOTO-t, ahogy látom, így ez most nem megoldható. Még a READ elé egy új sorban a WHEN EXCEPTION USE valami, a READ utáni sorban END WHEN nem engedi a hibát előbuggyanni, de ehhez kell a program végére pl. ez:

Code: [Select]
1000 HANDLER valami
1010   PRINT "Na, mi van, most nincs hiba!"
1020   END
1030 END HANDLER

100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Magyar népzene SOUND paranccsal
« Reply #2 on: 2022.December.06. 22:55:32 »
Kicsit bütyköltem vele, valami ilyesmi lenne. Csináltam neki ENVELOPE-ot, amitől kicsit sztereó is lett. Viszont mintha a ritmus nem lenne teljesen jó, de lehet, csak énnekem veszett el a ritmusérzékem, ami nem is volt. Ha tényleg nem jó a ritmus, akkor vagy a sok számítás a ludas, amivel a pitch értéket kiszámolja, és ez elviszi az időt, vagy a két FOR ciklusom. Azért lett 2 darab FOR ciklus a várakozásra, mert amikor csak egy volt, fura volt a ritmus, de most is fura.
Egy-két sor hozzáadásával a hangot sokkal érdekesebbé lehetne tenni, hogy ne sima négyszögjel legyen, hanem egészen SID-es hangzású.
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Magyar népzene SOUND paranccsal
« Reply #3 on: 2022.December.06. 23:39:38 »
Nagyjából rájöttem, mi lehetett a gond a ritmussal, de nem értem az okát. Nem az kell, hogy kétszer fusson le a várakoztatási ciklus kétszer olyan hosszú hang esetén, hanem hatványozni kell a hanghosszt. Ez érdekes, mert a kétszer akkora szám a várakozásnál és a DURATION-nél is kétszer akkora, szóval lehet, hogy egy fekete lyuk közeledik a Föld felé, ezért hülyült meg a téridő kontinuum, és jobb esetben csak a Naprendszernek, rosszabb esetben az egész Galaxisnak kampec. De még mielőtt ez bekövetkezne, talán még ki tudjuk próbálni a népdalgeneráló szoftver új verzióját.
A hangzáson is pofoztam egy kicsit, gyűrűmoduláció nélkül az Enterprise zene olyan, mint a Fidesz Orbán Viktor nélkül.
Közben az is kiderült, hogy ha SYNC-kel össze van kapcsolva egymással a két csatorna, akkor az INTERRUPT paraméter fabatkát sem ér, ez is fura, mert ha mindkét csatornára beteszem az interruptot, működnie kéne. Helyette a release nevű rafinériát pakoltam bele az envelope numberbe, a SOUND-nál meg DURATION 1-et adtam meg, így a még szóló, de mégsem szóló hangot megszakítja a következő hang, ha tetszik, ha nem. A két sound-nak két külön envelope-t is csináltam, mert sztereó hang nélkül az Enterprise zene olyan, mint a cauldronos néni seprű nélkül.
Megszüntettem a DO-LOOP ciklust, helyette FOR ciklusban olvassa be az adatokat. Elsőre nagyon nagy számot adtam meg a TO után, majd a hiba után kiírattam a ciklusváltozó értékét, abból kivontam egyet, és az került a TO után, így nem kell egyesével megszámolni, hány hang van összesen.
Egész jó ötlet ez a program. Így most hallgatás közben a zene hangjait is tanulmányozhatjuk. Ebből már azt is meg lehetne csinálni, hogy kotta formátumban rakja ki a hangokat. Esetleg a kottát ki is lehessen nyomtatni, ha a másik topikban sikerül életre kelteni azt a nyomtatót.
(Volt egyszer egy basic program, amiben kotta formátumban lehetett egyszerű zenét szerkeszteni. Nem volt tökéletes, de nagyjából működött. Nem tudom, megvan-e valahol. Egy cserepartnerem küldte anno.)
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Magyar népzene SOUND paranccsal
« Reply #4 on: 2022.December.07. 18:52:36 »
3. szerettem volna a "8" számból print kiíráskor "1/8"-at csinálni, de már elfelejtettem hogy kell. C nyelven printf("1/%d",8) lenne.
 ha azt írom be, hogy
print "1/",8
akkor a betûk nagyon távol lesznek egymástól.
Code: [Select]
PRINT "1/"&STR$(8)
vagy egyszerűen:
Code: [Select]
PRINT "1/8"
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos