Start

MIDI synchronisatie

Graag wil ik deze keer iets meer vertellen over synchronisatie ....

In tegenstelling tot wat velen misschien vermoedden, bestaat een synchronisatie-signaal niet enkel en alleen uit één continu signaal, maar is het eerder een reeks boodschappen, verzonden door een master, die continue info en opdrachten verzendt naar een of meerdere slaves in een keten, en bovendien deze toestellen "persoonlijk" kan aanspreken. Anders gezegd: een master verzendt opdrachten en info voor een bepaald slave toestel, terwijl een ander slave in diezelfde keten helemaal niet zal reageren, omdat die info gewoonweg niet voor dat toestel bestemd is.

Ook op de toestellen zelf, zeker ook computers en hun software, kunnen meestal de slave/master eigenschappen ingesteld worden. Dat betekent dat de master meer of minder kontrole zal hebben over een slave, naarmate de slave is ingesteld op de mate van afhankelijkheid van de master. Ik denk dan bijvoorbeeld aan wanneer Timecode is gedetecteerd door een slave, mag deze dan zijn interne Clock behouden, maar toch starten ... ? Of altijd van Clock veranderen en starten ... ? Of ook, nooit van clock veranderen en nooit starten ... ?

Mijn bedoeling is om hier een beetje inzicht te geven over hoe zo'n synchronisatie-signalen opgebouwd zijn. Zeg maar, welke "onderdelen" er zoal in voorkomen, en hoe ze gebruikt worden. Zonder moeilijke wiskundige knowledge. Ik kan mij ook goed inleven in de situatie, dat het verdomd moeilijk kan zijn, zeg maar quasi onmogelijk, om 2 machines “in sync” te brengen, zonder te weten wat we exakt aan’t doen zijn. Dit mede uit eigen ervaringen ... natuurlijk ... Het is helaas niet voldoende "dat we een MIDI-IN en een MIDI-OUT door middel van een MIDI-kabel kunnen verbinden". Dat impliceert dus niet dat we de kennis en kunde hebben om een zinvolle synchronisatie te kunnen bewerkstelligen. De volgende uitleg kan je daarbij misschien wel helpen?!

Ik ga ook engelstalige uitdrukkingen, "termen" gebruiken. Dit om reden dat ik een beetje in "jargon-taal" wil schrijven, en ook omdat veel van de gebruikte termen gewoonweg (mede)Amerikaanse vindingen zijn die bovendien wereldwijd worden toegepast ... al dan niet in 't Engels ... ;-) Maar ik zal mijn best doen om het voor iedereen, inclusief mezelf verstaanbaar te proberen houden!

SMPTE

Afkorting voor: Society of Motion Picture and Television Engineers. Deze club adopteerde een tijdcode-systeem dat gebaseerd is op de werkelijke tijd. (uren:minuten:seconden:frames) Omdat SMPTE een onvoorwaardelijk adres voor elk frame bepaalt, is het zeer geschikt om ook te gebruiken met niet film-gebaseerde synchronisatie toepassingen zoals het synchroniseren tussen twee taperecorders of de byte georganiseerde protocols voor computers. Het SMPTE protocol bij computergebruik omvat een 80 bits woord (genummerd van 0 tem. 79) en bestaat uit twee delen. Het eerste woord wordt toegewezen aan nibbles (vier bits) en kan worden gebruikt om een nummer van 0 – 9 te vertegenwoordigen. Het tweede deel bevat een 16 bit sync woord. De resterende bits worden gebruikt voor User Data zoals shot, take, reel number, location-data en de datum.

Een recente ontwikkeling is, dat men op elke camera (en audio-apparatuur) een gps-gesynchroniseerde SMPTE Tijdcode generator plaatst. Dit maakt een Timecode distributie-netwerk via kabel overbodig en geeft voordelen bij opnames op lokatie, alsook naderhand bij de montage, zodat alle materiaal op het gelijke moment in éénzelfde tijdlijn kan teruggevonden worden.

MIDI Time Code (MTC) is een toegevoegd protocol binnen MIDI, en wordt gebruikt om 2 apparaten die in de tijd, over een tijdslijn dus, een performance aanleveren, van een gemeenschappelijke controle over die tijds-lijn/basis te voorzien.

Men zegt dan dat deze twee toestellen gesynchroniseerd met elkaar lopen, of "in sync" zijn.

Bijvoorbeeld een sequencer en een video deck: Het video-deck drukt zijn tijd uit in Uren/minuten/seconden/frames, waarbij die frames 1/100ste seconden kunnen zijn, maar ook 24 frames (beelden per minuut), of ook nog als digitale frames ... De sequencer hanteert dan weer een heel andere tijdbasis. Deze loopt in de tijd met Beats per Minuut (BPM), in een bepaalde maatsoort (3/4, 4/4, 6/8, ...) en telt bovendien een aantal ticks of pixtels per kwart-noot (PPQ).

MTC boodschappen zijn een alternatief om MIDI Clocks en Song Position Pointer boodschappen te gebruiken. MTC is eigenlijk SMPTE, maar dan een gemuteerde variant, bruikbaar voor verzending via MIDI. SMPTE verwijst naar de absolute tijd van één dag. 23uur/59minuten/59seconden/honderdsten van één seconde. MIDI Clocks en Song Position Pointer boodschappen zijn echter gebaseerd op muzikale beats, te beginnen vanaf het startpunt van een song, gespeeld aan een bepaald tempo. Om velerlij (niet-muzikale) redenen, is het voor mensen eenvoudiger om tijd-referenties te kunnen volgen en uit te drukken in een absolute waarde (denk aan chronometer), eerder dan te verwijzen naar muzikale beats aan een zeker tempo.

Quarter Frame

De belangrijkste informatie is de Quarter Frame message (Dit is bovendien geen SysEx bericht of boodschap). Deze heeft als status 0xF1 plus een toegevoegde databyte. Deze boodschap wordt periodiek verzonden om strak te blijven aan de lopende SMPTE tijd. Het is analoog aan de MIDI Clock boodschap. De Quarter Frame messages worden verzonden aan een snelheid van 4 per elke SMPTE frame. Met andere woorden, in de tijd dat een slave-machine 4 Quarter Frame Messages heeft ontvangen, is er slechts één SMPTE frame gepasseerd. Dus, de Quarter Frame messages voorzien je systeem met een "sub frame" Clock referentie.

Aan 30 fps SMPTE, krijg je een "Clock Tick" op elke 8,3 milliseconden (30fps x 4 = 120 sub frames & 1000msec/120 = 8,33 msec.).

Maar de Quarter Frame message is meer dan één enkele "klok Tik". De Quarter Frame message's data byte bevat de SMPTE tijd (uren, minuten, seconden, frames). SMPTE tijd is normaal uitgedrukt in 80 bits. Uiteraard zijn dit te veel bits om in één 8-bit data byte te kunnen stoppen. Daarom bevat elke Quarter Frame message slechts een deel van van die tijdsinformatie
(een Quarter Frame bevat bijv. enkel de uren). Een Slave-machine dient dus meerdere Quarter Frame messages te ontvangen, om alzo de volledige SMPTE tijd te kunnen interpreteren en uitvoeren. Er zijn 8 Quarter Frame messages nodig om de huidige SMPTE tijd te kunnen transporteren. Dit betekent dat, in de tijd die een slave nodig heeft om de stukjes bij elkaar te brengen tot huidige SMPTE tijd, er reeds twee SMPTE frames zijn gepasseerd. (4 Quarter Frame messages per één SMPTE frame). Aldus, de Midi Time Code (MTC) versie van SMPTE tijd, tikt of telt in groottes van twee SMPTE Frames per update van de huidige SMPTE tijd.

De eerste van de 8 Quarter Frame messages bevatten de low nibble (bits 0 tot 3) van de Frame-Tijd. De tweede Quarter Frame message bevat de high nibble (bits 4 tot 7) van de Frame-Tijd.

De derde en vierde boodschap bevatten de low en high nibbles van de Seconden-Tijd. De vijfde en zesde messages bevatten de low en high nibbles van de Minuten-Tijd. De zevende en achtste bodschappen bevatten de low en high nibbles van de (H)Uren-Tijd. De achtste message bevat eveneens de SMPTE frames-per-seconde Type boodschap ('24, 25, 30 drop, 30fps, ...)

Full Frame

Om een slave te brengen tot bij een privaat of uniek startpunt, worden geen Quarter Frame messages gebruikt, maar gaat men een MTC Full Frame message verzenden. Een Full Frame message is een SysEx (System-Exclusive) message. Een uitzonderlijke systeemboodschap dus, waarin de volledige SMPTE tijd is gecodeerd in één boodschap.

Dit bericht bevat het SysEx kanaal (0-127). Het wordt aanbevolen om standaard instellingen van de fabrikant van de apparatuur te gebruiken met betrekking op het SysEx ID nummer voor dit kanaal. Maar het geeft de gebruiker de mogelijkheid om specifiek één bepaald toestel aan te spreken. (Daarom dat ik dit ook wil vermelden, omdat omgekeerd, bij gebruik van een ander of foutief SysEx IDentification-nummer, het betreffende toestel uiteraard niet gaat reageren ...)

De Full Frame message bevat verder de uren, minuten, seconden, en aantal frames van de huidige SMPTE tijd.

De byte die de uren bevat, bevat eveneens de SMPTE Type boodschap, als een Quarter Frame's High Nibble message.

Eenvoudig gezegd, een Full Frame message stuurt de slave tot bij een persoonlijke SMPTE tijd.

De slave zal hierna niet automatisch in start/play overgaan, tenzij en enkel wanneer men nu Quarter Frame messages gaat verzenden. Of, anders gezegd, wanneer de slave nu Quarter Frame messages gaat ontvangen, start het toestel vanaf de via SysEx verzonden info.

... Natuurlijk, moeten de slave voorwaarden op de betreffende slave in overeenstemming gebracht zijn ...

Op tape gebaseerde toestellen, maar dat kan ook op hardware met harde schijven, worden deze boodschappen gebruikt om vooruit en terug te spoelen (Fast Forward & Rewind, shuttle modes). De master hoeft dan geen continue Quarter Frame boodschappen te verzenden, maar maakt gebruik van Full Frame Boodschappen op regelmatige intervals.

User Bits

SMPTE is eveneens voorzien van 32 "user bits". Dit voor informatie aangaande speciale funkties die varieren van toestel tot toestel en ook fabrikant-gebonden zijn. Het is gewoonlijk zo, dat user bits niet veranderen tijdens de run van een time code. Een voorbeeld waarbij gebruik wordt gemaakt van user bits is bijv. het toevoegen van een datum ...

MTC daarintegen, maakt eerder gebruik van een afzonderlijke SesEx message om zulke info te verzenden, ipv. zulke info met de
Quarter Frame message mee te geven.

Nochthans, User Bits messages kunnen op elk gewenst ogenblik verzonden worden naar eender welke machine in een daisy-chain.
(De User Bits worden gewoonlijk geprogrameerd van op de apparatuur die zulke functies ondersteund).

Notation Information

Er bestaan twee Notation Information boodschappen, dewelke kunnen worden gebruikt om aan een muzikant muzikale maten en beats info te verstrekken. Maar het kan ook belangrijke info zijn voor bijv. een sequencer, arpeggiator, ... om in een bepaalde maatsoort te tellen en/of interacten.

1) Time Signature message;

Deze boodschap kan de maatsoort doorgeven, alsook maatsoort veranderingen.
Bijvoorbeeld starten in een 4/4 maat en bij de negende maat overgaan naar 3/4 ....

2) Bar Marker message;

De Bar Marker boodschap duidt de start of begin van een muzikale maat aan. Deze messages worden ook gebruikt voor bijv. Een "count down" of aftelling. Bij sequencers kan het gebruik van Bar Marker messages ook nog gebruikt worden voor bijv. een"stopped play" commando, of een running conditie verzenden, zonder rekening te houden met een maatsoort, ...

Men bekomt deze commando's door bijv. negatieve waardes te verzenden.

-1 impliceert 1 maat introduktie en 0 verwijst naar geen aftelling.

Het maximale negatieve nummer geeft dan weer een "stopped play" condition, of nog, een maximale positieve waarde impliceert een running condition, maar geen idee welk maatnummer. Dit laatste vindt oa. zijn toepassing bij het markeren van een passage, zodat de sequencer geen rekening meer houdt met de aktuele maatnummers ...

Setup Message

Met de Setup Message kan men tot 19 gedefiniëerde "gebeurtenissen" toevoegen aan het synschronisatie-signaal. Een master-machine gebruikt deze messages om de slave te zeggen welke gebeurtenis uit te voeren én wanneer.

Hier is een algemeen voorbeeld voor gebruik van deze boodschap

F0 7F cc 04 id hr mn sc ff sl sm (more info) F7

cc is het SysEx channel (o tem 127)

hr mn sc ff is de SMPTE tijd wanneer de gebeurtenis plaatsvindt. Vergelijk het met de Full Frame message, uitgezonderd dat er ook nog een fractie van een frame parameter werd toegevoegd. Namelijk, ff, welke staat voor 1:100ste van één frame (met een waarde van 0 tem 99 natuurlijk ...).

sl sm is deze gebeurtenis haar 14-bit Event Number (0 tem 16.383)

sl is bits 0 tem 6, en sm is bits 7 tem 13.

id zegt wat het Event Type is. Afhankelijk van het Type, zal de boodschap toegevoegde bytes bevatten. De volgende waardes voor Event Types zijn gedefiniëerd, en lees wat elke van dezen doen.

Special (00)

Bevat setup info die een machine algemeen gaat beinvloeden, zoals toevoegingen aan individuele tracks, sounds, programs, sequences, enz ...) Zodoendeis het Event Number een woord dat verder zal beschrijven, wat de gebeurtenis zal inhouden. Zoals de Time Code Offset (00 00) en verwijst naar een relatieve Time Code offset voor elke unit. Bijvoorbeeld: bij twee muziekstukken is het de bedoeling dat deze gelijktijdig afgespeeld worden, maar werden opgenomen op verschillende tijden. Daarom hebben deze twee opnames verschillende absolute time code posities, en is het noodzakelijk dat we bij één van de twee tijden een compensatie gaan toevoegen, om alsnog de twee muziekstukken gelijktijdig met elkaar te matchen. Of nog: elke slave machine zal dus op een eigen offset-time ingesteld moeten worden, zodat alle slaves van de daisy-chain uiteindelijk overeenkomen met de gemeenschappelijke SMPTE start time van de master.

Enable Event List (01 00) betekent voor de slave dat berichten, vastgelegd in zijn interne “list of events” mogen uitgevoerd worden, bij het passeren van de respectivelijke SMPTE tijden.

Disable Event List (02 00) geen uitvoering van opdrachten die voorkomen in de slave zijn interne “list of events”. Echter, zonder deze lijst te wissen.

Clear Event List (03 00) betekent voor de slave om alle gebeurtenissen, voorkomend in zijn interne “list of event” te wissen.

System Stop (04 00) Verwijst naar een tijd waarop de slave mag stoppen. Dit om te voorkomen dat de slave bepaalde commando’s blijft uitvoeren. Zoals start commando’s zonder daarop volgende stop commando’s. (tape-recorders lopen voorbij het einde van een reel, enz ...)

Event List Request (05 00) wordt verzonden door de master, en vraagt aan de slave met het overeenkomstige kanaalnummer, om alle events voorkomend in de lijst, te verzenden. En wel, te beginnen met deze bewerking vanaf de meegedeelde
SMPTE tijd in deze boodschap.

Voor álle vijf hierboven vermelde berichten wordt geen SMPTE time gebruikt ...

Punch In (01) & Punch Out (02)

Dezen verwijzen naar de “armed” of “not armed” record mode op de slave. Het Event Number verwijst naar welke track moet worden opgenomen. Meerdere Punch In en Punch Out points zullen worden gespecifieerd door het verzenden van meervoudige Setup berichten met verschillende SMPTE tijden.

Delete Punch In (03) en Delete Punch Out (04)

Verwijder de Punch IN of Punch Out, inclusief het overeenkomstige Event Number (track) en de daarbij behorende SMPTE tijden.

Event Start (05) en Event Stop (06)

Verwijst naar de start/stop (bijv. playback) en impliceert een continue aktie.
Maw, een aktie die begint nadat een Event Start is ontvangen, en zal voortduren totdat een Event Stop werd ontvangen. De Event Number verwijst ook naar welke aktie op de slave dient gestart/gestopt te worden. Zulke akties kunnen evengoed de playback van een gespecifiëede wavevorm, geplaatst in een loop betekenen. Maar eveneens een bewegende fader op de geautomatiseerde mengtafel.

Event Start (07) en Event Stop (08) met aanvullende info

Ongeveer identiek aan de twee vorige vermelde Event Types, met dit verschil dat deze toegevoegde bytes bevatten vóór het beëindigen met 0xF7. Zulke toegevoegde bytes kunnen dienen om parameters op bijv. effect unit’s te veranderen, zoals effect level, volume level. Voorbeeld: Een Note On message 0x91 0x46 0x7F werd dan gecodeerd met toegevoegde info bytes, en zou dan iets kunnen worden in 0x01 0x09 0x06 0x04 0x0F 0x07.

Delete Event Start (09) en Delete Event Stop (0A)

Verwijdert het Event Start of Event Stop, te samen met het overeenkomstigeEvent Number en bijbehorende SMPTE tijd van de slave’s events (of To Do) lijst.
Met andere woorden, deze opdrachten verwijderen een eerder verzonden Event Start of Event Stop Setup bericht. Gelijk welk Type bericht, een met of zonder toegevoegde info.

Cue Point (0B)

Hiermee kunnen we een aktie triggeren, zoals een “hit” point voor een Sound effect, of gewoon een marker op een specifieke SMPTE tijd plaatsen. Het Event Number verklaart wederom de aktie of de marker.
Bijv; Event Number 5 zou kunnen dienen om een telefoongeluid te laten rinkelen. Nu kunnen we, gebruik makend van meerdere keren het Event Number 5 op verschillende SMPTE tijden, de telefoonsound meerdere keren laten horen.

Cue Point (0C) met toegevoegde info

Hetzelfde zoals hierboven, maar dan met toegevoegde bytes vóór de einde boodschap 0xF7. Zulke toegevoegde bytes kunnen dienen om effect apparatuur parameters te manipuleren.

Delete Cue Point (0D)

Verwijdert de Cue Point Setup message met hetzelfde Event Number en de overeenkomstige SMPTE tijd van de slave event list.

Event Name (0E) met toegevoegde info

Hiermee kan je een ASCII naam toekennen aan het event met het overeenkomstige Event Number en SMPTE tijd. Voor muzikanten een referentiepunt. De toegevoegde info bestaat uit de (ACSII karakters) naam. De ACSII bytes zijn “nibblized”, wat wil zeggen dat de ACSII “A” (0x41) bestaat uit de twee bytes, 0x01 0x04.

Timecode als numeriek schema

Wanneer je gebruik gaat maken van een tijdsbeschrijving in “uren:minuten:seconden:frames”, dan gebruik je dus een numeriek schema verwijzend naar tijd in tijdcode. Zulk een schema vindt overal zijn toepassingen, maar in alle gevallen blijft dit numeriek schema hetzelfde.

Enkele van de meest gebruikte timecode signalen over kabel zijn:

LTC – Longitudinal Time Code

LTC, soms dubbelzinnig verwijzend naar als SMPTE time code, is een self-clocking signaal en afzonderlijk gedefiniëerd voor 60M-frame-per-seconde en 50M-frame-per-seconde signalen. Het signaal gebruikt zijn eigen kanaal en vervat een audio signaal in voltage en bandbreedte. LTC is de meest algemene keuze om een machine te slaven aan de transportreferenties van een ander toestel, op voorwaarde dat de framerates dezelfde zijn op beide toestellen en beide apparaten niet moeten “genlocked” worden.

LTC is voor video bedoeld (er bevindt zich in het signaal een code woord voor ieder video frame), maar is in audio en MIDI applicaties bruikbaar, zelfs zonder video signaal.

Op computer heb je zelfs geen specifieke hardware nodig om van LTC timecode gebruik te kunnen maken. Plug je signaal in een audio input en analyseer het met je software. Nochthans blijft het op deze manier tricky! ...

VITC – Vertical Interval Time Code

VITC timecode is een standaard onderdeel van een video signaal. Bij MTC en LTC moet de master aan’t lopen zijn, wil de slave kunnen weten waar de master zich in de tijdslijn bevindt. VITC bevindt zich in het vertikale gedeelte van een videosignaal, en heeft als voordeel dat daarmee de aktuele tijd ook bij stilstand nog steeds verzonden wordt ...

D-VITC – Digital Vertical Interval Time Code

VITC was erg bruikbaar in de video industrie, dat toen deze overschakelde op digitale electrische signalen en de daarbij behorende tape formaten, men het oude protocol herdefiniëerde zodat je een full VITC codewoord, inclusief timecode, userbits, enz ... in het video raster digitaal kan verwerken.

Dit formaat is zelfs nog eenvoudiger voor een computer om te lezen, gezien devideo-input kaart deze regionen voor je kan uitfilteren.

MIDI Time Code

Algemeen gebruikt in de audio wereld. Soms gebruikt men LTC hiervoor, dan weer MIDI time code als verkozen clock signaal. In de laatste jaren heeft men MIDI geupdate naar snellere links, maar het timecode idee is hetzelfde gebleven. Tegenwoordig sluit men een computer aan op MIDI via USB (modern), maar vroeger werd veelvuldig gebruik gemaakt van een seriële COM poort, of ook wel de game port voor dergelijke transmissie.

Je kan je MIDI-platform met de daarbij aangelegde bibliotheken gebruiken om MIDI timecode te verzenden en ontvangen, net zoals het versturen van een andere MIDI control message.

AES / ADAT / ... Digital Audio Streams

Een ander algemeen gebruikt timecode signaal in de audio wereld, meer speciaal in productie studio situaties, zonder MIDI sequencers, is het stille AES digital Audio. De AES standaard laat toe om timecodes in het audio signaal te verwerken, wat perfect is voor multitrack tape decks met digitale inputs.

Bij ADAT systemen komt men dikwijls ook de ADAT 9-Pin Sync & word clock tegen. Veelal gebruikt men dan de 9-pin ADAT sync connectie enkel voor de ADAT timecode, en niet voor het word clock signaal. Het is echter wel mogelijk om word clock te verzenden en ontvangen via de 9-pin sync kabel.

Andere ADAT systemen verkiezen dan weer de optische kabels voor de word clock. Om een Adat timecode perfekt te laten verlopen, is het gebruik van word clock synchronisatie eigenlijk noodzakelijk.

Timecode als een signaal op tape

Meestal maakt men hiervoor gebruik van een synchronizer/ event reader en/of SMPTE naar MTC converter. Sommige tapedaecks hanteren zelfs een persoonlijke timecode. Andere machines hebben mogelijk alle hardware reeds aan boord om zelf te kunnen lezen, schrijven & converteren ...

Proficiat! Mocht je ooit tot hier geraakt zijn met lezen ... Natuurlijk heb ik al deze info door opzoeking via het World Wide Web en ook vanuit handleidingen van betreffende apparatuur weten samen te sprokkelen.

Mocht iemand nog toevoegingen willen doen, of op grove fouten stuiten in deze lectuur, reageer dan gerust! Je kan er ons allemaal een grote dienst mee bewijzen!