Převodník SMPTE - MTC

Následující zapojení a článek sice bylo původně určeno pro filmařské amatéry jako návod, jak snadno, rychle a kvalitně ozvučit svá díla s pomocí počítače, ovšem myslím si, že bude přínosné i pro ostatní bastlíře, neboť přináší i jednoduché popisy zapojení MIDI, časového kódu SMPTE a spoustu dalšího.

Obsah:


SMPTE

SMPTE je formát časového kódu určený pro podélné stopy video a audio záznamů (obecně i pro méně kvalitní a pomocné audio stopy). Je udělaný tak, aby dokázal určit pozici s přesností na políčko (obvykle 25 políček za sekundu), teoreticky i až na 1/2000 sekundy. Záznam je dělený do synchronizačních bloků po 80 bitech, které následují nepřetržitě po sobě. Jeden blok představuje 1 políčko (1/25 sekundy). Kódování je dělané pomocí frekvenční modulace, tedy logickou 0 představuje jeden puls o délce bps (obvykle 5 usec), logickou 1 pak pulsy dva. Slovem puls rozumím změnu úrovně signálu, viz obrázek.

Kódování je provedeno tak, že logický výstup (kupř mikropočítače) lze přímo nahrávat do SMPTE stopy. Samozřejmě po potřebné úrovňové úpravě, teoreticky bychom měli do cesty vložit i dolní propust (řádově 2000-3000Hz) kvůli filtraci. Nahrávat lze kupř na jednu stopu kazetového magnetofonu, na magnetofon, do podélné či obrazové stopy VHS, do zvukové karty apod.

Dekódování je provedeno tak, že audio signál přivedeme přes dolnopropustní filtr (cca 3000Hz) na komparátor. Výstupní logický signál lze podle délky časové změny opět převést na jednotilivé bity.

Časový kód SMPTE je stavěný tak, že ho lze dekódovat ve velikém rozsahu rychlostí přehrávání (zhruba od 5% do desetinásobků standartní rychlosti - v závislosti na kvalitě média, hlav atd.), jakož i pozpátku. Z praktického hlediska ale dále budu uvažovat pouze s normální rychlostí.

Složení jednoho synchronizačního bloku je následovné:

Blok se skládá z 80 bitů, přičemž obsahuje 16 čtyřbitových slov plus 16 synchronizačních bitů. Nejnižší bit jde u slova vždy jako první, přičemž informace je uložena jako v BCD kódu. Jedno čtyřbitové slovo obsahuje jednu číslici. První slovo obsahuje informaci o jednotkách rámečků, třetí o desítkách, páté o jednotkách sekund, sedmé desítkách sekund, 9. a 11. o minutách a 13. a 15. o hodinách. V sudých slovech může být uložena uživatelská informace, ale s tou se dále také nebudu zabývat, neboť to je nad rámec tohoto článku. Rovněž některé nevyužité bity (označené x) mají svojí funkci, ale vzhledem k tomu, že s nimi většina zařízení vůbec neuvažuje, při čtení je lze přepsat na 0, při zápisu pak zapisovat 0. Blok je ukončen synchronizační sekvencí 00, dvanáct jedniček, 01. Dvanáct jedniček je kód, který se nikdy nemůže vyskytnout v oblasti dat, proto ho lze použít jako identifikaci konce sekvence, či rychlosti záznamu. 00 a 01 slouží k identifikaci směru pohybu pásku, tedy pokud přijde xxx11111111111101 je jasné, že se pásek pohybuje dopředu a začíná první bit následujícího bloku dat. Bloky běží nepřetržitě za sebou, tedy za jednu sekundu se zaznamená či přečte 2000 bitů.


MIDI

Rozhraní původně použité pro ovládání klávesových nástrojů, sekvencerů apod. Nebudu se tady příliš rozpisovat o jednotlivých typech zpráv, pouze proberu naprosté základy.

Logické rozhraní

Jako logické rozhraní se na výstupní straně používá normální výstup TTL 0/5V s ochraným odporem. Na vstupní straně pak obvykle optický převodník opět s ochranným odporem.Jako spojovací médium je použitý dvoužilový kabel (doporučuje se stíněný na pinu 2, také konektory občas mívají na pin 2 vyvedenou zem) kontektory jsou klasické 5 pinové DIN. Propojení kabelu je na pinech 4,5 jedna k jedné. Pin 4 je jak u vstupu tak i u výstupu pin s vyšším napětím. Většina zvukových karet má v současné době na sobě 15 pinový GAME PORT konektor, který také obsahuje MIDI piny. Obvykle se ale jedna o pouhý TTL vstup/výstup a je potřeba postavit externí převodník viz obrázek. Pokud není potřeba mít interface galvanicky odděleno lze z výhodou použít přímo tyto signály, jakož i napájecí napětí 5V, které se na tomto konektoru také nachází. Pak je ale nutné počítat s tím, že polarita logického signálu je otočená (0V MIDI=log 1=5V na konektoru kary, 5V MIDI=log 0=0V na kontktoru karty) a přizpůsobit tomu program mikroprocesoru. Komunikace na jednom kabelu je vždu jednosměrná, pokud potřebujeme obousměrná data, používá se druhý kabel. Obvykle se na jeden výstup připojuje pouze jedno zařízení, nebo se používá takzvaný LOOP port apod., prakticky ovšem lze připojit paralelně zařízení několik.

MIDI byte se posílá jako sériový asynchroní znak o rychlosti 31.25 kBd, 1 start bit, 8 bitů dat - první je nejméně významný, 1 stop bit. Tedy na portu PC je v klidovém stavu LOG 1, pak přijde na 32us LOG 0, pak jde nenegovaný BIT0,1,2,3,4,5,6,7-po 32usec, a pak musí jít LOG 1 alespoň 32usec, než může přijít další byte. Na MIDI kabelu je oproti tomu v klidovém stavu 0V, pak přijde 5V, pak negované bity 0,1,2,3,4,5,6,7 a pak 0V.

Posílané bajty mají specifický formát:

Jako první vždy přijde bajt, jehož nejvyšší bit je 1 a jehož 4 nejnižší bity obsahují číslo kanálu (až na vyjímky). Číslo kanálu především informuje přijímač o tom, zdali a jaký nástroj má hrát. Poté pokračuje několik datových byte, které musí mít nejvyšší bit vždy 0.

Možné zprávy kupříkladu jsou:


Časový kód MTC

MTC je kód časové synchronizace použité pro MIDI nástroje a spousta zvukových programů se podle něj umí řídit. Kód obsahuje vždy 2 vyslané MIDI bajty, první je vždy F1, druhý pak obsahuje v horních 4 bitech pořadové číslo bloku, v dolních 4 bitech pak data. Tyto bloky se vysílají 4 během jednoho políčka (tedy v našem případě je frekvence posílání 25*4=100x za sekundu). Celkem na kompletní časovou informaci je ale potřeba bloků 8, kde každý obsahuje něco. Celkem to vypadá následovně:

Kde a jsou jednotky FRAME, b jsou šestnáctky FRAME. To je zásadní rozdíl oproti SMPTE, že MTC kóduje v HEXA kódu, tedy kupř 20 FRAME bude vypadat: F1,04 ---- F1,11. c jsou jednotky SEC, d šestnáctky SEC, e jednotky MIN, f šestnáctky MIN, g jednotky HOD a nakonec je speciální byte, který obsahuje informace o typu kódu a počtu snímků za sekundu. Pro 25 snímků je to konstanta 2.

Tedy 00:32:15:20 bude: F1 04, F1 11, F1 2F,F1 30, F1 40, F1 52, F1 60, F1 72

Tento F1,XX kód se vysílá v pravidelných intervalech každých 10msec a celá sekvence se opakuje po dvou snímkách znova. Nepodařilo se mi zjistit ani u jednoho z obou kódů (SMPTE,MTC), kdy je platný začátek času a pro které políčko to platí. Myslím, že v SMPTE platí adresa pro právě probíhající políčko, u MTC je to složitější a tak nevím.


Převodník SMPTE -> MTC

Pro převod kódu SMPTE na MTC je potřeba detekovat a demodulovat SMPTE kód, získat kompletní časovou informaci, tu opět použít a v pravidelných intervalech vysílat na sběrnici MIDI jako kódy MTC. Jako detektor je možné postavit symetrický vstup s dolní propustí 3000Hz a komparátorem, já jsem v praxi z nouze vyzkoušel přijímač RS422. Není to zrovna učebnicové zapojení, ale funguje to taky (ovšem je to na úkor snížené citlivosti a odolnosti proti šumům).

Pro některé typy procesorů ze sériovým kanálem je to brnkačka pro procesor PIC trošku problém. Nakonec se mi celou věc podařilo vyřešit trošku zběsilým algoritmem, který našel snad jediné možné řešení jak zároveň přijímat SMPTE a vysílat MIDI. Je to ovšem na úkor hodinové informace, na jejíž příjem mi už nezbyl čas. Nemyslím si, že by to byla veliká chyba, neboť s projekty nad hodinu asi pracuje málokdo a pokud ano, prostě mu to na straně PC vyhodí čas s 00 hodinami. Na schématu uvedený PIC 16C84 není platný, program jsem již upravil pro PIC 16C54. PIN RB1 je třeba uzemnit. Tento pin lze použít jako DISABLE OUT pin, přičemž procesor stále přijímá a analyzuje SMPTE DATA a lze opět výstup v libovolném okamžiku uvolnit. To občas může být výhodné. Další pomocný pin je RB.0, což je testovací pin SMPTE. Lze na něj připojit LED a pokud svítí (25Hz- tedy prakticky svítí)je SMPTE na vstupu bez chyby, pokud poblikává, jsou na vstupu výpadky, nebo je nedostatečná síla vstupního signálu, brum na vstupu apod. Tento výstup lze také použít jako 25Hz referenci.

Chyby programu a nedostatky:

Zdrojový kód programu je ZDE, datový soubor pro programátor pak ZDE. Program je udělán v assembleru PARALLAX


Program na generaci SMPTE kódu do WAV souboru

SMPTEGEN.EXE - Zde je krátký a jednoduchý program na generaci SMPTE kódu do WAV souboru tak, aby se dal z počítače nahrát na pásek, na kterém je potřeba ho mít. Program potřebuje ke své funkci knihovnu VBRUN300.DLL (kterou by jste ale stejně na počítači měli mít, tak jí ani nepřidávám) a ovládání je děsně jednoduché. Zadají se hodnoty TIMECODU OD ->DO a typ a jméno souboru. Typ je možný pouze 8Kb mono či 32Kb mono. Osobně doporučuji použít 32Kb mono a v některém programu na zpracování WAV to vyfiltrovat dolní propustí cca 5kHz. Pak lze WAV soubor nahrát kamkoliv. Pro zajímavost pak uvádím i zdrojový kód programu ve VISUAL BASICU ZDE


Praktické použití převodníku

Konečně se dostávám k tomu, co tento článek a zapojení může čtenářům dát, k praktickému použití a zkušenostem spřevodníkem.

Existují v zásadě 4 možnosti, jak převodník využít:


Některé použitelné programy

Tady není jednoznačná definice. Lze prostě použít jakýkoliv WAV editor (nejlépe multistopý), který se umí synchronizovat pomocí MTC. Kupř:


Autor: Ondřej Vitouš