Welcome, Guest. Please login or register.


Author Topic: Zeneprogramozás (Read 410516 times)

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Zeneprogramozás
« Reply #1035 on: 2020.April.02. 20:31:57 »
Közben találtam a gépemen egy programot, ami véletlenszerű "zenét" generál. A dátum szerint 2017 végéről származik. Valószínűleg én írtam, de már nem emlékszem. Itt a fórumon nem találtam, így most itt van. Ez inkább a trance stílus rajongóinak való. Ha túl sokáig zenél, le kell stoppolni és újraindítani. Minden indítás után más lesz a dallam:
[ Guests cannot view attachments ]
A generált dallamokat még el is lehetne képzelni valami trance zeneszámban, némi tuctuc kísérettel és dinamikus szűrőkkel.
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: Zeneprogramozás
« Reply #1036 on: 2020.April.02. 22:26:53 »
Köszi! Kipróbáltam, egész érdekes hangzása volt. Arra gondoltam, hogy ciklus helyett envelope-pal oldom meg, valahogy így:

103 ENVELOPE NUMBER 3;0,63,63,1;.5,-10,0,2;-.5,-5,-5,2;.5,-5,-5,2;-.5,-5,-5,2;.5,-5,-5,2;-.5,-5,-5,2;.5,-5,-5,2;-.5,-5,-5,2;.5,-30,-40,20

De nem ugyanaz lett az eredmény, mert olyankor hajlítja a hangot, nem pedig két különböző hangmagasságot váltogat, de amúgy nem lett rossz a hangzás. De úgy látom, hogy az igazán érdekes hangzásokhoz két csatorna kell szóljon szinkronizálva.

Basicben csak próbálgatom a zenét, majd C-ben szeretném lejátszani. A tört számokkal sincs gond, mert a SOUND: eszközre küldött értékeket fogom eltárolni, oda pedig egész bájtok mennek.
Kotasoft

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Zeneprogramozás
« Reply #1037 on: 2020.April.02. 22:45:32 »
De nem ugyanaz lett az eredmény, mert olyankor hajlítja a hangot, nem pedig két különböző hangmagasságot váltogat
Meg lehet úgy is csinálni, hogy ne hajlítsa a hangot, hanem előbb hallgasson el a hang 0 hangerőre, utána változtassa a hangmagasságot, a következő fázisban szóljon újra. Csak ehhez sok fázis kell. Nulla nem is lehet a fázis hossza (a midinél lehet), legalábbis az envelope numberen belül nem. Talán C-ben meg lehet csinálni.

Amúgy a következővel kísérleteztem, így egy csatornán is viszonylag érdekesebb hangzást lehet elérni, de a sebesség miatt ezt is inkább C-ből lehetne. Azért is van benne a 0 hangerejű hosszú hang, hogy amíg az szól, addig össze tudja kapni magát a gép és ne szaggatva játssza le azt, ami a cikluson belül van:
[ Guests cannot view attachments ]
Még a 120-as sorban lehet más számokat is megadni 12 helyett, pl. 7-et vagy akár 0-át (12 egy oktávval magasabb, 7 egy kvinttel magasabb, 0 ugyanaz a hang), és utána a zárójelben lévő műveletet is lehet máshogy összehozni.
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: Zeneprogramozás
« Reply #1038 on: 2020.April.11. 20:40:59 »
Source 0-2 között lehet úgy valami másféle hangot előhozni, hogy ne kelljen másik csatornát beáldozni?
Ha még aktuális, lehet olyat is, hogy balról indul a hang, jobb oldalon nem szól, és átmegy a hang jobb oldalra, kb. annyi idő alatt, ami a leggyakoribb hanghosszúság a zenében. Közben bal oldalon el is halkulhat fokozatosan - vagy nem, mindkettő lehet jól használható.
Vagy még olyat lehet, hogy középen megszólal, lecseng gyorsan, utána kicsit halkabban megszólal csak balról és lecseng, majd még kicsit halkabban jobbról és az is lecseng. Ez jó, visszhangszerű effekt. Talán még hangeffektnek is elmegy játék közben torzítva, vagy a zajcsatornán is jól szólhat különböző polinomszámlálókkal (SOURCE 3,STYLE 8 / 12  / 16).
Gondolom, érthető, de ha kellene envelope number ezekhez, szólj!
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: Zeneprogramozás
« Reply #1039 on: 2020.April.12. 18:25:41 »
Kb. ilyen hangja van a szomszédban a bárban a kávéfőzőnek, de csak espresso kávéknál:
[ Guests cannot view attachments ]
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: Zeneprogramozás
« Reply #1040 on: 2020.April.12. 22:02:55 »
Elég beteg az a kv-főző, ideje lenne lecserélni :D

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Zeneprogramozás
« Reply #1041 on: 2020.April.13. 19:55:34 »
próbálkozom a dave converterrel

kimentettem a dave regisztereket a midi lejátszóból:
[ Guests cannot view attachments ]

ez eddig jó, irtam rá egy egyszerű lejátszót, tényleg az szól, aminek kéne:
[ Guests cannot view attachments ]

nade
fogtam a daveconv.cpp-t és lefordítottam xorplay formátumra: (egyébként nem igazán világos nekem a sok paraméter, azokat használtam jobb híján, amivel az exorcist zenéje lett konvertálva)
[ Guests cannot view attachments ]

na és ezek után próbáltam lejátszani a xorplay.s-sel, de nagy csönd, aztán némi zörej (miközben a exorcist_song1.bin file-lal működik)

mi a gond?
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Zeneprogramozás
« Reply #1042 on: 2020.April.13. 20:37:46 »
kimentettem a dave regisztereket a midi lejátszóból:

Erre a célra használható a midiconv is, például az itt található Bad Apple demóhoz ezek a parancsok konvertálják a zenét:

./bin/midiconv_linux64 eleclove.mid musicdat.dav envelope.txt -quant4 -render
./bin/daveconv_linux64 musicdat.xr8 musicdat.dav:e4,n,f 0
./bin/epcompress -raw -m4 -X musicdat.xr8 musicdat.m4


A -render paraméter a lényeges, ennek a használatakor DAVE regiszter adat lesz a kimenet. A -quant4 célja itt csak az, hogy minden negyedhang időtartama pontosan osztható legyen 4 50 Hz-es megszakítással, így nem egyenetlen a zene időzítése.

Quote
nade fogtam a daveconv.cpp-t és lefordítottam xorplay formátumra: (egyébként nem igazán világos nekem a sok paraméter, azokat használtam jobb híján, amivel az exorcist zenéje lett konvertálva)

Konvertálásnál fontos, hogy a formátum és a betöltési cím megfelelő legyen, az Exorcist zenéjénél használt paraméterekhez a legjobb az Exorcist lejátszó rutinját beépíteni. Vagy a fenti példához a badapple.asm-ben található rutint. A csomagban és itt is megtalálható daveconv.cpp egyébként kissé továbbfejlesztett, hatékonyabban kódolja a hosszú szüneteket.

Azonban mostanában kísérletezek ilyen célra jobb formátummal, mert a daveconv több zenénél nem igazán hatékony, és a fix méretű burkológörbe terület is nehézkes. Mindenesetre a paraméterek jelenleg ezek:

./bin/daveconv_linux64 OUTFILE INFILE[:[OPTIONS][,THRESHOLD[,MAXDUR]]] [LOADADDR]
Options (comma separated list):
    r:  reserve 8 bytes at the beginning of the envelope buffer
    h:  hold previous frequency if volume is zero
    z:  zero frequency if volume is zero
    e0..e4: envelope buffer size (2^(N+9) bytes, default: e3 (4096))
    n:  non-interleaved envelope data
    p1..p8: number of note parameter tables, default: p2 (2048 bytes)
    d:  use only one note parameter table (same as p1)
    s:  find the threshold and max. duration for minimum data size
    f:  find the threshold and max. duration for minimum file size


A leglényegesebbek az "e" és "n" (burkológörbe terület mérete és formátuma), a "d" vagy "p", és a LOADADDR. Az utóbbi általában ugyanaz, mint a lejátszó forráskódjában a musicData cím, és ha negatív, akkor a zene adat a burkológörbék elé kerül. Itt például 0x1000 a helyes érték:

Code: ZiLOG Z80 Assembler
  1. ; xorplay8K.s
  2.  
  3. ; daveconv file.xr8 file.dav:e4,n,f 0x1000
  4.  
  5. musicInit:
  6.         ld      hl, (trackOffsets)
  7.         xor     a
  8.         di
  9.         out     (0a7h), a
  10.         inc     a
  11.         ld      (envTimer0), a
  12.         ld      (envTimer1), a
  13.         ld      (envTimer2), a
  14.         ld      (envTimer3), a
  15.         ld      (trackPtr0), hl
  16.         ld      hl, (trackOffsets + 2)
  17.         ld      (trackPtr1), hl
  18.         ld      hl, (trackOffsets + 4)
  19.         ld      (trackPtr2), hl
  20.         ld      hl, (trackOffsets + 6)
  21.         ld      (trackPtr3), hl
  22. ;       ei
  23.         ret
  24.  
  25.     macro daveChnPlay fr, vr, lenvt, ltptr
  26. .lenv:  ld      a, 1                    ; * envelope timer
  27.         dec     a
  28.         jr      nz, .l5
  29. .ltp:   ld      hl, trackOffsets + 8    ; * data pointer
  30.         or      (hl)
  31.         inc     hl
  32.         jr      nz, .l1
  33.         or      (hl)
  34.       if fr == 0a0h
  35.         jr      z, musicRestart
  36.       endif
  37.         inc     hl
  38.         ld      b, (hl)
  39.         inc     hl
  40.         ld      e, (hl)
  41.         inc     hl
  42.       if fr != 0a6h
  43.         ld      d, (hl)
  44.         inc     hl
  45.       endif
  46.         ld      (.ltp + 1), hl
  47.         jp      .l4
  48. .l1:    ld      d, high noteParamTable
  49.         ld      b, a
  50.         djnz    .l2
  51.         ld      d, high (noteParamTable + 0400h)
  52.         ld      a, (hl)
  53.         inc     hl
  54. .l2:    ld      (.ltp + 1), hl
  55.         ld      l, a
  56.         ld      h, d
  57.         ld      a, (hl)
  58.         inc     h
  59.         ld      b, (hl)
  60.         inc     h
  61.         ld      e, (hl)
  62.       if fr != 0a6h
  63.         inc     h
  64.         ld      d, (hl)
  65.       endif
  66.       if fr == 0a0h
  67.         or      a
  68.         jr      z, musicRestart
  69.       endif
  70. .l4:    ld      l, b
  71.         ld      h, a
  72.         and     0fh
  73.         ld      (.lenv + 1), a          ; duration
  74.         xor     h
  75.         rra
  76.         rra
  77.         rra
  78.         rra                             ; envelope H
  79.         add     a, high envelopeData
  80.         ld      h, a
  81.       if fr != 0a6h
  82.         ld      (.l6 - 2), de
  83.       else
  84.         ld      a, e
  85.         ld      (.l6 - 1), a
  86.       endif
  87.         jp      .l6                     ; Carry = 0
  88. .l5:    ld      (.lenv + 1), a
  89.         ld      hl, envelopeData        ; * envelope position
  90.         inc     hl
  91.       if fr != 0a6h
  92.         ld      de, 0000h               ; * frequency
  93.       else
  94.         ld      a, 00h                  ; * channel 3 control
  95.       endif
  96. .l6:                                    ; Z = 0
  97.       if fr != 0a6h
  98.         ld      a, e
  99.       endif
  100.         out     (fr), a
  101.       if fr != 0a6h
  102.         ld      a, d
  103.         out     (fr + 1), a
  104.       endif
  105.         ld      a, (hl)
  106.         out     (vr), a
  107.         rla
  108.         jr      c, .l7
  109.         ld      (.l5 + 4), hl
  110. .l7:    ld      a, h
  111.         add     a, c                    ; C = high 1000h
  112.         ld      h, a
  113.         ld      a, (hl)
  114.         out     (vr + 4), a
  115.  
  116. lenvt   equ     .lenv + 1
  117. ltptr   equ     .ltp + 1
  118.     endm
  119.  
  120. musicRestart:
  121.         call    musicInit
  122.  
  123. musicPlay:
  124.         ld      c, high 1000h
  125.         daveChnPlay 0a0h, 0a8h, envTimer0, trackPtr0
  126.         daveChnPlay 0a2h, 0a9h, envTimer1, trackPtr1
  127.         daveChnPlay 0a4h, 0aah, envTimer2, trackPtr2
  128.         daveChnPlay 0a6h, 0abh, envTimer3, trackPtr3
  129.         ret
  130.  
  131. musicData       equ     1000h
  132.         assert  (musicData & 00ffh) == 0
  133. envelopeData    equ     musicData
  134. noteParamTable  equ     musicData + 2000h
  135. trackOffsets    equ     musicData + 2800h

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Zeneprogramozás
« Reply #1043 on: 2020.April.13. 20:46:55 »
A midiplay csomag forráskódjában található még két példa lejátszó rutinra, a xorplay2K.s és a xorplay4K.s. Ezek tartalmazzák a konvertálás paramétereit is, és lehetővé teszik az egyik csatorna átmeneti tiltását (ami játékoknál hasznos, effektusok lejátszásakor). Egyszerűbb zenéknél a kisebb burkológörbe terület (e3 vagy e2) és kevesebb táblázat (d) előnyösebb lehet.

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Zeneprogramozás
« Reply #1044 on: 2020.April.13. 21:17:56 »
István, köszi a sok segítséget, holnap ránézek!
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Zeneprogramozás
« Reply #1045 on: 2020.April.14. 21:41:18 »
szünetet csak úgy lehet "szabályosan" csinálni, ha leveszem a hangerőt 0-ra?

vagy beállítom a period-ot 0-ra, és akkor 125kHz-es hang szól, amit úgyse hallunk?
erre gondolok (0-ás csatorna esetén):
R0 W #A0  b7-b0: Low byte of number to be loaded into 12­bit down counter to set period of tone channel 0.
R1 W #A1  b3-b0: High nybble of above. Fout = 125,000 / (n+1) Hz.
*** Speicherplatz zu klein

Offline geco

  • EP addict
  • *
  • Posts: 7082
  • Country: hu
    • Támogató Támogató
Re: Zeneprogramozás
« Reply #1046 on: 2020.April.15. 15:07:41 »
jól hangzik, mentettem is.

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Zeneprogramozás
« Reply #1047 on: 2020.April.15. 16:56:17 »
Újdonság a midiplay csomagban a "daveconv2" DAVE adat tömörítő program:
Ez érinti a midiből midiplay ill. mididisp formátumba konvertálást is? Lecseréljem a midiconv-ot?
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Zeneprogramozás
« Reply #1048 on: 2020.April.15. 20:10:53 »
közben készítettem magamnak egy nagyon egyszerű lejátszót, nem lehet se hangerőt, se burkológörbét megadni, csak szól fixen a négyszögjel(?)

Remélem, tetszik
« Last Edit: 2020.April.15. 20:14:55 by Povi »
*** Speicherplatz zu klein

Offline szipucsu

  • Global Moderator
  • EP addict
  • *
  • Posts: 9898
  • Country: hu
    • Támogató Támogató
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Zeneprogramozás
« Reply #1049 on: 2020.April.15. 21:49:24 »
Remélem, tetszik
Jó lett! A második részében mintha néhány helyen hamis lenne pár hang, de lehet, csak én hallom félre.
Így könnyen tudsz betenni programok alá Lands of Havoc és Catacomb (Tombs of Doom) jellegű zenéket. Azok viszont csak két csatornát használnak, ez a lejátszó meg mind a 4-et.
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos