Obsah:
SMPTE
SMPTE je format casoveho kodu urceny pro podelne stopy video a audio zaznamu (obecne i pro mene kvalitni a pomocne audio stopy). Je udelany tak, aby dokazal urcit pozici s presnosti na policko (obvykle 25 policek za sekundu), teoreticky i az na 1/2000 sekundy. Zaznam je deleny do synchronizacnich bloku po 80 bitech, ktere nasleduji nepretrzite po sobe. Jeden blok predstavuje 1 policko (1/25 sekundy). Kodovani je delane pomoci frekvencni modulace, tedy logickou 0 predstavuje jeden puls o delce bps (obvykle 5 usec), logickou 1 pak pulsy dva. Slovem puls rozumim zmenu urovne signalu, viz obrazek.
Kodovani je provedeno tak, ze logicky vystup (kupr mikropocitace) lze primo nahravat do SMPTE stopy. Samozrejme po potrebne urovnove uprave, teoreticky bychom meli do cesty vlozit i dolni propust (radove 2000-3000Hz) kvuli filtraci. Nahravat lze kupr na jednu stopu kazetoveho magnetofonu, na magnetofon, do podelne ci obrazove stopy VHS, do zvukove karty apod.
Dekodovani je provedeno tak, ze audio signal privedeme pres dolnopropustni filtr (cca 3000Hz) na komparator. Vystupni logicky signal lze podle delky casove zmeny opet prevest na jednotilive bity.
Casovy kod SMPTE je staveny tak, ze ho lze dekodovat ve velikem rozsahu rychlosti prehravani (zhruba od 5% do
desetinasobku standartni rychlosti - v zavislosti na kvalite media, hlav atd.), jakoz i pozpatku. Z praktickeho
hlediska ale dale budu uvazovat pouze s normalni rychlosti.
Slozeni jednoho synchronizacniho bloku je nasledovne:
Blok se sklada z 80 bitu, pricemz obsahuje 16 ctyrbitovych slov plus 16 synchronizacnich bitu. Nejnizsi bit jde u slova vzdy jako prvni, pricemz informace je ulozena jako v BCD kodu. Jedno ctyrbitove slovo obsahuje jednu cislici. Prvni slovo obsahuje informaci o jednotkach ramecku, treti o desitkach, pate o jednotkach sekund, sedme desitkach sekund, 9. a 11. o minutach a 13. a 15. o hodinach. V sudych slovech muze byt ulozena uzivatelska informace, ale s tou se dale take nebudu zabyvat, nebot to je nad ramec tohoto clanku. Rovnez nektere nevyuzite bity (oznacene x) maji svoji funkci, ale vzhledem k tomu, ze s nimi vetsina zarizeni vubec neuvazuje, pri cteni je lze prepsat na 0, pri zapisu pak zapisovat 0. Blok je ukoncen synchronizacni sekvenci 00, dvanact jednicek, 01. Dvanact jednicek je kod, ktery se nikdy nemuze vyskytnout v oblasti dat, proto ho lze pouzit jako identifikaci konce sekvence, ci rychlosti zaznamu. 00 a 01 slouzi k identifikaci smeru pohybu pasku, tedy pokud prijde xxx11111111111101 je jasne, ze se pasek pohybuje dopredu a zacina prvni bit nasledujiciho bloku dat. Bloky bezi nepretrzite za sebou, tedy za jednu sekundu se zaznamena ci precte 2000 bitu.
MIDI
Rozhrani puvodne pouzite pro ovladani klavesovych nastroju, sekvenceru apod. Nebudu se tady prilis rozpisovat o jednotlivych typech zprav, pouze proberu naproste zaklady.
Logicke rozhrani
Jako logicke rozhrani se na vystupni strane pouziva normalni vystup TTL 0/5V s ochranym odporem. Na vstupni
strane pak obvykle opticky prevodnik opet s ochrannym odporem.Jako spojovaci medium je pouzity dvouzilovy kabel
(doporucuje se stineny na pinu 2, take konektory obcas mivaji na pin 2 vyvedenou zem) kontektory jsou klasicke 5
pinove DIN. Propojeni kabelu je na pinech 4,5 jedna k jedne. Pin 4 je jak u vstupu tak i u vystupu pin s vyssim
napetim. Vetsina zvukovych karet ma v soucasne dobe na sobe 15 pinovy GAME PORT konektor, ktery take obsahuje MIDI
piny. Obvykle se ale jedna o pouhy TTL vstup/vystup a je potreba postavit externi prevodnik viz obrazek. Pokud neni
potreba mit interface galvanicky oddeleno lze z vyhodou pouzit primo tyto signaly, jakoz i napajeci napeti 5V, ktere
se na tomto konektoru take nachazi. Pak je ale nutne pocitat s tim, ze polarita logickeho signalu je otocena (0V v
MIDI = log 1 ( 5V ) na konektoru kary, 5V MIDI = log 0 ( 0V ) na konektoru karty) a prizpusobit tomu program
mikroprocesoru. Komunikace na jednom kabelu je vzdy jednosmerna, pokud potrebujeme obousmerna data, pouziva se druhy
kabel. Obvykle se na jeden vystup pripojuje pouze jedno zarizeni, nebo se pouziva takzvany LOOP port apod.,
prakticky ovsem lze pripojit paralelne zarizeni nekolik.
MIDI byte se posila jako seriovy asynchroni znak o rychlosti 31.25 kBd, 1 start bit, 8 bitu dat - prvni je nejmene
vyznamny, 1 stop bit. Tedy na portu PC je v klidovem stavu LOG 1, pak prijde na 32us LOG 0, pak jde nenegovany
BIT0,1,2,3,4,5,6,7-po 32usec, a pak musi jit LOG 1 alespon 32usec, nez muze prijit dalsi byte. Na MIDI kabelu je
oproti tomu v klidovem stavu 0V, pak prijde 5V, pak negovane bity 0,1,2,3,4,5,6,7 a pak 0V.
Posilane bajty maji specificky format:
Jako prvni vzdy prijde bajt, jehoz nejvyssi bit je 1 a jehoz 4 nejnizsi bity obsahuji cislo kanalu (az na vyjimky). Cislo kanalu predevsim informuje prijimac o tom, zdali a jaky nastroj ma hrat. Pote pokracuje nekolik datovych byte, ktere musi mit nejvyssi bit vzdy 0.
Mozne zpravy kuprikladu jsou:
- 9x,NN,SS - 3 bajty. 9 je typ zpravy NOTE ON, neboli stiskni klapku. Cislo kanalu je x (0-15), Druhy byte NN obsahuje cislo noty (0 - 127), SS je pak sila uhozu nastroje (pokud si na to vyrobce hraje). Nota by mela hrat dokud nedozni, nebo se nevypne.
- 8x,NN,SS - 3 bajty. NOTE OFF, pust klapku. SS se obvykle nevyuziva, ale musi tam byt
- Bx,7B,00 - 3 bajty - vypni vsechno
- Ex,00,PP - 3 bajty nastav PITCH control, neboli jemne nastaveni vysky tonu. Normalne je PP 64 (0-127). 0 je o dva pultony podladeno, 1 nadladeno.
- Fx systemove zpravy libovolne delky a typu, nepouziva se x jako kanal
- F1,TT - 2 bajty - TT = casovy kod MTC viz dale
Casovy kod MTC
MTC je kod casove synchronizace pouzite pro MIDI nastroje a spousta zvukovych programu se podle nej umi ridit. Kod obsahuje vzdy 2 vyslane MIDI bajty, prvni je vzdy F1, druhy pak obsahuje v hornich 4 bitech poradove cislo bloku, v dolnich 4 bitech pak data. Tyto bloky se vysilaji 4 behem jednoho policka (tedy v nasem pripade je frekvence posilani 25*4=100x za sekundu). Celkem na kompletni casovou informaci je ale potreba bloku 8, kde kazdy obsahuje neco. Celkem to vypada nasledovne:
- Blok 1: F1,0a
- Blok 2: F1,1b
- Blok 3: F1,2c
- Blok 4: F1,3d
- Blok 5: F1,4e
- Blok 6: F1,5f
- Blok 7: F1,6g
- Blok 8: F1,72
Kde a jsou jednotky FRAME, b jsou sestnactky FRAME. To je zasadni rozdil oproti SMPTE, ze MTC koduje v HEXA kodu, tedy kupr 20 FRAME bude vypadat: F1,04 ---- F1,11. c jsou jednotky SEC, d sestnactky SEC, e jednotky MIN, f sestnactky MIN, g jednotky HOD a nakonec je specialni byte, ktery obsahuje informace o typu kodu a poctu snimku za sekundu. Pro 25 snimku 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 kod se vysila v pravidelnych intervalech kazdych 10msec a cela sekvence se opakuje po dvou snimkach
znova. Nepodarilo se mi zjistit ani u jednoho z obou kodu (SMPTE,MTC), kdy je platny zacatek casu a pro ktere policko to plati. Myslim, ze v SMPTE plati adresa pro prave probihajici
policko, u MTC je to slozitejsi a tak nevim. Pokud o tom mate vice informaci, poslete mi prosim mail.
Prevodnik SMPTE -> MTC
Pro prevod kodu SMPTE na MTC je potreba detekovat a demodulovat SMPTE kod, ziskat kompletni casovou informaci, tu opet pouzit a v pravidelnych intervalech vysilat na sbernici MIDI jako kody MTC. Jako detektor je mozne postavit symetricky vstup s dolni propusti 3000Hz a komparatorem, ja jsem v praxi z nouze vyzkousel prijimac RS422. Neni to zrovna ucebnicove zapojeni, ale funguje to taky (ovsem je to na ukor snizene citlivosti a odolnosti proti sumum).
Pro nektere typy procesoru ze seriovym kanalem je to brnkacka pro procesor PIC trosku problem. Nakonec se mi celou vec podarilo vyresit trosku zbesilym algoritmem, ktery nasel snad jedine mozne reseni jak zaroven prijimat SMPTE a vysilat MIDI. Je to ovsem na ukor hodinove informace, na jejiz prijem mi uz nezbyl cas. Nemyslim si, ze by to byla velika chyba, nebot s projekty nad hodinu asi pracuje malokdo a pokud ano, proste mu to na strane PC vyhodi cas s 00 hodinami. Na schematu uvedeny PIC 16C84 neni platny, program jsem jiz upravil pro PIC 16C54, ktery je levnejsi. PIN RB7 je treba spojit s 5V. Tento pin lze pouzit jako DISABLE OUT pin. Pokud jej spojime s GND, prestane procesor posilat MTC data, pricemz stale prijima a analyzuje SMPTE DATA. Vystup zle opet v libovolnem okamziku uvolnit. To obcas muze byt vyhodne pokud potrebujeme pouze rozbehnout prehravani a dale kod neposilat. Dalsi pomocny pin je RB.4, coz je testovaci pin SMPTE. Lze na nej pripojit LED a pokud sviti (25Hz- tedy prakticky sviti)je SMPTE na vstupu bez chyby, pokud poblikava, jsou na vstupu vypadky, nebo je nedostatecna sila vstupniho signalu, brum na vstupu apod. Pouziti led diody pres odpor pripojene na GND je vubec vyhodne jako rycha diagnostika stavu kodu. Tento vystup lze take pouzit jako 25Hz referenci pokud je to nutne. Teoreticky by procesor po drobne zmene programu mohl dodavat i referencni signal 100Hz, ci 200Hz, coz by se dalo pouzit kuprikladu jako fazovy zaves motorku magnetofonu apod.
Chyby programu a nedostatky:
- Program neumi vyresit dropout na vstupnim signalu, v tom okamziku zacne vysilat neplatna data (cca 2 sekvence)
- Program nema mod behu bez vstupu (typicky kupr rozebehnout se pomoci SMPTE a pak pokracovat podle sveho krystalu dale, coz muze byt vyhodne pro MASTERING, kdy by nam ztrata MTC signalu vadila vice, nez chyba, okterou se oscilator procesoru rozjede za urcitou dobu)
Zdrojovy kod programu je ZDE, je popsany dost detailne na to, aby se z nej dalo vycist, jak to vlastne funguje. Datovy soubor pro programator je pak ZDE. Program je udelan v assembleru PARALLAX , viz take stranka o programovani PIC.
Program na generaci SMPTE kodu do WAV souboru
SMPTEGEN.EXE - Zde je kratky a jednoduchy program na generaci SMPTE kodu do WAV souboru tak, aby se dal z pocitace nahrat na pasek, na kterem je potreba ho mit. Program potrebuje ke sve funkci knihovnu VBRUN300.DLL (kterou by jste ale stejne na pocitaci meli mit, tak ji ani nepridavam) a ovladani je desne jednoduche. Zadaji se hodnoty TIMECODU OD ->DO a typ a jmeno souboru. Typ je mozny pouze 8Kb mono ci 32Kb mono. Osobne doporucuji pouzit 32Kb mono a v nekterem programu na zpracovani WAV to vyfiltrovat dolni propusti cca 5kHz. Pak lze WAV soubor nahrat kamkoliv. Pro zajimavost pak uvadim i zdrojovy kod programu ve VISUAL BASICU ZDE
Prakticke pouziti prevodniku
Konecne se dostavam k tomu, co tento clanek a zapojeni muze ctenarum dat, k praktickemu pouziti a zkusenostem sprevodnikem.
Existuji v zasade 4 moznosti, jak prevodnik vyuzit:
- A) Jsem filmovy amater a mam k dispozici pouze dve obycejna videa
- 1. Zvuk sestrihaneho filmu stahnu do pocitace
- 2. Nakopiruji obraz z videa A do B, misto zvuku nahravam SMPTE WAV soubor z pocitace
- 3. Video prehravam z kazety, zvukovou stopu posilam pres prevodnik a synchronizuji s ni nektery program na zpracovani WAV v pocitaci viz dale. Zkusmo zjistim ofset nahravky. To se udela tak, ze odhadnu zhruba misto, kde na kazete zacina SMPTE kod a misto, kde ma zacinat zvuk a nastavim tento rozdil jako ofset. Pote zkusmo poustim zaznam a menim nepatrne tento ofset. V okamziku, kdy se mi zvuk i obraz jevi synchrone je to hotovo.
- 4. Nyni mohu na pocitaci dodelavat efekty, ruchy, dialogy a podobne. Vzdy pak muzu scenu pustit na videu a pocitac by mi mel umoznit poslechnout si synchrone aktualni stav zvuku.
- 5. Az je hotovo, vezmu nahravku B a kopiruji ji na 2. stroj. Zvukem SMPTE z kazety opet synchronizuji
pocitac a zvuk z pocitace jde do 2. stroje. Vysledkem je ozvucena nahravka.
Nevyhodou teto metody je velke mnozstvi nutnych kopirovani (2.)
- B) Jsem filmovy amater a mam k dispozici video s moznosti A DUB
- 1. Zvuk sestrihaneho filmu stahnu do pocitace
- 2. Nakopiruji do zvukove stopy SMPTE WAV soubor z pocitace (je nutne nechat na zac. nekolik sekund navic)
- 3. Video prehravam z kazety, zvukovou stopu vedu pres prevodnik a synchronizuji s ni nektery program na zpracovani WAV v pocitaci viz dale. Zkusmo zjistim ofset nahravky. To se udela tak, ze odhadnu zhruba misto, kde na kazete zacina SMPTE kod a misto, kde ma zacinat zvuk a nastavim tento rozdil jako ofset. Pote zkusmo poustim zaznam a menim nepatrne tento ofset. V okamziku, kdy se mi zvuk i obraz jevi synchrone je to hotovo.
- 4. Nyni mohu na pocitaci dodelavat efekty, ruchy, dialogy apodobne. Vzdy pak muzu scenu pustit na videu a pocitac by mi mel umoznit poslechnout si synchrone aktualni stav zvuku.
- 5. Az je hotovo, rozjedu video od zacatku kodu, PC je opet synchronizovano pomoci SMPTE z videa a vystup
audia z PC je vedeny do videa. Program na PC nastavim tak, aby MTC pouze rozjelo play, ale aby se nahravka dale bez
MTC nezastavovala (GOOD LUCK pri nastavovani). Audiu na PC pridam par sekund na zacatku, aby se rozjizdelo jeste v
casti pred filmem a posunu podle toho MTC offset. V okamziku tesne pred zacatkem videa (ale pote co se rozjede audio
z PC) prepnu audio stopu videa na REC a nahravam audio.
TIP: v pripade delsich nahravek udelejte nekolik sekvenci (kvuli presnosti casoveho kodu, video se preci jen muze za par minut o par snimku rozjet) a ty pak na kazetu nahravejte odzadu (aby na zac. vzdy byl SMPTE kod)
- C) Jsem filmovy amater a mam k dispozici stereo video
- 1. Zvuk sestrihaneho filmu stahnu do pocitace (pri inteligentni zvukovce by se teoreticky dalo zaroven nahravat na podelnou stopu videa SMPTE z SMPTE WAV takze by odpadalo hrani si se synchronizaci.
- 2. Dale je to podobne jako v bodech A a B. Pokud chci nakonec vysledny zaznam ve stereu, je nutne jeste jedno video (i obycejne) jako player originalni nahravky se SMPTE kodem v podelne stope, pokud staci mono je to stejne jako v bode B
- D) Jsem filmovy amater a mam k dispozici profi video
- Dle typu a moznosti videa...
Nektere pouzitelne programy
Tady neni jednoznacna definice. Lze proste pouzit jakykoliv WAV editor (nejlepe multistopy), ktery se umi synchronizovat pomoci MTC. Kupr:
- SOUND FORGE
- pouze jedna stereofonni stopa, dokaze nahravat a startovat na casovou udalost. Prinutil jsem ho pouze se rozjet, pak bezi i bez MTC. Nedokazal startovat odkudkoliv.
- Idealni pro mastering, ne pro strih
- COOL EDIT PRO
- multitrak
- perfektni pro strih, umi se rozjizdet odkudkoliv a kdykoliv
- musi mit neustale MTC, jinak po urcite dobe zastavi
Autor: Ondrej Vitous