Welcome, Guest. Please login or register.


Author Topic: Zeneprogramozás (Read 219472 times)

Offline szipucsu

  • EP addict
  • *
  • Posts: 8585
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 75.0 Firefox 75.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Zeneprogramozás
« Reply #1050 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 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
110 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
120 SOUND PITCH 25,SYNC 2
Videos

Offline szipucsu

  • EP addict
  • *
  • Posts: 8585
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 75.0 Firefox 75.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Zeneprogramozás
« Reply #1051 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:
* Ringmod coffee maker.ep128s (42.14 kB - downloaded 45 times.)
100 SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
110 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
120 SOUND PITCH 25,SYNC 2
Videos

Offline geco

  • EP addict
  • *
  • Posts: 5728
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 75.0 Firefox 75.0
    • View Profile
Re: Zeneprogramozás
« Reply #1052 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: 1965
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 80.0.3987.163 Chrome 80.0.3987.163
    • View Profile
    • http://povi.fw.hu
Re: Zeneprogramozás
« Reply #1053 on: 2020.April.13. 19:55:34 »
próbálkozom a dave converterrel

kimentettem a dave regisztereket a midi lejátszóból:
* title.dav (31.94 kB - downloaded 27 times.)

ez eddig jó, irtam rá egy egyszerű lejátszót, tényleg az szól, aminek kéne:
* ZENE.COM (0.14 kB - downloaded 28 times.)

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)
* title.bin (3.62 kB - downloaded 27 times.)

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: 4825
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 68.0 Firefox 68.0
    • View Profile
Re: Zeneprogramozás
« Reply #1054 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: 4825
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 68.0 Firefox 68.0
    • View Profile
Re: Zeneprogramozás
« Reply #1055 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: 1965
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 80.0.3987.163 Chrome 80.0.3987.163
    • View Profile
    • http://povi.fw.hu
Re: Zeneprogramozás
« Reply #1056 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: 1965
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 80.0.3987.163 Chrome 80.0.3987.163
    • View Profile
    • http://povi.fw.hu
Re: Zeneprogramozás
« Reply #1057 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: 5728
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 75.0 Firefox 75.0
    • View Profile
Re: Zeneprogramozás
« Reply #1058 on: 2020.April.15. 15:07:41 »
jól hangzik, mentettem is.

Offline szipucsu

  • EP addict
  • *
  • Posts: 8585
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 75.0 Firefox 75.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Zeneprogramozás
« Reply #1059 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 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
110 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
120 SOUND PITCH 25,SYNC 2
Videos

Offline Povi

  • EP addict
  • *
  • Posts: 1965
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 80.0.3987.163 Chrome 80.0.3987.163
    • View Profile
    • http://povi.fw.hu
Re: Zeneprogramozás
« Reply #1060 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

  • EP addict
  • *
  • Posts: 8585
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 75.0 Firefox 75.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Zeneprogramozás
« Reply #1061 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 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
110 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
120 SOUND PITCH 25,SYNC 2
Videos

Offline Povi

  • EP addict
  • *
  • Posts: 1965
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Chrome 80.0.3987.163 Chrome 80.0.3987.163
    • View Profile
    • http://povi.fw.hu
Re: Zeneprogramozás
« Reply #1062 on: 2020.April.15. 22:27:40 »
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.
Hááát, én nem hallom hamisnak :-)
Ez alapján csináltam:
https://www.youtube.com/watch?v=mfJ88PAuH24
*** Speicherplatz zu klein

Offline geco

  • EP addict
  • *
  • Posts: 5728
  • Country: hu
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 68.0 Firefox 68.0
    • View Profile
Re: Zeneprogramozás
« Reply #1063 on: 2020.April.16. 08:44:05 »
A tömöríthetőség javítására próbálkoztam a burkológörbe adat differenciálásával, amit ez a rutin konvertál lejátszás előtt:

A fent említett példa file így 9093 helyett 7630 méretű tömörítve, ami még mindig nem igazán jó, de javulás. A konvertáló program egyelőre nem tud közvetlenül ilyen formátumban menteni.
Hááát azt az 1,4 KB-ot én igazán jónak nevezném, igaz, ha jól emlékszem, akkor 7100 byte-ra nyomta a másik, de sztem a 7600 teljesen jó, és a lejátszó rutin is rövidnek tűnik, ha az egészet listázta a github (láttam a codeend-et is :D )

Offline szipucsu

  • EP addict
  • *
  • Posts: 8585
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 75.0 Firefox 75.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Zeneprogramozás
« Reply #1064 on: 2020.April.16. 11:56:04 »
Hááát, én nem hallom hamisnak :-)
A második felében mintha el lenne hangolódva egymáshoz képest egy kicsit a két szólam, de lehet, csak én érzem így. Két hangot éreztem feltűnőbben hamisnak, a videón az utolsó hang az például, ami EP-n máshogy hangzik.
Még olyat lehetne, hogy a basszus szólamra alacsony torzítást teszel, kicsit más lesz a hangzás. De lehet, hogy nem minden hangmagasság-értéknél lesz hallható a hang, ha nem változtatod meg kicsit a frekvenciát, de mély hangoknál talán nem annyira jellemző, ezt nem tudom fejből.
100 SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
110 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
120 SOUND PITCH 25,SYNC 2
Videos