Hi Stephane, Thanks. I've found how to find the SMPTE offset (FF 54), but what I'm after is turning it's hr (hours and type) byte into a string that reads hr eg 12 hours and 01 if 25FPS. I don't need to create an 80bit TC word as such.
I haven't work much at the bit level so if I have a Midi TC HR that equals 32 (integer), how do I turn that into SMPTE HR and Type? Many thanks, Mark Wednesday, May 31, 2006, 11:48:45 AM, you wrote: > Hi Mark, > The MIDI Time Code is typically handled via a System Exclusive (SysEx) > message that has the following forumat: > F0 7F cc 01 01 hr mn sc fr F7 > That can be interpreted as: > F0 7F <- Universal Sysex Header > cc <- MIDI Channel > 01 <- Sub ID#1 MTC > 01 <- Sub ID#1 Full Time Code Message > hr <- Hours and Type 0yyzzzzz > yy = the type (00=24fps, 01=25fps, 10=30fps > dropframe, 11=30fps non dropframe) > zzzzz = hours (0-23) > mn <- Minutes (0-59) > sc <- Seconds (0-59) > fr <- Frames (0-29) > F7 <- End of Sysex Message. > As you can see, all the information to create an SMPTE time code is present. > All you need to do is when you read this series of bytes, isolate the hr > field (the 6th byte read) and you'll have your hours. > SMPTE or Logitudinal timecode data format is formatted like so: > Longitudinal timecode data format > The basic format is an 80-bit code that gives the time of day to the second, > and the frame number within the second. > The bits of the longitudinal SMPTE code: > 0..3: Frame units > 4..7: user-bits field 1 > 8..9: Frame tens > 10: 1=drop frame format (frame 0 and 1 omitted from first second of each > minute, but included when minutes divides by ten; approximates 29.97 > frame/s) > 11: 1="color frame", i.e. the time code is intentionally synchronised with > a color TV field sequence. > 12..15: user-bits field 2 > 16..19: seconds units > 20..23: user bits field 3 > 24..26: second tens > 27: Bi-phase mark-correction bit; set or cleared so every 80-bit word has > an even number of zeros. In a linear timecode system, this ensures that > there is no net current flow, and also allows a technician to read the > bi-phase coding timing with an oscilloscope, without the signal inverting > itself continually. Modern equipment regenerates the time code to a fixed > timing in the video vertical interval, so this is far less needed than > before. > 28..31: user bits field 4 > 32..35: minutes unit digit > 36..39: user bits field 5 > 40..42: minutes tens digit > 43: binary group flag bit (with bit 59, 43,59 = 00 = no format for user > bits, 10 = eight bit format, 01, 11 are unassigned and reserved). > 44..47: user bits field 6 > 48..51: hours units > 52..55: user bits field 7 > 56..57: hours tens > 58: unused, reserved, should transmit zero and ignore on receive for > compatibility > 59: binary group flag bit (see bit 43 for encoding) > 60..63: user bits field 8 > 64..79: sync word, should be 0011 1111 1111 1101 > As you can see, bit 38 to 51 represent the hour units and bits 56 and 57 the > 10s of hours. . you just need to convert your hexadecimal hour value to a > binary equivalent and and or them together... > for example: > So for the sake of discussion say you have 14 hours > 01 for the 10s of hours > 0100 for the units > you just simply invert that to > 0100 01 > insert 40 0 bits before this value, giving you: > 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 01 > and you OR that value with your current SMPTE bit stream. So if you have > this: > 0101 0101 0101 1010 1010 1010 0000 0000 0000 0000 0000 0000 0000 0000 0000 > 0000 0011 1111 1111 1101 > OR > 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 01 > will give you > > unit 10s > 0101 0101 0101 1010 1010 1010 0000 0000 0000 0000 0000 0000 0100 0100 0000 > 0000 0011 1111 1111 1101 > and your time should now be at the right place in the SMPTE message and in > the right order. > If you want more details, let me know. > HOpe this helps > Stephane Richard > ----- Original Message ----- > From: "Mark" <[EMAIL PROTECTED]> > To: <[email protected]> > Sent: Tuesday, May 30, 2006 8:19 PM > Subject: Converting Midi Timecode Hours to SMPTE Timecode hours >> I've seen a few post regarding Midi here so I was hoping someone might >> be able to lend a hand with the following... >> >> I've managed to read everything in a midi file that I need but are >> stumped with the Midi TC Hours byte. I've found this article at: >> http://www.borg.com/~jglatt/tech/mtc.htm which says: >> >> In the data byte for the Hours High Nibble and SMPTE Type, the bits >> are interpreted as follows: >> >> 0nnn x yy d >> >> where nnn is 7. x is unused and set to 0. d is bit 4 of the Hours >> Time. yy tells the SMPTE Type as follows: >> >> 0 = 24 fps >> 1 = 25 fps >> 2 = 30 fps (Drop-Frame) >> 3 = 30 fps >> >> Does anyone have some sample code or able to explain how to turn a >> Midi TC hex hour field into a SMPTE hour field and SMPTE type value. >> >> >> Best regards, >> >> Mark >> >> _______________________________________________ >> Unsubscribe or switch delivery mode: >> <http://www.realsoftware.com/support/listmanager/> >> >> Search the archives of this list here: >> <http://support.realsoftware.com/listarchives/lists.html> >> >> >> -- >> No virus found in this incoming message. >> Checked by AVG Free Edition. >> Version: 7.1.394 / Virus Database: 268.7.4/351 - Release Date: 5/29/2006 >> >> > _______________________________________________ > Unsubscribe or switch delivery mode: > <http://www.realsoftware.com/support/listmanager/> > Search the archives of this list here: > <http://support.realsoftware.com/listarchives/lists.html> _______________________________________________ Unsubscribe or switch delivery mode: <http://www.realsoftware.com/support/listmanager/> Search the archives of this list here: <http://support.realsoftware.com/listarchives/lists.html>
