-
Notifications
You must be signed in to change notification settings - Fork 6
kipr file fromat
Thomas Langer edited this page May 12, 2018
·
5 revisions
This specification is authors own interpretation:
- it is incomplete
- it can be incorrect or contain errors
- it is inofficial and neither acknowledged nor approved by Kemper GmbH.
Use at your own risk. The author cannot be held accountable for any damages caused by the usage of this specification.
All UINT values below are big endian
<kipr file> = <file header>,
{<chunk>};
<file header> = ("MThd" | "KThd"), (* file ID; in hex (0x4D, 0x54, 0x68, 0x64) | (0x4B, 0x54, 0x68, 0x64) *)
<header size UINT32>, (* mostly/always (?) 0x00000006 *)
<file type UINT16>, (* for .kipr files => 0x0000 *)
<number of chunks UINT16>; (* for .kipr files => 0x0001 *)
<unknown UINT16>; (* unknown; always(?) 0x01E0 *)
<chunk> = <chunk header>,
{0x00, <sysex record>}-; (* 0x00 -> delimiter (?) *)
<chunk header> = ("MTrk" | "KTrk"),
<chunk size UINT32>, (* number of following bytes *)
<sysex record> = 0xF0, (* start *)
(<size UINT8> | <size UINT16>), (* <size UINT8> for sizes 0..127
<size UINT16> for sizes 128..16383 *)
0x002033, (* manufacturer ID *)
0x00, (* unknown *)
<message>, (* for detailed specification s. Profiler Midi Parameter Documentation *)
0xF7;
Notes:
-
<message>field specification- for detailed specification s. Profiler Midi Parameter Documentation
-
<size>field encoding:- the highest bit of the first byte specifies the width
- if this bit is set the field is 2 bytes
- the value is 14 bytes wide
- the first byte holds the upper 7 bites of the value
- the second holds byte the lower 7 bits of the value
- value range is: 128 (raw value 0x8100) ... 16383 (raw value 0x8FFF)
- if this bit is not set the field is 1 byte
- the value is 7 bytes wide
- range is 0 ... 127