Píšu program na zpracování midi souborů a řeším, možná hypotetický, problém, k němuž jsem nenašel informace v midi standardu. Ten program má zobrazovat takty. Délka taktu je uvedena v eventu TimeSignatur, třeba že je 4/4 nebo 6/8 a podobně. Takže stačí odpočítat správný počet dob a vím, kde začíná další takt. Je to jednoduché do chvíle, kdy je TimeSignature uveden přesně na začátku taktu. Ale co když se event TimeSignature objeví uprostřed taktu?
Imho nejlepší by bylo, kdyby to bylo zakázáno, ale standard to nezakazuje a technicky to možné je. Jak to potom ošetřit? Uplatnit ten event ještě na stávající takt nebo až ten příští? Nebo to nějak zaokrouhlovat? Je jasné, že když se TimeSignature objeví až ke konci taktu, třeba u 4/4 taktu ve čtvrté době, tak už ani nepůjde na stávající takt uplatnit změna na 2/4 takt. Ale zase když se tato změna objeví jen pár ticků po začátku taktu, což jsou milisekundy, tak to může být bráno jen jako nepřesnost časování s tím, že by se to ještě mělo uplatnit na stávající takt. Takže si umím představit třeba pravidlo, že pokud se TimeSignature objeví během první doby, aplikuje se ještě na takt, kde se event vyskytl.
Nevím s jakou přesností různé sw a hw nástroje tyto eventy do midi umísťují a zda řeším něco, co je běžné, vzácné nebo nenastává vůbec. Zatím nemám nástroj, kterým bych mohl projet pár stovek midi souborů, abych si mohl udělat alespoň nějakou statistiku. Neexistuje nějaký úzus, jak toto ošetřit?
Zpracování MIDI eventu Time Signature
Pravidla fóra
Re: Zpracování MIDI eventu Time Signature
To asi nebude dotaz na muzikanty, ale spíš do nějakého vývojářského fóra ...
╭╭(╭⊚‿⊚╮)╮╮
- pavlii
- Globální moderátor
- Příspěvky: 6852
- Registrován: 2.04.2009 11:47
- Skype: studio_kappka
- Bydliště: Hostivice
- Kontaktovat uživatele:
Re: Zpracování MIDI eventu Time Signature
Tak. Pokud to jednoznačně nevymezuje MIDI norma, tak je to o implementaci příslušného MIDI zařízení. Myslím (ale zase tolik jsem s tempostopou v Cubase nekouzlil), že jakmile je event zachycen, je zpracován. Ono mě by se to jevilo i jako víc logické (tady není nutno dělat žádné věci na straně MIDI příjmu tudíž není důvod posílat takový event v jakkoli krátkém předstihu před bodem platnosti).
Event je vždy umisťován s takovou přesností, jakou umožňuje rozlišení v ticích daného MIDI nástroje. Obvykle se to dá najít pod "PPQN" ("pulse per quarter note") nebo "MIDI resolution" apod.
Samozřejmě není lichá ani varianta naznačená Petr13.
P.
EDIT: jestli jsem nic nepřehlédl, tak fyzicky se jedná o SysEx zprávy - a ty jsou zde dvě možné: Immediate (tj. hned při nejbližším synchrotiku) a Delayed (od následujícího taktu).
Event je vždy umisťován s takovou přesností, jakou umožňuje rozlišení v ticích daného MIDI nástroje. Obvykle se to dá najít pod "PPQN" ("pulse per quarter note") nebo "MIDI resolution" apod.
Samozřejmě není lichá ani varianta naznačená Petr13.
P.
EDIT: jestli jsem nic nepřehlédl, tak fyzicky se jedná o SysEx zprávy - a ty jsou zde dvě možné: Immediate (tj. hned při nejbližším synchrotiku) a Delayed (od následujícího taktu).
Naposledy upravil(a) pavlii dne 23.06.2022 11:25, celkem upraveno 3 x.
Re: Zpracování MIDI eventu Time Signature
Time Signature je standardní meta-event (tj. určený pro midi soubory) FF 58 (FF 58 04 nn dd cc bb). Neřeším realtime komunikaci, ale zpracování midi souboru.
Co se týče přesnosti, nejde mi o přesnost reálného času, který zde nehraje žádnou roli. Jde mi o přesnost v rámci ticků. Tj. shodnost ticku začátku taktu a ticku eventu Time Signature a nakolik na to mohu spoléhat. Zatím to řeším tak, že změnu TS zohledňuji až v novém eventu a mám mentální poznámku, že když mi program bude ukazovat špatně začátky taktů po změně TS, bude to první místo, které budu zkoumat.
Co se týče přesnosti, nejde mi o přesnost reálného času, který zde nehraje žádnou roli. Jde mi o přesnost v rámci ticků. Tj. shodnost ticku začátku taktu a ticku eventu Time Signature a nakolik na to mohu spoléhat. Zatím to řeším tak, že změnu TS zohledňuji až v novém eventu a mám mentální poznámku, že když mi program bude ukazovat špatně začátky taktů po změně TS, bude to první místo, které budu zkoumat.
- pavlii
- Globální moderátor
- Příspěvky: 6852
- Registrován: 2.04.2009 11:47
- Skype: studio_kappka
- Bydliště: Hostivice
- Kontaktovat uživatele:
Re: Zpracování MIDI eventu Time Signature
Zajímavé, v MIDI dokumentaci jsem na Signature text narazil až u SysEx. Ale neprohlížel jsem různé Add-ons, pouze základní a rozšířenou verzi. Taky mě to udivilo, ale nemám dneska moc času zjišťovat, kde je chyba 
P.

P.