MIDI felvetel hangszerrol

Fórumok

Hi,

 

Elso korben az erdekelne, hogy milyen hasznalhato prancssoros MIDI rogzito(k) van(nak) Linux ala.

A feladat amit meg szeretnek valositani, az lenne, hogy egy zongorarol minden jatek eltarolodjon file-ba (automatikusan, tehat nem ugy, hogy pl. elinditom a programot es megallitom ha vege). Alavetoen SBC alapu megoldast keresek (RPi), nem hiszem hogy ez problema.

Ami meg cel lenne, hogy ne egy file legyen az egesz, hanem ha mondjuk 2 percig nem jott semmi akkor zarodjon le a file (es esetleg akkor kezdjen uj file-t ha megint van input - nem tudom ez mennyire megoldhato, akar az is lehet, hogy az elejen van egy nagy szunet, azt majd megoldom (kivagom kezzel), ez nem akkora gond, mert a MIDI miatt a semmi ugy sem noveli a file meretet).

Felteszem ilyen keszen nincs, de ha van valami hasznalhato MIDI-s program forrassal, akkor azt esetleg at tudom alakitani.

 

Koszi

Hozzászólások

Ezeknek az alkalmazásoknak egyike se ördöngösség. A MIDI egy nagyon egyszerű formátum, a porton a driver beengedi-kiengedi a bájtokat. Egyszerű bájtok egymásutánja, semmi tömörítés, titkosítás, időzítés, checksum, vagy egyéb bonyolítás. A világ egyik legprimitívebb, legkisebb sávszéligényű formátuma. Még a 80-as évek elejéről való, klasszik formátum, még nem nagy cégek, soy/webdevek dolgozták ki mindenféle köztes réteggel, absztrakciókkal, halom API-val. Az egyszerűségre kellett törekedni, mivel követelmény volt, hogy számológépchip egyszerűségű szintetizátorok és ótvar lassú, nevetségesen kevés memóriájú 8 bites mikroszámítógépek is vigyék, nem bonyolíthatták túl.

Tényleg az egész low level szinten annyira primitív, hogy csak mennek sorban egyesével a nyers, nem bufferelt bájtok, amik csatornákat és zenei hangokat (kottát) reprezentálnak. Szerintem még úgy is meg lehet csinálni, hogy a MIDI eszköz /dev/bla-bla azonosítóját cat-tel nyomatod be pipe-on vagy átirányításon át egy fájlba, vagy másik alkalmazásba. Az az egyszerű műfaj, amit egy amatőr, kisiskolás is megold, lekódol, nem kellene hozzá a nagy multik millió kódsoros projektjei, meg vaskos függőségek, lib-rengetegek.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Azért én elmenteném az adatok között eltelt időt is, hogy érdemben vissza tudjam játszani. :-) De valóban, faék egyszerű (https://ccrma.stanford.edu/~craig/articles/linuxmidi/misc/essenmidi.html). A sebessége és a népszerűsége okozta a problémát, hogy a midi thru sorban kötés legvégén a hangszer igen késett az elején lévőhöz. Amihez aztán kitalálták az elosztókat. Ó, azok a régi szép Atari ST-s idők...

"Az élet tele van kérdésekkel. Az idióták tele vannak válaszokkal."

"Its easier to fool a man than it is to convince they have been fooled"

Az el van mente, a hangjegyek utáni bájt közvetlenül az, hogy milyen hosszan szóljon a hang. Igen, ha sok hangszer van rákötve, azért vannak problémák, meg a MIDI-nek van egy újabb General MIDI szabványa, ott volt kavarás azért, hogy némelyik ilyen szintetizátorhoz kellett intelligens MPU-401 mód, meg egyebek, de még az se annyira komplikált.

Plusz ma már nincs a hangkártyáknak, integrált hangchipeknek dedikált MIDI-s része, ezért szoftverből van az egész emulálva, hangfontok mentén generálva PCM-be, vagy valami külső MPU-401 eszközt lehet USB-n a gépre kötni.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

A .mid file-ban benne van, hogy milyen hosszu ideig szol, a nyers, soros portrol (MIDI portrol) jovo byte-ok eseten viszont nincs ilyen info, azt epp az applikacionak kell hozzatenni. Es eppen errol van szo, ezert kerestem olyan programot ami ezt megteszi (azaz .midkent menti le a bejovo adatokat - ez gyakorlatilag meg is lett, az arecordmidi megfelel erre).

Amit meg meg kellene oldanom, hogy akor kezdodjon a "felvetel" amikor bejon az elso hang (ez nem trivialis, hiszen ha arra triggerelek, hogy bejott a soros porton valami es azzal inditom a programot akkor az elso byte-ot mar  buktam is), illetve, hogy ha x ideig nincs input akkor zarja le a file-t es kezdjen ujat.

/sza2

Digital? Every idiot can count to one - Bob Widlar

Értem, most megjöttek a szakértők a semmiből. Igen, lehet kötözködni. Rögzítéskor nyilván valahogy mérni kell, hogy mennyi ideig szólt a hang, de az a küldő MIDI eszköz feladata (vagy mérni, vagy már tárolt értéket átadni, ha pl. .mid fájlról van szó). Lehet ragozni a technológiai mélységeket, a lényegen nem változtat, a maiakhoz képest ez egy rém egyszerű formátum, kicsi sávszélességgel, kis komplexitással, azért van az, amit linkeltek, hogy egylibes, 6 soros, C-ben írt program is kezeli. Ha akarod, neked ez lehet bonyolult, szerintem nem az.

Hamarabb inkább bonyolítva van a sok eszköz miatt, meg amiatt, hogy pl. mai hangkártyákon és PC-s rendszereken nincs kifejezetten natív MIDI eszköz, hanem szoftveren van emulálva, hangminták/bankok mentén van generálva a MIDI-ből a PCM kimenet, ez meg behoz komplexitást. Sokszor feleslegesen. Én pl. régóta egy jó CLI MIDI lejátszót keresek, és nincs. GUI-sból van több jó, és van néhány CLI megoldás is (aplaymidi, fluidsynth, timidity), de elég satnyák, pl. nem lehet bennük lejátszáskor tekerni, fájlok között ugrani, csak bonyolítás kerülőút van rá, külön kell előszintetizálni egy PCM fájlt, amit rendes lejátszónak kell átadni (pl. mpv).

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Rögzítéskor nyilván valahogy mérni kell, hogy mennyi ideig szólt a hang, de az a küldő MIDI eszköz feladata (vagy mérni, vagy már tárolt értéket átadni, ha pl. .mid fájlról van szó).

Miert lenne a kuldo eszkoz feladata? A MIDI szabvany (marmint azok a byte-ok is amik az eszkozbol kijonnek, ebben nincs ido informacio, csak az, hogy mi tortent (pl. billentyu lenyomas es felengedes)). Szoval a kuldo eszkoz semmilyen modon nem tudja kozolni a hang hosszat.

/sza2

Digital? Every idiot can count to one - Bob Widlar

???
Ez miért lenne problematikusabb mint forditva: ON és OFF között [meg van egy rakás más EVENT is]? Amúgy a különböző eszközök közti szinkronitást -tudtommal- csak un. midiclock-kal lehet biztosítani. Az én zongoram ezt nem támogatja sajna, úgyhogy nem is ástam bele ebbe magam. 

"antiegalitarian, antiliberal, antidemocratic, and antipopular"

De, sokkal bonyolultabbá teszi. Messze nem 6 sor lesz az, ami korrekten kezeli. A PC a mai napig alapkiépítésben nem alkalmas real-time hangfeldolgozásra, mert a timestamp-ben lehet egy jókora szórás. Ezért megfontolandó lehet egy célszerszám is a célra, de gyakorlatilag elég lehet real-tima-ra konfigurálni a PC-t amennyire lehetséges.

> Én pl. régóta egy jó CLI MIDI lejátszót keresek, és nincs. GUI-sból van több jó, és van néhány CLI megoldás is (aplaymidi, fluidsynth, timidity), de elég satnyák, pl. nem lehet bennük lejátszáskor tekerni, fájlok között ugrani,

wildmidi

seek előre hátra és ugrás a következő fájlra van benne. Standard GUS-patchsetet használ.

Nem tudja használni a Fluidsynth meg freepats-general-midi sf2 formátumú hangszerbankját, hanem ahogy írtad is, GUS pat formátumú kell neki. Vannak ilyenjeim is, még egy 25 évvel ezelőtti DOS-os mentésben, konfigfájlt hegesztettem hozzá. Aztán reklamált, hogy az alsa 0 számú hangkártyát nem találta, ezt a pipewire-alsa feltelepítése megoldotta. Bekonfigolni elég nehéz, az összes hangszer pat-ját hozzáadni egyenként a konfigba. Működni végül működik, de
1) a hangminősége elég tré ahhoz képest, amit a fluidsynth és a timidity tud sf2-vel
2) amatőren bugos, pl. billentyűeseményekre késve reagál, kilépéskor is még felesleges UI újraírást rak ki a prompt-ra

Összességében maradok a fluidsynth -T wav -F blabla.wav && mpv blabla.wav megoldásnál (pipe-olás nem játszik mert akkor az mpv megint nem tud tekerni sajnos). Pedig jó lenne nem csak CLI, hanem akár TUI megoldás. Nemrég próbáltam az OpenCubicPlayert, mert DOS alatt a Cubic Playert használtam MIDI/mod lejátszására, de az sem valami jó, állandóan összeomlott most Linuxon. Az Audacious jól működik, de az meg GUI-s program, nekem meg terminálban, tty-ban működő kéne.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

1) wildmidi sf2 vs GUS.PAT -ra nem egyszerű, nem is mindig működő, de megoldás lehet az unsf program, ami szépen kicsomagolja a SundFont fájlban levő PAT-okat, és még a timidity.cfg-t is elkészíti hozzá, onnantól vagy hozzárakod a wildmidi.cfg-hez a benne levő dolgokat, vagy

wildmidi -c /ez/itt/a/generált.cfg fájl.mid

formában játszod le a zenédet. (Amúgy megint azt látom, hogy az én fapados FreeBSD-m sokkal stabilabb, mint a te csoda Arch-od - fent leírt hibáid egyikét se tapasztaltam a wildmidivel.)

2) a fluidsynth-et meg nem értem mi a bánatért használod ilyen rohadt bonyolultan

fluidsynth -n -i akarmi.sf2 fájl.mid

3) te egyértelműen nem a Timidity-ről, hanem a timidity++-ról beszélsz, az eredeti (mai napig 0.2i verziójú) nem kezel Soundfontot - az az gyik nagy javítás a ++-osban. Régebben az eredeti timidity-t használtam, a ++ nekem már túlságosan bloat - de az nálam valamikor elromlott, borzalmas lett a hangminősége, akkor tértem át a wildmidire. De szerencsére még nekem is van választék a fapados rendszeremen.

1) Rendben, ezt ki fogom próbálni.
2) Azért, hogy lehessen benne tekerni lejátszás.
3) Igen, a Timidity++-ról van szó, de a CLI lejátszóját továbbra is timidity-nek hívják.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Szerkesztve: 2023. 02. 01., sze – 05:59

Szia 

Még a sendmidi receivemidi programok érdekesek lehetnek: https://github.com/gbevin/ReceiveMIDI

Ezek olvasható, szerkeszthető txt filelal dolgoznak. 
 

#szerk.:

receivemidi dev capture note control-change ts > midi.txt

parancsal eltárolja egy zongora esetében releváns adatokat. (a "capture" a midi eszköz neve, nyilván nálad más lesz: receivemidi list paranccsal tudod listázni az eszközöket)

https://pastebin.com/RbbB8QE0       

(Chopin 64 2 eleje)

sendmidi dev playback file midi.txt

paranccsal pedig vissza tudod játszani.  (itt most nálam a "playback" a midi eszköz neve, de ez ne zavarjon)

https://soundcloud.com/user-111227801/wav-song-02wav

Utólagosan bele tudod mókolni azt is h ha van pl 10 másodpercnél nagyobb szünet akkor ott vágja el a dolgot, mivel egy szövegfajlt kell feldolgozni, ami tartalmazza az EVENTeket soronként timestamppel ellátva. Pár soros bash szkripttel megoldható. 

"antiegalitarian, antiliberal, antidemocratic, and antipopular"

Szervusz !

Bár csak érintőlegesen foglalkoztam MIDI-vel, elmondanám a benyomásaimat:

- Sibelius-szal szerkeszettem már kottát, azt játszattam le midivel. Szólt, bár néha nem úgy ahogy vártam volna.

- egy közismert dal -- Nagy Utazás - többféle verzióját láttam midiben; legalább egy (fizetős) kotta iszonyatosan bonyolult volt, az ütemezés is eltolódott ( pl 2/4-es betoldások voltak benne), a ritmizálás / harmonizálás is igen bonyolult volt; mivel láttam ennek egy leegyszerűsített / "kézzel szerkesztett" változatát is, ez alapján felvetődött bennem, hogy valamilyen programmal konvertálták MIDI-be / kottába.

Cubase-nek láttam a képernyő felületét, de még nem mélyedtem bele.

 

ha már zongoránál tartunk, attól, hogy van MIDI interface-e, nem biztos, hogy "valódi" midiben rögzíti a dallamot.

USB soroson 31250 8N1-el el tudod kapni, és le tudod írni akár.
A pygame.midi IF-en keresztül én átadtam egy alsa csatornának, amit egy Qsynth fogad, így tetszőleges soundFont tehető alá, amit csak megtalálsz.

 

vfero

Ha jól értem a midi események timestamp-pel történő ellátása a feladat.