Kod czasowy MIDI

Kod czasowy MIDI ( MTC ) zawiera te same informacje o taktowaniu, co standardowy kod czasowy SMPTE , jako seria małych komunikatów MIDI „ćwierć klatki” . Nie ma przepisu na bity użytkownika w standardowych komunikatach kodu czasowego MIDI i SysEx wiadomości są używane do przenoszenia tych informacji. Komunikaty ćwierćramkowe są przesyłane w sekwencji ośmiu komunikatów, dlatego co dwie ramki określana jest pełna wartość kodu czasowego. Jeśli strumień danych MIDI jest prawie wyczerpany, dane MTC mogą docierać z pewnym opóźnieniem, co skutkuje wprowadzeniem niewielkiej ilości jittera. Aby tego uniknąć, idealnie jest użyć całkowicie oddzielnego portu MIDI dla danych MTC. Większe komunikaty pełnoklatkowe, które zawierają wartość ramki kodu czasowego w jednym komunikacie, są używane do lokalizowania czasu, gdy kod czasowy nie jest uruchomiony.

W przeciwieństwie do standardowego kodu czasowego SMPTE, ćwierćklatkowe i pełnoklatkowe komunikaty kodu czasowego MIDI zawierają dwubitową wartość flagi, która identyfikuje szybkość kodu czasowego, określając ją jako:

  • 24 kl./s (stawka standardowa za prace filmowe )
  • 25 klatek/s (standardowa szybkość dla wideo PAL )
  • 29,97 klatek/s (kod czasowy porzucania klatek dla wideo NTSC )
  • 30 klatek/s (kod czasowy bez upuszczania dla wideo NTSC)

MTC rozróżnia prędkość filmu i prędkość wideo tylko na podstawie szybkości, z jaką postępuje kod czasowy, a nie na podstawie informacji zawartych w komunikatach kodu czasowego; tak więc 29,97 klatki/s opuszczanej klatki jest reprezentowane jako 30 ramek/s opuszczanej klatki przy 0,1% spadku.

MTC umożliwia synchronizację sekwencera lub DAW z innymi urządzeniami, które mogą synchronizować się z MTC lub na „podporządkowanie” tych urządzeń do maszyny taśmowej wyposażonej w SMPTE. Aby tak się stało, należy zastosować konwerter SMPTE na MTC. Maszyna taśmowa może zsynchronizować się z sygnałem MTC (jeśli jest konwertowana na SMPTE), jeśli maszyna taśmowa jest w stanie „podporządkować się” nadchodzącemu kodowi czasowemu za pomocą sterowania silnikiem, co jest rzadką cechą.

Format kodu czasowego

Kod czasowy MIDI ma długość 32 bitów, z czego 24 bity są używane, podczas gdy 8 bitów jest nieużywanych i zawsze wynosi zero. Ponieważ pełnoetatowe komunikaty kodu wymagają, aby najbardziej znaczące bity każdego bajtu były zerowe (ważne bajty danych MIDI), tak naprawdę dostępnych jest tylko 28 bitów i 4 bity zapasowe.

Podobnie jak większość audiowizualnych kodów czasowych, takich jak kod czasowy SMPTE , koduje tylko porę dnia, powtarzając się co 24 godziny. Czas podawany jest w jednostkach godzin, minut, sekund i ramek . Może być 24, 25 lub 30 klatek na sekundę.

W przeciwieństwie do większości innych kodów czasowych, komponenty są zakodowane w prostym systemie binarnym, a nie dziesiętnym .

Każdemu komponentowi przypisany jest jeden bajt:

Bajt 0
0rrhhhh : Szybkość (0–3) i godzina (0–23).
Bajt 1
00mmmmmm : Minuta (0–59)
Bajt 2
00ssssss : Sekunda (0–59)
Bajt 3
000fffff : Klatka (0–29 lub mniej przy niższych szybkościach klatek )

Kod na pełen etat

W przypadku skoku w kodzie czasowym wysyłany jest pojedynczy kod pełnoetatowy w celu zsynchronizowania podłączonego sprzętu. Przybiera to formę specjalnej wiadomości dostępnej wyłącznie w systemie globalnym:

F0 7F 7F 01 01 hh mm ss ff F7

Identyfikator producenta 7F oznacza uniwersalną wiadomość w czasie rzeczywistym, kanał 7F wskazuje, że jest to transmisja globalna. Następujący identyfikator 01 identyfikuje, że jest to komunikat typu kod czasu, a drugi 01 wskazuje, że jest to komunikat kodu pełnego czasu. Następują 4 bajty kodu czasowego. Chociaż MIDI jest generalnie little-endian, 4 bajty kodu czasowego następują w kolejności big-endian, po których następuje bajt „koniec wyłączności” F7 .

Po skoku zegar czasu zatrzymuje się do momentu odebrania pierwszego kolejnego komunikatu ćwiartki ramki.

Wiadomości w ćwiartce ramki

Gdy czas biegnie w sposób ciągły, 32-bitowy kod czasowy jest dzielony na 8 4-bitowych fragmentów, a jeden fragment jest przesyłany co ćwiartkę ramki. To znaczy 96-120 razy na sekundę, w zależności od liczby klatek na sekundę. Ponieważ pełny komunikat z kodem czasowym zajmuje osiem ćwiartek ramek, pełny czas SMPTE jest aktualizowany co dwie ramki. Komunikat ćwierćramki składa się z bajtu stanu 0xF1, po którym następuje pojedyncza 7-bitowa wartość danych: 3 bity do identyfikacji fragmentu i 4 bity kodu częściowego czasu. Gdy czas biegnie do przodu, numery elementów rosną od 0 do 7; z czasem transmisji fragmentu 0 jest zakodowaną chwilą, a pozostałe fragmenty są transmitowane później.

Jeśli strumień danych MIDI jest przewijany do tyłu, numery elementów są liczone wstecz. Ponownie, część 0 jest przesyłana w zakodowanym momencie.

Kod czasowy jest podzielony metodą little-endian w następujący sposób:

Kawałki kodu czasowego MIDI
Sztuka # Bajt danych Znaczenie
0 0000 ffff Numer ramki lsbit
1 0001 000 f Numer ramki msbit
2 0010 ssss Drugi lsbit
3 0011 00ss Drugi msbit
4 0100 mmmm lsbity minutowe
5 0101 00 mm Minuta msbitów
6 0110 hhhh lsbitów godziny
7 0111 0rr Stawka i godzina msbit

Zobacz też

Linki zewnętrzne