Zpracování MIDI eventu Time Signature
Napsal: 23.06.2022 7:50
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?
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?