Enterprise Forever

:HUN => SOUND: => Topic started by: szipucsu on 2017.November.10. 19:45:22

Title: RaMuGe 2
Post by: szipucsu on 2017.November.10. 19:45:22
Endi említette, írjak valami zenét a Basic Square játék alá. Elgondolkoztam, milyen zene illene oda, amikor hatalmas sebességgel megy a pálya, és lépésenként új hang kéne, hogy jöjjön. Hirtelen megőrülhettem, mert jött egy ötletem, hogy ehhez a fajta zenéhez érdemesebb lenne írni egy zenegenerátort, amit el is kezdtem.
Gyakorlatilag felváltva játssza a program a C-dúr és a D-moll akkordjait, ezek felváltva amúgy is kellemesen hatnak. Véletlenszerű darab véletlenszerű hangot vesz először a C-dúrból, utána ugyanennyit a D-mollból, utána kezdi elölről egy darabig. Utána az így előállt "dallamot" megismétli, de néhány félhanggal feljebb vagy lejjebb, annyiszor, ahányszor épp kedve van.
Sokat dobott az egészen az, hogy rájöttem, nem szabad engedni, hogy egymástól túl távoli hangok jöjjenek közvetlen egymás után. Így az előző hangot meg kell jegyezni, majd a jelenlegi hangból kivonni, és ha az abszolút értékük nagyobb pl. 5 pitch értéknél, akkor másik hangot kell keresni helyette. Ha már csak önmagában pl. a C-dúr skálát venné csak alapul, akkor is ez a "nem lehet túl nagy hangmagasságbeli különbség két szomszédos hang között"-módszer is valamennyire hatásos lenne.

Érdemes inkább nem a snapshottal próbálkozni, hanem a .bas programmal, úgy tényleg véletlenszerűbb lesz az eredmény. Már persze ha valakit érdekel egyáltalán ez.
Title: Re: RaMuGe 2
Post by: geco on 2017.November.10. 20:41:52
Szerintem technosítani kéne rajta :)
Title: Re: RaMuGe 2
Post by: szipucsu on 2017.November.10. 21:11:52
Szerintem technosítani kéne rajta :)
Ezt hogy érted? Dobokat neki, aztán tuc-tuc, meg technós hangzás, ami abban a midiből konvertált mixben is volt?
Itt most direkt egyszólamú a "dallam", mert direkt erre a részére megyek rá.

Nagyon belejöttem, megcsináltam sima C-dúr skálára is. Addig kísérleteztem, amíg végül csak közvetlen egymás melletti hangokat engedélyez, néha egy tercet is. Jól el lehet szórakozni a beállításokkal, hogy milyen hangközök milyen gyakorisággal fordulhassanak elő. Ehhez akár programot is lehetne írni, amiben lehet állítani ezeket is.
A LONG változó adja meg, milyen hosszú legyen a dal.
Ha kész a zene, nem játssza le egyből, hanem billentyű leütésére vár, így aki fel akarja gyorsítani az emulátort a generálás idejére, az sem marad le a lejátszásról a gyorsítás elcsúszása miatt.
Nagyon a befejezetlenség érzetét kelti a dallam, így az utolsó három hangra kitaláltam két befejezési lehetőséget, a kettő közül véletlenszerűen választ. De ez nem veszi figyelembe, milyen hang van az utolsó három hang előtt, így ha nagyon "messze" jár onnan a gép, akkor nem szól túl jól.
[attach=1]
[attach=2]

Egyre érdekesebbnek tűnik ez a téma. :D
Title: Re: RaMuGe 2
Post by: endi on 2017.November.10. 21:32:10
megírod ugyanazt amit én :D
Title: Re: RaMuGe 2
Post by: szipucsu on 2017.November.12. 13:08:53
Továbbfejlesztettem a C-dúr skála alapján "komponáló" programot. Így már szép hosszú melódiákat gyárt, azokat midi fájlba exportálja, ehhez a file: eszközt használja. Itt van egy példa midi is hozzá, amit a program generált:
[attach=1]
[attach=2]

A következő lépés az lesz, hogy dobsávot is generál hozzá, mégpedig az EP midihez, és a midiconv-val EP-n lehet majd hallgatni. Nem tudom, ha több midi sáv is van egy .mid fájlon belül, azt mennyire bonyolult megcsinálni. Remélem, csak egymás után kell pakolni a midi sávokat a fájlon belül.
Még azt sem tudom, a vezérlő beállításokat és a hangszert hogyan lehet így belerakni egy bájtonként generált midi fájlba. Pedig jó lenne, ha alapból a mindenki által kedvelt techno-trance hangzással szólalna meg. Majd hex editorral megnézem a fájlt, majd beleteszek egy beállítást, úgy is megnézem, abból talán rájövök, hogyan lehet bájtonként előállítva belerakni.

Itt találtam leírást a midi fájl felépítéséről. (http://midi.blog.hu/2007/01/10/a_szabvanyos_midi_fajlok) A vezérlők és a hangszerállítás (ha jól értelmezem) nincs benne.
Title: Re: RaMuGe 2
Post by: IstvanV on 2017.November.12. 13:27:31
Itt találtam leírást a midi fájl felépítéséről. (http://midi.blog.hu/2007/01/10/a_szabvanyos_midi_fajlok) A vezérlők és a hangszerállítás (ha jól értelmezem) nincs benne.

Vezérlő: 175 + csatorna (1-16), vezérlő száma (0-127), érték (0-127)
Hangszer: 191 + csatorna (1-16), hangszer száma (0-127)

Több sávos file készítése egyszerű, csak figyelni kell arra, hogy a file fejlécben ("MThd") jó legyen a sávok száma, és az egyes sávok fejléceiben ("MTrk") is a sáv mérete.
Title: Re: RaMuGe 2
Post by: szipucsu on 2017.November.12. 13:43:26
Vezérlő: 175 + csatorna (1-16), vezérlő száma (0-127), érték (0-127)
Hangszer: 191 + csatorna (1-16), hangszer száma (0-127)
Köszi!
Igen, az még világos, hogy a fejlécben kell megadni a sávok számát. A sáv méretével nem foglalkoztam, mert előre nem tudtam, mekkora lesz, de így is működik.
Szóval a vezérlőt 3 bájton, a hangszert 2 bájton lehet megadni? És ezeket a bájtokat lehet simán a sávok elejére is tenni? A csatornát hogyan lehet beállítani egy sávhoz? Vagy azt a vezérlő/hangszer is rögtön beállítja?

Tehát ha pl. az egyik sávot az 1-es midi csatornának akarom beállítani, és oda mondjuk zongorát rakni, akkor 191+1=192=C0h kerül az első bájtra, 01 (zongora sorszáma)  a másik bájtra, és a sáv elejére C0 01-et írok?
Ha pedig a 71-es vezérlőre gyűrűmodulációt akarok tenni, akkor 175 + 1 = 176 = B0h (egyes midi csatornán), 47h (71-es vezérlő), 20h (32, azaz gyűrűmoduláció)?
Title: Re: RaMuGe 2
Post by: IstvanV on 2017.November.12. 13:53:32
Igen, az még világos, hogy a fejlécben kell megadni a sávok számát. A sáv méretével nem foglalkoztam, mert előre nem tudtam, mekkora lesz, de így is működik.

A Cakewalk talán elfogadja, de egyébként ha a tényleges és a fejléc szerinti méret eltér, akkor hibás a file. :oops:

Quote
És ezeket a bájtokat lehet simán a sávok elejére is tenni?

Bárhol lehetnek a sávon belül, a sáv adat formátuma: időtartam, esemény, időtartam, esemény, ..., időtartam, FF 2F 00 (sáv vége).

Quote
A csatornát hogyan lehet beállítani egy sávhoz?

Nem lehet. :) Bármelyik sávon lehet bármikor bármelyik csatorna. Természetesen könnyebben szerkeszthető a file, ha egy sávon csak egy csatorna található, de ezt a csatornaüzenetekben kell beállítani.
Title: Re: RaMuGe 2
Post by: szipucsu on 2017.November.14. 18:34:30
A Cakewalk alapból kétsávos midiket ment, akkor is, ha csak egy sáv van benne valójában. Ez miért lehet? Az első "sáv" nem jelenik meg a szerkesztőben, nincs is rajta semmi, de ha hex editorral megnézem, benne van. Nem is értettem, a fejlécben miért 2 sávot írnak, amikor a szerkesztőben csak egy sáv van.
Ha csak megnyitom a Cakewalk-ot, akkor is csak egy sávval nyitja meg a szerkesztőt, és ha ebben az állapotban mentem el a midi fájlt, akkor is két sávossal menti:
[attach=1]
Az első "sávon" azok az adatok mik lehetnek? Addig értem, hogy az az első "sáv" 15 bájt (19h) hosszú, de ami rajta van, az mit jelent, mit állíthat be, mihez kellhet?
Ha az első sávra kerül valami kis zene, akkor is ugyanúgy ott van az az elsőt megelőző sáv a hex editorban:
[attach=2]

Kipróbáltam azt is, hogy ha csak betöltök, majd elmentek egy netről letöltött egysávos midit, abba nem rakja bele azt a sávot, de pár bájtot abba is beletesz.
Title: Re: RaMuGe 2
Post by: IstvanV on 2017.November.14. 18:45:20
Az első "sávon" azok az adatok mik lehetnek?

Itt található a tempó, ütemelőjegyzés, és egyéb globális (minden sávra vonatkozó) paraméterek.

Tempó:

FFh 51h 03h n n n - itt az "n n n" 3 byte, azaz 24 bites érték, ami egy negyedhang időtartama us egységekben. Ezt az időtartamot kell a fejlécben megadott értékkel (ami a képeken 120) osztani az időzítés egységének ("tick") a számításához

Ütemelőjegyzés:

FFh 58h 04h a b c d - a = számláló, b = nevező 2 alapú logaritmusa, azaz például 4/4-nél a=4 és b=2. A másik két paraméter kevésbé lényeges, ezek általában fixen 24-re és 8-ra állíthatók, mint a képeken is
Title: Re: RaMuGe 2
Post by: ergoGnomik on 2017.November.14. 19:20:40
Létezik egy (asszem) midi2mtx nevű programocska, amivel MIDI fájlokat lehet szöveges formára konvertálni. Talán valamivel jobb, mint hexdumpot guberálni.
Title: Re: RaMuGe 2
Post by: szipucsu on 2017.November.14. 20:30:45
Köszi az információkat!
Csak azt nem értem, a Cakewalk miért teszi ezeket mind külön MTrk mögé, más fájlokban pedig nincs erre külön sáv.
A szöveges formátumba konvertálás lehet, hogy nem rossz, de basicből midibe mentő program miatt jobb a bájtonkénti feszegetés.