Skip to content

kipr file fromat

Thomas Langer edited this page May 12, 2018 · 5 revisions

1 DISCLAIMER

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.


2 Kipr file

2.1 Basic types

All UINT values below are big endian

2.2 Base structure

<kipr file> = <file header>,  
              {<chunk>};

2.3 File header

<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 *)

2.4 Chunk

<chunk> = <chunk header>, 
          {0x00, <sysex record>}-; (* 0x00 -> delimiter (?) *)

2.4.1 Chunk header

<chunk header> = ("MTrk" | "KTrk"),
                 <chunk size UINT32>, (* number of following bytes *) 

2.4.2 SysEx record

<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

Clone this wiki locally