StateChunkAndRppMidiFormat

From CockosWiki

(Difference between revisions)
Jump to: navigation, search
(Examples)
(ogranized info into two pages including new page for midi spec info. added more info on extended messeges)
 
(34 intermediate revisions not shown)
Line 1: Line 1:
-
[[MIDI Glossary|MIDI Glossary]]
+
= State Chunk and RPP File MIDI Format =
 +
In [[Glossary#RPP|RPP]] files, MIDI messages are encoded in lines of text. With the exception of System Exclusive MIDI messages, each midi message is encoded in a line containing 5 to 8 fields delimited by spaces, and is terminated by a return character. The same format is also used by the REAPER API functions [[RPR GetSetItemState]] and [[RPR GetSetTrackState]] when getting and setting MIDI items. This format is also referred to as "State Chunks" when used in the context of the API functions.
-
=State Chunk and RPP File MIDI Format=
+
To give you a quick flavour - here's a short example which could (except for the // style comments) easily have come from an RPP file or been returned by a GetSet*State() function; there are other examples later.
-
In an RPP file or State Chunk standard MIDI Messages are encoded as text in five fields.
+
<pre>
-
Sysex messages are Base64 coded.
+
HASDATA 1 960 QN      // number of ticks (960) per Quarter Note
 +
E 3840 bc 07 5a        // Offset of 3840, Control Change Ch0xC, Main Volume
 +
E 0 bc 0a 7f          // Offset of 0, Control Change Ch0xC, Pan Position
 +
E 0 bc 5d 28          // Offset of 0, Control Change Ch0xC, Chorus Level
 +
e 59344 9c 45 64      // Offset of 59344, Note On Ch0xC, Note A4, Velocity 0x64
 +
e 232 9c 45 00        // Offset of 232, Note On Ch0xC, Note A4, Velocity 0x0 -- Note off, in effect
 +
</pre>
 +
 
 +
Look at the last line in the example above, the data is in five fields. The first field contains an 'e', the second a decimal number, '232', and the third, fourth & fifth contain hexadecimal numbers: '9c', '45', & '00'.
 +
 
 +
Explanations for the data in these fields are given in the tables below; it's probably worth mentioning that the RPP format for MIDI data assumes you know which numbers are decimal and which are in hex. The three two-character hex fields correspond to the three bytes in a Midi Message according to the [[MIDI Specification]].
 +
 
 +
=== Standard Midi Messages ===
 +
 
 +
The first character of field 1 (the "state field") indicates the format of the following fields to expect on the current line. For standard midi messages, the first character of the first field will be 'e' or 'E'. These standard messages will be in the format:
-
{|class="wikitable"
+
<pre>
-
!RPP Field Number!!Description
+
state tick_offset hex1 hex2 hex3 [prequantized_offset]
 +
</pre>
 +
 
 +
{| class="wikitable"
|-
|-
-
|1||An 'E' or an 'e'. e=Note or Event is selected in Internal MIDI editor E=unselected
+
! Field
 +
! Function
 +
|-
 +
| state
 +
| The state field indicates if the midi message is selected and/or muted in the reaper midi editor.  
 +
* E - MIDI message
 +
* e - MIDI message, selected in the MIDI editor
 +
* em or Em -  muted note midi message (lower case if event is selected) (can non-note midi events be muted?)
|-
|-
-
|2||Message start offset
+
| tick_offset
 +
| Number of [[MIDI_Glossary#TICK|MIDI Ticks]] between this midi message and the previous midi message in the current [[item]].
|-
|-
-
|3||Message Type. Two characters, the first is Message Type (listed below) and the second is MIDI Channel Number (0->F). For example, 90 means Note On, MIDI Channel Zero.
+
| hex1, hex2, hex3 
-
* 8 - Note Off. This message is sent when a note is stopped.
+
| Each hex field is the two character hexcode for the a bytes of the midi message according to the [[MIDI Specification|Midi Spec]]. hex3 will be '00' for midi messages with only two bytes(verify).  
-
* 9 - Note On. This message is sent when a note is started.
+
-
* A - Polyphonic Key Pressure (Aftertouch). This message is usually sent by pressing down on the key after it has been pressed.
+
-
* B - Control Change. Sent when a controller value changes. Controllers include devices such as pedals and levers. Controller numbers 120-127 are reserved as "Channel Mode Messages".
+
-
* C - Program Change. Sent when a patch number changes.
+
-
* D - Channel Aftertouch. This message is usually sent by pressing down on the key after it has been pressed - but it is different from Polyphonic Key Pressure (Aftertouch) which is per note. This is per channel - use this message to send the '''single''' greatest pressure value (of all the currently depressed keys).
+
-
* E - Pitch Wheel. This message is sent to indicate a change in the pitch wheel. The pitch wheel is measured by a fourteen bit value. Center (no pitch change) is 2000H. Sensitivity is a function of the transmitter
+
-
: The 'F' Message Types are an exception. The second character is part of the message type and does not represent a MIDI channel.
+
-
* F0 - System Exclusive Start, with data1 being the manufacturer's ID and data2 the data itself. This message makes up for all that MIDI doesn't support. Data1 is usually a seven-bit Manufacturer's I.D. code. If a device recognizes the I.D. code as its own, it will listen to the rest of the message, otherwise it will be ignored. System Exclusive is used to send data in bulk, such as patch parameters and other non MIDI spec data. (Note: Only Real-Time messages may be interleaved with a System Exclusive.) This message also is used for extensions called Universal Exclusive Messages.
+
-
* F1 - MIDI Time Code, Quarter Frame
+
-
* F2 - System Common, Song Pointer, with data1 and data2 being LSB and MSB respectively. This is an internal 14 bit register that holds the number of MIDI beats (1 beat = six MIDI clock messages) since the start of the song.
+
-
* F3 - System Common, Song Select, with data1 being the Song Number, data2 unused
+
-
* F4 - Undefined. (Reserved)
+
-
* F5 - Undefined. (Reserved)
+
-
* F6 - Tune Request. This is a request of all analog synthesizers to tune their oscillators
+
-
* F7 - System Exclusive End, data1 and data2 unused
+
-
* F8 - System Realtime, Timing Clock, Sent 24 times per quarter note when synchronization is required
+
-
* F9 - System Realtime, Measure End
+
-
* FA - System Realtime, Start the current sequence playing. (This message will be followed with Timing Clocks.)
+
-
* FB - System Realtime, Continue at the point the sequence was Stopped
+
-
* FC - System Realtime, Stop the current sequence.
+
-
* FD - Undefined. (Reserved)
+
-
* FE - System Realtime, Active Sensing. Use of this message is optional. When initially sent, the receiver will expect to receive another Active Sensing message each 300ms (max), or it will be assume that the connection has been terminated. At termination, the receiver will turn off all voices and return to normal (non-active sensing) operation.
+
-
* FF - System Realtime, Reset. Reset all receivers in the system to power-up status. This should be used sparingly, preferably under manual control. In particular, it should not be sent on power-up.
+
|-
|-
-
|4||Data1, the data in this field varies and depends on Message Type.  
+
| [prequantized_offset]
-
note: 7 useful bits (MSB reserved by the MIDI norm, i.e. the max value is 0x7F, not 0xFF)
+
| Optional field only exists for midi events that have been quantized. It is the difference between the note's position and where its position was before it was quantized
-
* Note Number, for Message Type 8
+
|}
-
* Note Number, for Message Type 9
+
 
-
* Note Number, for Message Type A
+
=== Extended Midi Messages ===
-
* Controller Number, for Message Type B
+
If tick_offset or prequantized_offset would be larger than 2^32 (about 4 billion ticks), then the extended midi message encoding is used instead of the standard encoding. The first character of the first field in all extended messages will be an 'x' or an 'X'. The extended midi message format is:
-
:{|class="wikitable"
+
<pre>
-
!Controller #!!Description||Data2 format (if any)
+
state tick_offset1 tick_offset2 hex1 hex1 hex3 [prequantized_offset1 prequantized_offset2]
 +
</pre>
 +
 
 +
{| class="wikitable"
|-
|-
-
|01||Modulation Wheel||
+
! Field
 +
! Function
 +
|-
 +
| state
 +
|  
 +
* X - Extended message
 +
* x - Extended message, selected in the MIDI editor
 +
* xm or Xm - muted extended note (lower case if event is selected)
 +
|-
 +
| tick_offset1, tick_offset2
 +
| When the first character of a line is an X or x, the number of midi ticks between this midi event and the previous midi event are encoded as the sum of tick_offset1 and tick_offset2
|-
|-
-
|02||Breath Controller||
+
| hex1, hex2, hex3
-
|-
+
| Same as for standard Midi messages. The three bytes of Midi Message
-
|04||Foot Contoller||
+
-
|-
+
-
|05||Portamento Time||
+
-
|-
+
-
|06||Data Entry Slider||
+
-
|-
+
-
|07||Main Volume||
+
-
|-
+
-
|21||Modulation Wheel||
+
-
|-
+
-
|22||Breath Controller||
+
-
|-
+
-
|24||Foot Contoller||
+
-
|-
+
-
|25||Portamento Time||
+
-
|-
+
-
|26||Data Entry Slider||
+
-
|-
+
-
|27||Main Volume||
+
-
|-
+
-
|40||Sustain Pedal||00-3F (off) 40-FF (on)
+
-
|-
+
-
|41||Portamento||00-3F (off) 40-FF (on)
+
-
|-
+
-
|42||Sostenato pedal||00-3F (off) 40-FF (on)
+
-
|-
+
-
|43||Soft pedal||00-3F (off) 40-FF (on)
+
-
|-
+
-
|60||Data Increment||7F
+
-
|-
+
-
|61||Data Decrement||7F
+
-
|-
+
-
|62||Non-Registered Parameter Number||LSB
+
-
|-
+
-
|63||Non-Registered Parameter Number||MSB
+
-
|-
+
-
|64||Registered Parameter Number||LSB
+
-
|-
+
-
|65||Registered Parameter Number||MSB
+
-
|-
+
-
|79||Reset All Controllers, When Reset All Controllers is received, all controller values are reset to their default values||7F
+
-
|-
+
-
|7A||Local, When Local Control is Off, all devices on a given channel will respond only to data received over MIDI. Locally played data, etc. will be ignored. Local Control On restores the functions of the normal controllers||00 (off) / 7F (on)
+
-
|-
+
-
|7B||All Notes Off||00
+
-
|-
+
-
|7C||Omni Off||00
+
-
|-
+
-
|7D||Omni On||00
+
-
|-
+
-
|7E||Mono||00-0A
+
-
|-
+
-
|7F||Poly||00
+
-
|-
+
-
|}
+
-
* Program Number, for Message Type C
+
-
* Pressure, for Message Type D
+
-
* LSB (Least Significant Byte), for Message Type E
+
-
* F? Message types are documented in RPP field 3 above
+
-
|-
+
-
|5||Data2, the data in this field varies and depends on Message Type
+
-
note: 7 useful bits
+
-
* Velocity, for Message Type 8
+
-
* Velocity, for Message Type 9
+
-
* Pressure, for Message Type A
+
-
* Data, for Message Type B, the format of this will be dependant on the MIDI device being controlled, see Data1 Message Type B for details.
+
-
* Not Used for Message Type C
+
-
* Not Used for Message Type D
+
-
* MSB (Most Significant Byte) for Message Type E
+
-
* F? Message types are documented in RPP field 3 above
+
|-
|-
 +
| prequantized_offset1, prequantized_offset2
 +
| When the first character of a line is an X or x, the difference between the note's position and where its position was before it was quantized is encoded as the sum of prequantized_offset1 and prequantized_offset2
|}
|}
 +
Don't confuse messages beginning with 'X' with messages beginning with '<X'. '<X' is used for [[#Sysex, Text, Other Meta-Messages|Sysex]] MIDI messages.
 +
 +
=== HASDATA Line ===
 +
A HASDATA line will indicate the number of [[MIDI_Glossary#TICK|MIDI Ticks]] in one quarter note (most often 960 or 480). This line will occur in the midi section of the RPP state chunk before any lines including a tick_offset field.
 +
 +
Example of a HASDATA line specifying 960 ticks per quarter note:
 +
<pre>
 +
HASDATA 1 960 QN
 +
</pre>
 +
 +
=== Sysex, Text, Other Meta-Messages ===
 +
System Exclusive, text, and other meta-messages will have the format:
 +
<pre>
 +
<X tick_offset1 tick_offset2 base64_string>
 +
</pre>
=Examples=
=Examples=
These are the MIDI message data portions of Item State Chunks retrieved using the script [[CopyItemStateToClipboard.pl]]
These are the MIDI message data portions of Item State Chunks retrieved using the script [[CopyItemStateToClipboard.pl]]
-
==Quarter Note Scale of C==
+
===1/16th Note Scale of C===
-
All messages have an upper case 'E', so no notes or events were left selected in the MIDI editor
+
This example was generated by REAPER's internal MIDI editor. All messages have an upper case 'E', so no notes or events were left selected in the MIDI editor
<pre>
<pre>
HASDATA 1 960 QN      // number of ticks (960) per Quarter Note
HASDATA 1 960 QN      // number of ticks (960) per Quarter Note
-
E 0 90 18 60          // Offset of 0, Note on, Note C1, Velocity 60
+
E 0 90 18 60          // Offset of 0, Note on, Note C1 Ch0x0, Velocity 0x60
-
E 240 80 18 00        // Offset of 240 (1/4 note), Note off, Note C1, Velocity 0
+
E 240 80 18 00        // Offset of 240 (1/4 note), Note off, Note C1 Ch0x0, Velocity 0x0
E 240 90 1a 60
E 240 90 1a 60
E 240 80 1a 00
E 240 80 1a 00
Line 145: Line 108:
E 240 90 23 60
E 240 90 23 60
E 240 80 23 00
E 240 80 23 00
-
E 240 90 24 60        // Offset of 240 (1/4 note), Note on, Note C2, Velocity 60
+
E 240 90 24 60        // Offset of 240 (1/4 note), Note on, Note C2 Ch0x0, Velocity 0x60
-
E 240 80 24 00        // Offset of 240 (1/4 note), Note off, Note C2, Velocity 0
+
E 240 80 24 00        // Offset of 240 (1/4 note), Note off, Note C2 Ch0x0, Velocity 0x0
-
E 240 b0 7b 00        // Offset of 240 (1/4 note), Control Change, All notes off
+
E 240 b0 7b 00        // Offset of 240 (1/4 note), Control Change Ch0x0, All notes off
 +
</pre>
 +
 
 +
===Pitch Wheel And More===
 +
This example came from a MIDI file found online and imported into REAPER. Notice that it uses Note On messages with a [[MIDI_Glossary#VELOCITY|Velocity]] of zero instead of Note Off messages.
 +
 
 +
The Pitch Bend messages towards the end of the fragment (which are for the Channel and not a note) are interesting as well, the first [[MIDI_Glossary#PITCH WHEEL|Pitch Wheel]] has a value of 0, so it doesn't change the note at all. A note is played and then another Pitch Wheel message with a value of 0x11 (Hex 11).
 +
 
 +
This is followed by a whole string of Pitch Wheel messages, all with an offset of 8 and all increasing the Pitch by various amounts.
 +
 
 +
The last figure in each Pitch Wheel Message I can't find a definition for yet but it seems to be a sequence number defining the message's place in an overall Pitch Wheel "event" which goes on a little, and would be a bit much to include in full.
 +
 
 +
The sequence number (if that's what it is) starts at 0x40 and is incremented until it reaches 0x5F, then a Note Off (E5) followed by a Pitch Wheel message of zero and a sequence of 0x40. This (obviously) looks like a reset.
 +
<pre>
 +
HASDATA 1 960 QN      // number of ticks (960) per Quarter Note
 +
<X 0 0                // Exclusive Data, no manufacturer's id though
 +
/wNHdWl0YXIy          //  so it's Universal Exclusive Data and not
 +
>                      //  System Exclusive Data
 +
 
 +
                      // These two UED messages are actually Track Name "Guitar2"
 +
                      //  and Instrument Name "MU100R-1"
 +
<X 0 0
 +
/wRNVTEwMFItMQ==      // Universal Exclusive Data
 +
>
 +
E 3840 bc 07 5a        // Offset of 3840, Control Change Ch0xC, Main Volume
 +
E 0 bc 0a 7f          // Offset of 0, Control Change Ch0xC, Pan Position
 +
E 0 bc 5d 28          // Offset of 0, Control Change Ch0xC, Chorus Level
 +
e 59344 9c 45 64      // Offset of 59344, Note On Ch0xC, Note A4, Velocity 0x64
 +
e 232 9c 45 00        // Offset of 232, Note On Ch0xC, Note A4, Velocity 0x0 -- Note off, in effect
 +
e 8 9c 47 56          // Offset of 8, Note On Ch0xC, Note B4, Velocity 0x56
 +
e 232 9c 47 00        // Offset of 232, Note On Ch0xC, Note B4, Velocity 0x0 -- Note off, in effect
 +
e 8 9c 48 58
 +
e 1440 9c 48 00
 +
e 240 9c 4a 4e
 +
e 2400 9c 4a 00
 +
e 0 9c 4c 5c          // Offset of 0, Note On Ch0xC, Note E5, Velocity 0x5c
 +
e 5280 9c 4c 00        // Offset of 5280, Note On Ch0xC, Note E5, Velocity 0x0 -- Note off, in effect
 +
E 1856 ec 00 40        // Offset of 1856, Pitch Wheel +0x0
 +
e 0 9c 4c 57          // Offset of 0, Note On Ch0xC, Note E5, Velocity 0x57
 +
E 8 ec 11 40          // Offset of 8, Pitch Wheel +0x11
 +
E 8 ec 22 40
 +
E 8 ec 32 40
 +
E 8 ec 43 40
 +
E 8 ec 54 40
 +
E 8 ec 64 40
 +
E 8 ec 75 40
 +
E 8 ec 06 41
 +
E 8 ec 16 41
 +
E 8 ec 27 41
 +
E 8 ec 38 41
 +
E 8 ec 48 41
 +
E 8 ec 59 41
 +
E 8 ec 6a 41
 +
E 8 ec 7a 41
 +
E 8 ec 0b 42
 +
E 8 ec 1c 42
 +
E 8 ec 2c 42
 +
E 8 ec 3d 42
 +
E 8 ec 4e 42
 +
E 8 ec 5e 42
 +
E 8 ec 6f 42
 +
E 8 ec 00 43          // note that the "Sequence Number" is increasing every 7 or 8 Pitch Wheel messages
</pre>
</pre>

Latest revision as of 07:03, 21 February 2010

Contents

State Chunk and RPP File MIDI Format

In RPP files, MIDI messages are encoded in lines of text. With the exception of System Exclusive MIDI messages, each midi message is encoded in a line containing 5 to 8 fields delimited by spaces, and is terminated by a return character. The same format is also used by the REAPER API functions RPR GetSetItemState and RPR GetSetTrackState when getting and setting MIDI items. This format is also referred to as "State Chunks" when used in the context of the API functions.

To give you a quick flavour - here's a short example which could (except for the // style comments) easily have come from an RPP file or been returned by a GetSet*State() function; there are other examples later.

HASDATA 1 960 QN       // number of ticks (960) per Quarter Note
E 3840 bc 07 5a        // Offset of 3840, Control Change Ch0xC, Main Volume
E 0 bc 0a 7f           // Offset of 0, Control Change Ch0xC, Pan Position
E 0 bc 5d 28           // Offset of 0, Control Change Ch0xC, Chorus Level
e 59344 9c 45 64       // Offset of 59344, Note On Ch0xC, Note A4, Velocity 0x64
e 232 9c 45 00         // Offset of 232, Note On Ch0xC, Note A4, Velocity 0x0 -- Note off, in effect

Look at the last line in the example above, the data is in five fields. The first field contains an 'e', the second a decimal number, '232', and the third, fourth & fifth contain hexadecimal numbers: '9c', '45', & '00'.

Explanations for the data in these fields are given in the tables below; it's probably worth mentioning that the RPP format for MIDI data assumes you know which numbers are decimal and which are in hex. The three two-character hex fields correspond to the three bytes in a Midi Message according to the MIDI Specification.

Standard Midi Messages

The first character of field 1 (the "state field") indicates the format of the following fields to expect on the current line. For standard midi messages, the first character of the first field will be 'e' or 'E'. These standard messages will be in the format:

state tick_offset hex1 hex2 hex3 [prequantized_offset]
Field Function
state The state field indicates if the midi message is selected and/or muted in the reaper midi editor.
  • E - MIDI message
  • e - MIDI message, selected in the MIDI editor
  • em or Em - muted note midi message (lower case if event is selected) (can non-note midi events be muted?)
tick_offset Number of MIDI Ticks between this midi message and the previous midi message in the current item.
hex1, hex2, hex3 Each hex field is the two character hexcode for the a bytes of the midi message according to the Midi Spec. hex3 will be '00' for midi messages with only two bytes(verify).
[prequantized_offset] Optional field only exists for midi events that have been quantized. It is the difference between the note's position and where its position was before it was quantized

Extended Midi Messages

If tick_offset or prequantized_offset would be larger than 2^32 (about 4 billion ticks), then the extended midi message encoding is used instead of the standard encoding. The first character of the first field in all extended messages will be an 'x' or an 'X'. The extended midi message format is:

state tick_offset1 tick_offset2 hex1 hex1 hex3 [prequantized_offset1 prequantized_offset2]
Field Function
state
  • X - Extended message
  • x - Extended message, selected in the MIDI editor
  • xm or Xm - muted extended note (lower case if event is selected)
tick_offset1, tick_offset2 When the first character of a line is an X or x, the number of midi ticks between this midi event and the previous midi event are encoded as the sum of tick_offset1 and tick_offset2
hex1, hex2, hex3 Same as for standard Midi messages. The three bytes of Midi Message
prequantized_offset1, prequantized_offset2 When the first character of a line is an X or x, the difference between the note's position and where its position was before it was quantized is encoded as the sum of prequantized_offset1 and prequantized_offset2

Don't confuse messages beginning with 'X' with messages beginning with '<X'. '<X' is used for Sysex MIDI messages.

HASDATA Line

A HASDATA line will indicate the number of MIDI Ticks in one quarter note (most often 960 or 480). This line will occur in the midi section of the RPP state chunk before any lines including a tick_offset field.

Example of a HASDATA line specifying 960 ticks per quarter note:

 
HASDATA 1 960 QN 

Sysex, Text, Other Meta-Messages

System Exclusive, text, and other meta-messages will have the format:

<X tick_offset1 tick_offset2 base64_string>

Examples

These are the MIDI message data portions of Item State Chunks retrieved using the script CopyItemStateToClipboard.pl

1/16th Note Scale of C

This example was generated by REAPER's internal MIDI editor. All messages have an upper case 'E', so no notes or events were left selected in the MIDI editor

HASDATA 1 960 QN       // number of ticks (960) per Quarter Note
E 0 90 18 60           // Offset of 0, Note on, Note C1 Ch0x0, Velocity 0x60
E 240 80 18 00         // Offset of 240 (1/4 note), Note off, Note C1 Ch0x0, Velocity 0x0
E 240 90 1a 60
E 240 80 1a 00
E 240 90 1c 60
E 240 80 1c 00
E 240 90 1e 60
E 240 80 1e 00
E 240 90 1f 60
E 240 80 1f 00
E 240 90 21 60
E 240 80 21 00
E 240 90 23 60
E 240 80 23 00
E 240 90 24 60         // Offset of 240 (1/4 note), Note on, Note C2 Ch0x0, Velocity 0x60
E 240 80 24 00         // Offset of 240 (1/4 note), Note off, Note C2 Ch0x0, Velocity 0x0
E 240 b0 7b 00         // Offset of 240 (1/4 note), Control Change Ch0x0, All notes off

Pitch Wheel And More

This example came from a MIDI file found online and imported into REAPER. Notice that it uses Note On messages with a Velocity of zero instead of Note Off messages.

The Pitch Bend messages towards the end of the fragment (which are for the Channel and not a note) are interesting as well, the first Pitch Wheel has a value of 0, so it doesn't change the note at all. A note is played and then another Pitch Wheel message with a value of 0x11 (Hex 11).

This is followed by a whole string of Pitch Wheel messages, all with an offset of 8 and all increasing the Pitch by various amounts.

The last figure in each Pitch Wheel Message I can't find a definition for yet but it seems to be a sequence number defining the message's place in an overall Pitch Wheel "event" which goes on a little, and would be a bit much to include in full.

The sequence number (if that's what it is) starts at 0x40 and is incremented until it reaches 0x5F, then a Note Off (E5) followed by a Pitch Wheel message of zero and a sequence of 0x40. This (obviously) looks like a reset.

HASDATA 1 960 QN       // number of ticks (960) per Quarter Note
<X 0 0                 // Exclusive Data, no manufacturer's id though
/wNHdWl0YXIy           //  so it's Universal Exclusive Data and not
>                      //  System Exclusive Data

                       // These two UED messages are actually Track Name "Guitar2"
                       //  and Instrument Name "MU100R-1"
<X 0 0
/wRNVTEwMFItMQ==       // Universal Exclusive Data
>
E 3840 bc 07 5a        // Offset of 3840, Control Change Ch0xC, Main Volume
E 0 bc 0a 7f           // Offset of 0, Control Change Ch0xC, Pan Position
E 0 bc 5d 28           // Offset of 0, Control Change Ch0xC, Chorus Level
e 59344 9c 45 64       // Offset of 59344, Note On Ch0xC, Note A4, Velocity 0x64
e 232 9c 45 00         // Offset of 232, Note On Ch0xC, Note A4, Velocity 0x0 -- Note off, in effect
e 8 9c 47 56           // Offset of 8, Note On Ch0xC, Note B4, Velocity 0x56
e 232 9c 47 00         // Offset of 232, Note On Ch0xC, Note B4, Velocity 0x0 -- Note off, in effect
e 8 9c 48 58
e 1440 9c 48 00
e 240 9c 4a 4e
e 2400 9c 4a 00
e 0 9c 4c 5c           // Offset of 0, Note On Ch0xC, Note E5, Velocity 0x5c
e 5280 9c 4c 00        // Offset of 5280, Note On Ch0xC, Note E5, Velocity 0x0 -- Note off, in effect
E 1856 ec 00 40        // Offset of 1856, Pitch Wheel +0x0
e 0 9c 4c 57           // Offset of 0, Note On Ch0xC, Note E5, Velocity 0x57
E 8 ec 11 40           // Offset of 8, Pitch Wheel +0x11
E 8 ec 22 40
E 8 ec 32 40
E 8 ec 43 40
E 8 ec 54 40
E 8 ec 64 40
E 8 ec 75 40
E 8 ec 06 41
E 8 ec 16 41
E 8 ec 27 41
E 8 ec 38 41
E 8 ec 48 41
E 8 ec 59 41
E 8 ec 6a 41
E 8 ec 7a 41
E 8 ec 0b 42
E 8 ec 1c 42
E 8 ec 2c 42
E 8 ec 3d 42
E 8 ec 4e 42
E 8 ec 5e 42
E 8 ec 6f 42
E 8 ec 00 43          // note that the "Sequence Number" is increasing every 7 or 8 Pitch Wheel messages
Personal tools