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).-
rr = 00
: 24 klatki/s -
rr = 01
: 25 klatek/s -
rr = 10
: 29,97 klatek/s ( kod czasowy pominięcia klatki SMPTE ) -
rr = 11
: 30 klatek/s
-
- 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:
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ż
- Wbudowany kod czasowy AES-EBU
- Wypalony kod czasowy
- Kod czasowy CTL
- Synchronizacja DIN
- Liniowy kod czasowy
- Zegar rytmiczny MIDI
- Kod czasowy konsumenta wielokrotnego zapisu
- Kod czasowy interwału pionowego
Linki zewnętrzne
- Informacje o kodzie czasowym MIDI
- Specyfikacja kodu czasowego MIDI 12 lutego 1987 r
- Przewodnik po specyfikacji oprogramowania MIDI