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" <reallist at optusnet dot com dot au>
> To: <realbasic-nug at lists dot realsoftware dot com>
> 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>
|