Add boilerplate files and licenses

This commit is contained in:
2026-07-13 04:39:10 +02:00
parent 69cabda489
commit fac7e80bb7
202 changed files with 23125 additions and 0 deletions

622
docs/EP133_FORMATS.md Normal file
View File

@@ -0,0 +1,622 @@
# EP-133 file formats data
### PADS
```
[
0 0,
1 0, // INSTRUMENT NUM
2 0, // INSTRUMENT NUM
3 0, // MIDI CHANNEL
4 0, // TRIM LEFT
5 0, // TRIM LEFT
6 0, // TRIM LEFT
7 0,
8 0, // TRIM RIGHT
9 0, // TRIM RIGHT
10 0, // TRIM RIGHT
11 0,
12 0, // TIME STRETCH BPM
13 0, // TIME STRETCH BPM
14 248, // TIME STRETCH BPM
15 66, // TIME STRETCH BPM
16 100, // VOLUME (0-200)
17 0, // PITCH (negative: 254-255, zero: 0, positive: 1-12)
18 0, // PAN (left: 240-255, center: 0, right: 1-16)
19 0, // ATACK (0-255), when in KEY/LEG mode
20 255, // RELEASE (0-255), when in KEY/LEG mode
21 0, // TIME STRETCH: 0 - OFF, 1 - BPM, 2 - BARS, 3 - REV
22 0, // CHOKE GROUP: 0 - true, 1 - false
23 0, // PLAY MODE: ONE - 0, KEY - 1, LEG - 2,
24 60, // PAD ID ?
25 0, // TIME STRETCH BARS: 0 - 1, 1 - 2, 3 - 4, 255 - 1/2, 254 - 1/4
26 0 // PITCH DECIMAL PART
]
```
### PATTERNS
```
{
"0": 0,
"1": 2, // bars
"2": 8, // notes count
"3": 0,
"4": 0, // position LB
"5": 0, // position HB
"6": 80, // N / 8 - pad number
"7": 60, // note
"8": 100, // velocity
"9": 43, // duration LB
"10": 0, // duration HB
"11": 0,
"12": 96,
"13": 0,
"14": 80,
"15": 60,
"16": 100,
"17": 44,
"18": 0,
"19": 245,
...
}
```
### FX
```
{
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 2, // EFFECT TYPE: 0 - off, 1 - delay, 2 - rever, 3 - distortion, 4 - chorus, 5 - filter, 6 - compressor,
"5": 0,
"6": 0,
"7": 0,
"8": 0,
"9": 0,
"10": 0,
"11": 63,
"12": 0, // DLY - param 1
"13": 0, // DLY - param 1
"14": 124, // DLY - param 1
"15": 62, // DLY - param 1
"16": 0, // RVB - param 1
"17": 0, // RVB - param 1
"18": 0, // RVB - param 1
"19": 63, // RVB - param 1
"20": 0, // DST - param 1
"21": 0, // DST - param 1
"22": 0, // DST - param 1
"23": 63, // DST - param 1
"24": 0, // etc...
"25": 0,
"26": 0,
"27": 63,
"28": 0,
"29": 0,
"30": 0,
"31": 63,
"32": 0,
"33": 0,
"34": 0,
"35": 63,
"36": 0,
"37": 0,
"38": 0,
"39": 63,
"40": 0,
"41": 0,
"42": 0,
"43": 63,
"44": 0,
"45": 0,
"46": 0,
"47": 63,
"48": 0,
"49": 0,
"50": 0,
"51": 63,
"52": 0,
"53": 0,
"54": 0,
"55": 63,
"56": 0,
"57": 0,
"58": 0,
"59": 63,
"60": 0,
"61": 0,
"62": 0,
"63": 63,
"64": 0,
"65": 0,
"66": 0,
"67": 63,
"68": 0,
"69": 0,
"70": 0,
"71": 63,
"72": 0,
"73": 0,
"74": 0,
"75": 63,
"76": 0, // DLY - param 2
"77": 0, // DLY - param 2
"78": 204, // DLY - param 2
"79": 62, // DLY - param 2
"80": 0, // etc...
"81": 0,
"82": 0,
"83": 63,
"84": 0,
"85": 0,
"86": 0,
"87": 63,
"88": 0,
"89": 0,
"90": 0,
"91": 63,
"92": 0,
"93": 0,
"94": 0,
"95": 63,
"96": 0,
"97": 0,
"98": 0,
"99": 63,
"100": 0,
"101": 0,
"102": 0,
"103": 63,
"104": 0,
"105": 0,
"106": 0,
"107": 63,
"108": 0,
"109": 0,
"110": 0,
"111": 63,
"112": 0,
"113": 0,
"114": 0,
"115": 63,
"116": 0,
"117": 0,
"118": 0,
"119": 63,
"120": 0,
"121": 0,
"122": 0,
"123": 63,
"124": 0,
"125": 0,
"126": 0,
"127": 63,
"128": 0,
"129": 0,
"130": 0,
"131": 63,
"132": 0,
"133": 0,
"134": 0,
"135": 63,
"136": 0,
"137": 0,
"138": 0,
"139": 63,
"140": 0,
"141": 0,
"142": 0,
"143": 63,
"144": 0,
"145": 0,
"146": 0,
"147": 0,
"148": 0,
"149": 0,
"150": 0,
"151": 63,
"152": 0,
"153": 6,
"154": 0,
"155": 128,
"156": 0,
"157": 128,
"158": 0,
"159": 128
}
```
### SETTINGS
Fader params:
- PITCH: 0 (-5 semitones) to 1 (+5 semitones)
- TUNE: 0 (-12 semitones) to 1 (+12 semitones)
```
{
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0, // BPM
"5": 0, // BPM
"6": 250, // BPM
"7": 66, // BPM
"8": 0,
"9": 0,
"10": 0,
"11": 0,
"12": 0,
"13": 0,
"14": 0,
"15": 0,
"16": 0,
"17": 0,
"18": 0,
"19": 0,
"20": 0,
"21": 0,
"22": 0,
"23": 0,
"24": 0, // GROUP A LVL
"25": 0, // GROUP A LVL
"26": 128, // GROUP A LVL
"27": 191, // GROUP A LVL
"28": 0, // GROUP A PITCH
"29": 0, // GROUP A PITCH
"30": 128, // GROUP A PITCH
"31": 191, // GROUP A PITCH
"32": 0, // GROUP A TIME
"33": 0, // GROUP A TIME
"34": 128, // GROUP A TIME
"35": 191, // GROUP A TIME
"36": 0,
"37": 0,
"38": 128,
"39": 191,
"40": 0,
"41": 0,
"42": 128,
"43": 191,
"44": 205, // GROUP A FX D/W
"45": 88, // GROUP A FX D/W
"46": 132, // GROUP A FX D/W
"47": 62, // GROUP A FX D/W
"48": 0,
"49": 0,
"50": 128,
"51": 191,
"52": 0,
"53": 0,
"54": 128,
"55": 191,
"56": 0,
"57": 0,
"58": 128,
"59": 191,
"60": 0,
"61": 0,
"62": 128,
"63": 191,
"64": 0,
"65": 0,
"66": 128,
"67": 191,
"68": 0,
"69": 0,
"70": 128,
"71": 191,
"72": 0, // GROUP B LVL
"73": 0, // GROUP B LVL
"74": 128, // GROUP B LVL
"75": 191, // GROUP B LVL
"76": 0,
"77": 0,
"78": 128,
"79": 191,
"80": 0,
"81": 0,
"82": 128,
"83": 191,
"84": 0,
"85": 0,
"86": 128,
"87": 191,
"88": 0,
"89": 0,
"90": 128,
"91": 191,
"92": 0,
"93": 0,
"94": 128,
"95": 191,
"96": 0,
"97": 0,
"98": 128,
"99": 191,
"100": 0,
"101": 0,
"102": 128,
"103": 191,
"104": 0,
"105": 0,
"106": 128,
"107": 191,
"108": 0,
"109": 0,
"110": 128,
"111": 191,
"112": 0,
"113": 0,
"114": 128,
"115": 191,
"116": 0,
"117": 0,
"118": 128,
"119": 191,
"120": 0,
"121": 0,
"122": 128,
"123": 191,
"124": 0,
"125": 0,
"126": 128,
"127": 191,
"128": 0,
"129": 0,
"130": 128,
"131": 191,
"132": 0,
"133": 0,
"134": 128,
"135": 191,
"136": 0,
"137": 0,
"138": 128,
"139": 191,
"140": 0, // GROUP C FX D/W
"141": 0, // GROUP C FX D/W
"142": 128, // GROUP C FX D/W
"143": 191, // GROUP C FX D/W
"144": 0,
"145": 0,
"146": 128,
"147": 191,
"148": 0,
"149": 0,
"150": 128,
"151": 191,
"152": 0,
"153": 0,
"154": 128,
"155": 191,
"156": 0,
"157": 0,
"158": 128,
"159": 191,
"160": 0,
"161": 0,
"162": 128,
"163": 191,
"164": 0,
"165": 0,
"166": 128,
"167": 191,
"168": 0,
"169": 0,
"170": 128,
"171": 191,
"172": 0,
"173": 0,
"174": 128,
"175": 191,
"176": 0,
"177": 0,
"178": 128,
"179": 191,
"180": 0,
"181": 0,
"182": 128,
"183": 191,
"184": 0,
"185": 0,
"186": 128,
"187": 191,
"188": 255, // GROUP D FX D/W
"189": 236, // GROUP D FX D/W
"190": 127, // GROUP D FX D/W
"191": 63, // GROUP D FX D/W
"192": 0,
"193": 0,
"194": 128,
"195": 191,
"196": 0,
"197": 0,
"198": 128,
"199": 191,
"200": 0,
"201": 0,
"202": 128,
"203": 191,
"204": 0,
"205": 0,
"206": 128,
"207": 191,
"208": 0,
"209": 0,
"210": 128,
"211": 191,
"212": 0,
"213": 0,
"214": 128,
"215": 191,
"216": 5, // FADER ASSIGN A: 0 - LVL, 1 - PTC, 2 - TIM, 3 - LPF, 4 - HPF, 5 - FX, etc...
"217": 0, // FADER ASSIGN B
"218": 0, // FADER ASSIGN C
"219": 5, // FADER ASSIGN D
"220": 0,
"221": 4,
"222": 12, // SCALE: 0 - 2T, 1 - maj, 2 - min, 3 - dor, 4 - phr, 5 - lyd, 6 - mix, 7 - loc, 8 - ma.p, 9 - mi.p, 10 - BLU, 11 - H.MI, 12 - M.MI
"223": 0 // ROOT NOTE (pitch class: 0 - C, 1 - C#, ... 11 - B)
}
```
### SCENES
```
{
"0": 0,
"1": 0,
"2": 0,
"3": 0,
"4": 0,
"5": 4,
"6": 4,
// scene 1
"7": 1, // patterns A (patters from which scene to use for group A)
"8": 1, // patterns B
"9": 1, // patterns C
"10": 1, // patterns D
"11": 4, // numerator / beats in one bar
"12": 4, // denominator/ beat unit / note value
// scene 2
"13": 2,
"14": 2,
"15": 2,
"16": 2,
"17": 4,
"18": 4,
// scene 3
"19": 3,
"20": 3,
"21": 3,
"22": 3,
"23": 4,
"24": 4,
...
"601": 127,
"602": 2,
"603": 8,
"604": 1, // scenes count
"605": 0,
"606": 0,
"607": 0,
"608": 0,
"609": 0,
"610": 0,
"611": 0,
"612": 1,
"613": 1,
"614": 0,
"615": 0,
"616": 0,
"617": 0,
"618": 0,
"619": 0,
"620": 0,
"621": 0,
"622": 0,
"623": 0,
"624": 0,
"625": 0,
"626": 0,
"627": 0,
"628": 0,
"629": 0,
"630": 0,
"631": 0,
"632": 0,
"633": 0,
"634": 0,
"635": 0,
"636": 0,
"637": 0,
"638": 0,
"639": 0,
"640": 0,
"641": 0,
"642": 0,
"643": 0,
"644": 0,
"645": 0,
"646": 0,
"647": 0,
"648": 0,
"649": 0,
"650": 0,
"651": 0,
"652": 0,
"653": 0,
"654": 0,
"655": 0,
"656": 0,
"657": 0,
"658": 0,
"659": 0,
"660": 0,
"661": 0,
"662": 0,
"663": 0,
"664": 0,
"665": 0,
"666": 0,
"667": 0,
"668": 0,
"669": 0,
"670": 0,
"671": 0,
"672": 0,
"673": 0,
"674": 0,
"675": 0,
"676": 0,
"677": 0,
"678": 0,
"679": 0,
"680": 0,
"681": 0,
"682": 0,
"683": 0,
"684": 0,
"685": 0,
"686": 0,
"687": 0,
"688": 0,
"689": 0,
"690": 0,
"691": 0,
"692": 0,
"693": 0,
"694": 0,
"695": 0,
"696": 0,
"697": 0,
"698": 0,
"699": 0,
"700": 0,
"701": 0,
"702": 0,
"703": 0,
"704": 0,
"705": 0,
"706": 0,
"707": 0,
"708": 0,
"709": 0,
"710": 0,
"711": 0
}
```

69
docs/EP40_FORMATS.md Normal file
View File

@@ -0,0 +1,69 @@
# PAD
```
{
"0": 0,
"1": 198,
"2": 0,
"3": 0,
"4": 0,
"5": 0,
"6": 0,
"7": 0,
"8": 193,
"9": 39,
"10": 0,
"11": 0,
"12": 0,
"13": 0,
"14": 2,
"15": 67,
"16": 42,
"17": 250,
"18": 0,
"19": 0,
"20": 255,
"21": 0,
"22": 0,
"23": 0,
"24": 60,
"25": 0,
"26": 23,
"27": 8,
"28": 252
}
```
# PATTERN
```
{
"0": 1,
"1": 8, // bars
"2": 255,
"3": 255,
"4": 20,
"5": 1,
// note
"6": 0,
"7": 0,
"8": 48,
"9": 60,
"10": 100,
"11": 40,
"12": 0,
"13": 8,
// note
"14": 0,
"15": 0,
"16": 64,
"17": 60,
"18": 100,
"19": 29,
"20": 0,
"21": 16,
...
}
```

539
docs/REAPER.md Normal file
View File

@@ -0,0 +1,539 @@
Original document found here: https://web.archive.org/web/20250227145458/https://wiki.cockos.com/wiki/index.php/State_Chunk_Definitions
# State Chunk Definitions
### From CockosWiki
This page details what is known about various state chunk definitions such as are returned by API functions `GetSetTrackState()`, `GetSetItemState()` and `GetSetEnvelopeState()`. There are still some question marks (gaps) in the definitions and several plugin formats are completely undocumented so please fill in any gaps you can. Thanks to all who have spent time poking around these things. It's a tedious business.
*Please note that comments, empty lines and indentation are for illustration only.*
*For the sake of formatting, the following changes have been made:*
- *Float values with fourteen decimal places have been condensed to three decimal places.*
- *Float values with ten decimal places have been condensed to two decimal places.*
- *Float values with six decimal places have been condensed to one decimal place.*
- *The shorthand "int (bool)" has been used to denote "0 = False, 1 = True"*
*TODO:*
- *Separate item source properties (including other item types) into their own block.*
- *Split this page into separate pages keep this one as the chunk index*
- *Link to this page from GetSetWhateverState() pages and remove chunk definitions from those pages*
---
## Track
The Track state chunk contains all the settings for a track and all of it's items, envelopes, receives, plugins etc.
```text
<TRACK // Start of Track definition
NAME "Aural sax" // Track name
PEAKCOL 16576 // Peak colour (items and takes override?)
BEAT -1 // Track timebase (-1 = project default)
AUTOMODE 0 // Automation mode
// 0 = Trim/Read
// 1 = Read
// 2 = Touch
// 3 = Write
// 4 = Latch
VOLPAN 0.359 0.000 -1.000 // Volume/Pan
// field 1, float, track volume
// field 2, float, track pan
// field 3, float, track pan law
MUTESOLO 0 0 0 // Mute/solo
// field 1, int (bool), mute
// field 2, int, solo, 0= no solo, 1 = solo, 2 = solo-in-place
// field 3, int (bool), solo defeat
IPHASE 0 // Invert phase, int (bool)
ISBUS 0 0 // ??, Unknown but related to folder tracks
// 1 1 = is folder, 2 -1 = is folder end, 0 0 for others
BUSCOMP 0 0 // Collapse folder (bus compact?)
// field 1, int, 0=full, 1=medium, 2=small
// field 2, int, show/hide for Mixer: Clickable icon for folder tracks to show/hide children
SHOWINMIX 1 0.6 0.5 1 0.5 -1 -1 -1 // Show In Mixer
// field 1, int (bool), show in mixer
// field 2, float, ??
// field 3, float, ratio of sends section height
// field 4, int (bool), show in track list
// field 5, float, ??
// field 6, int, ??
// field 7, int, ??
// field 8, int, ??
FREEMODE 0 // Free Item Positioning Mode, int (bool)
REC 0 0 0 0 0 0 0 // Record settings
// field 1, int (bool), armed
// field 2. int, input,
// 0=mono left, 1=mono right, 1024=stereo left+right...
// device + channel(s) coded via unknown bitwise method
// field 3. int, monitor, 0=off, 1=on, 2=auto
// field 4. int, record mode,
// 0=input, 1=output (stereo), 2=disable(monitor),
// 3=output (stereo, latency comp), 4=Output (MIDI),
// 5=output (mono), 6=output (mono, latency comp),
// 7=MIDI overdub, 8=MIDI replace, 9=MIDI touch replace,
// 10=output (multichannel),
// 11=output (multichannel, latency comp)
// field 5. int (bool), monitor track media while recording
// field 6. int (bool), preserve PDC delayed monitoring
// field 7. int, record path, 0=primary, 1=secondary, 2=both
TRACKHEIGHT 0 0 // Height in TCP,
// field 1, int, height in pixels
// field 2, int (bool), folder override (collapsed)
INQ 0 0 0 0.50 100 0 0 100 // Input quantize settings
// field 1, int (bool), quantize midi
// field 2, int, quantize to pos (-1=prev, 0=nearest, 1=next)
// field 3, int (bool), quantize note-offs
// field 4, float, quantize to (fraction of beat)
// field 5, int (%), quantize strength
// field 6, int (%), swing strength
// field 7, int (%), quantize range min
// field 8, int (%), quantize range max
NCHAN 2 // Number of track channels, int
<RECCFG 1 // Recording format data. Not present if not changed.
dmdnbwAAAD8AgAAAAIAAAAAgAAAAAAEAAA== // binary data, leave it alone
> //
FX 1 // FX state, int, 0=bypassed, 1=active
TRACKID {5619EDC5-E743-4BE8-AE9F-3B3469A111B5} // REAPER track id, leave it alone
PERF 0 // Performance options, int (bitwise)
// val & 1 = prevent media buffering
// val & 2 = prevent anticipative fx
// --- Start of receive data ---
// One for each receive or not present if no receives
AUXRECV 2 1 1.000 0.000 0 0 0 2 0 1.000 80 1 // First receive
// field 1, int, source track index (zero based)
// field 2, int, mode
// 0 = Post Fader (Post Pan)
// 1 = Pre FX
// 3 = Pre Fader (Post FX)
// field 3, float, volume
// field 4, float, pan
// field 5, int (bool), mute
// field 6, int (bool), mono sum
// field 7, int (bool), invert phase
// field 8, int, source audio channels
// -1 = none, 0 = 1+2, 1 = 2+3, 2 = 3+4 etc.
// probably different if non-standard pairs aren't allowed
// field 9, int, dest audio channels (as source but no -1)
// field 10, float, panlaw
// field 11, int, midi channels
// source = val & 0x1F (0=None), dest = floor(val / 32)
// field 12, int, automation mode (-1 = use track mode)
// --- Start of envelope definitions for the above receive
// One definition block for each non-empty envelope.
// See GetSetEnvelopeState() for full envelope definition.
<AUXPANENV // Start of first receive envelope
(see chunk info below) // ...
> // End of first receive envelope
<AUXMUTEENV // Start of second receive envelope.
(see chunk info below) // ...
> // End of second receive envelope
// --- End of envelopes for first receive
AUXRECV 3 0 1.000 0.000 0 0 0 0 0 -1.000 0 -1 // Second track receive settings (as above but no envelopes)
// --- End of receive data ---
MIDIOUT -1 // MIDI hardware output settings. int (bitwise)
// device = floor(val / 32)
// index of device (inc. ignored devices)
// -1 for no MIDI hardware output
// channel = val & 0x1F
// channel number or 0 for 'use original'
// val = device * 32 + channel (device 2, ch 4 == 68)
MAINSEND 1 // Master/parent send, int (bool)
// --- Start of track envelopes ---
// One definition block for each non-empty envelope.
// See GetSetEnvelopeState() for full envelope definition.
<VOLENV2 // First track envelope.
(definition removed) // ...
> // End of first track envelope
// --- End of track envelopes
// --- Start of FX section ----
<FXCHAIN // Not present if track hasn't got/had FX ---
(see chunk info below)
> // --- End of FX section
// --- Start of item definitions ---
<ITEM // First item definition
(see chunk info below)
> // End of first item
// --- End of item definitions
> // End
```
## Audio Item
```text
<ITEM // Item section start
POSITION 0.000 // Position on the timeline, in seconds
SNAPOFFS 0.000 // Snap offset, in seconds
LENGTH 145.500 // Item length, in seconds
LOOP 0 // Loop source int (bool)
ALLTAKES 0 // Play all takes int (bool)
COLOR 22278759 // Item colour, int , Not present if not set.
BEAT 0 // Item timebase, int, Not present if not set. -1 = use track timebase
SEL 1 // Is the item selected? int (bool)
FADEIN 1 0.0 0.0 // Fade in settings
// field 1, int, fade in curve type (0 - linear, etc.)
// field 2, float, fade in time (in seconds)
// field 3, float, autocrossfade length
// field 4, float, ? (bool)
// field 5, float, autocrossfade is on
// field 6, float, fade shape
FADEOUT 1 0.0 0.0 // Fade out settings (same as fade in above)
// ...
// ...
// ...
MUTE 0 // Is the item muted? int (bool)
FADEFLAG 1 // ??, int, may not be present
IGUID {98E8ECDE-FF4D-4E06-87ED-43A5E7E6A61A} // Item id. Leave it alone
// --- From this point, values mostly relate to the first take
// except for field 1 of VOLPAN which is the item trim
NAME "The first take" // First take name
VOLPAN 1.0 0.0 1.0 -1.0 // Volume and pan settings
// field 1, float, item trim
// 1.00 = 0 dB
// 16.00 = +24 dB
// 0.50 = -6 dB
// field 2, float, first take pan, -1.00 = left, 1.00 = right
// field 3, float, first take volume (other takes in TAKEVOLPAN below)
// field 4, float, first take pan law
SOFFS 0.000 // First take slip offset (in seconds)
PLAYRATE 1.000 1 0.000 -1 // First take playrate settings
// field 1, float, playrate
// field 2, int (bool), preserve pitch while changing rate
// field 3, float, pitch adjust, in semitones.cents
// field 4, int, pitch shifting/time stretch mode and preset
// -1 - project default
// 0-2 - Sound Touch (3 presets)
// 65536-65567 - Dirac LE (32 presets)
// 131072-131119 - Low quality windowed (48 presets)
// 196608-196639 - élastique Pro (32 presets)
// 262144-262147 - élastique Efficient (4 presets)
// 327680-327683 - élastique SOLOIST (4 presets)
// 393216-393247 - élastique 2.1 Pro (32 presets)
// 458752-458755 - élastique 2.1 Efficient (4 presets)
// 524288-524291 - élastique 2.1 SOLOIST (4 presets)
CHANMODE 0 // First take channel mode, int
// 0 = normal, 1 = reverse stereo, 2 = mono (downmix)
// 3 = mono (left), 4 = mono (right)
GUID {4EB7779B-D570-4CCF-8739-161D2D32C154} // First take id. Leave it alone
<SOURCE SECTION // Source section start (only present when changed in Item properties)
LENGTH 0.000 // Section length
MODE 3 // Mode, 2 = Section and Reverse, 3 = Reverse
STARTPOS 0.000 // Section start offset (in seconds)
OVERLAP 0.010 // Section crossfade (in seconds)
<SOURCE WAVE // Source details. Appears alone if SOURCE SECTION not set
FILE "C:Path\To\AudioFile.wav" // Source file.
> // Source details end
> // Source section end
TAKE SEL // Second take start. SEL only appears if this take is selected
NAME "The second take" // Take name
TAKEVOLPAN 0.0 1.0 -1.0 // Take volume and pan settings
// field 1, float, take pan
// field 2, float, take volume
// field 3, float, take pan law
SOFFS 0.000 // Take slip offset (in seconds)
PLAYRATE 1.000 1 0.000 -1 // see PLAYRATE above
CHANMODE 1 // see CHANMODE above
GUID {4EB7779B-D570-4CCF-8739-161D2D32C154} // Take id. Leave it alone
<SOURCE WAVE // Take source details
FILE "C:\Full\Path\To\AudioFile reversed.wav" // Source filename
> // Source section end
> // Item section end
```
## MIDI Item
```text
One example is below, but more info can be found in the [[StateChunkAndRppMidiFormat]] page.
<pre>
<ITEM // Item section start
POSITION 12.000 // see Audio item state chunk above
SNAPOFFS 0.000 // ...
LENGTH 8.815 // ...
LOOP 1 // ...
ALLTAKES 0 // ...
SEL 1 // ...
FADEIN 1 0.0 0.0 // ...
FADEOUT 1 0.0 0.0 // ...
MUTE 0 // ...
IGUID {967EE770-4144-472A-89D6-B72BB910A916} // ...
NAME "MIDI item" // ...
VOLPAN 1.0 0.0 1.0 -1.0 // ...
SOFFS 0.000 0.000 // Slip offset (in seconds; the second field is always twice the first field)
PLAYRATE 1.000 1 0.000 -65536 // ...
CHANMODE 0 // ...
GUID {9C93A652-09A2-4A46-9E1B-EF83EB7CED29} // ...
<SOURCE MIDI // Source section start
HASDATA 1 960 QN // Does the item have any data? PPQ resolution in ticks per quarter note
e 300 90 2b 60 // Standard MIDI message
// field 1, e - selected, E - not selected
// field 2, int, msg start offset
// field 3, MIDI status byte (message type + channel number)
// 0x80 = Note Off, channel 0
// 0x9F = Note On, channel 15
// 0xB4 = Control Change, channel 4
// field 4, Data1, depends on the message type (eg. note number)
// field 5, Data2, depends on the message type (eg. velocity)
e 60 80 2b 00 // selected msg, offset 60, note off, note 2b, velocity 0
<X 286306 0 // SysEx section start (SysEx midi message, variable length)
// field 1, x - selected, X - not selected
// field 2, ??
// field 3, ??
8AECAwQF9w== // (Base64 encoded)
> // SysEx section end
E 540 b0 7b 00 // unselected msg, offset 540, Control Change , all notes off (cc123)
GUID {9DAB52C8-6257-4A4E-9E60-323514C0DB9B} // Take id
IGNTEMPO 0 120.00000000 4 4 // Ignore project tempo, override with new settings
// field 1, int, ignore on/off
// field 2, float, tempo used to override project tempo
// field 3-4, int, time signature to override project time signature
VELLANE 128 97 0 // Velocity/CC lane settings
// field 1, int, lane type
// -1 = velocity
// 0-119 = CC #0 - CC #119
// 128 = pitch bend
// 129 = program
// 130 = channel pressure
// 131 = bank/program select
// 132 = text events
// 133 = sysex
// field 2, int, height of the lane in MIDI editor mode
// field 3, int, height of the lane in inline editor mode
BANKPROGRAMFILE "C:\Path\To\GM.reabank" // Path to ReaBank file used by the current item
CFGEDITVIEW 3787.8 0.1 0 48 0 0 0 // Somehow related to H/V zoom levels and scrollbar positions
CFGEDIT 1 1 0 1 1 16 1 1 1 1 1 0.06250000 0 0 // MIDI editor window configuration data
1024 768 0 2 0 0 0.00000000 0 0 // field 1, int, ??
// field 2, int (bool), sync editor transport to project transport
// field 3, int, ??
// field 4, int (bool), show velocity handles
// field 5, int (bool), show note names
// field 6, int, MIDI editor view mode
// 0 = piano roll, rectangle
// 1 = named notes, rectangle
// 5 = event list, rectangle
// 8 = piano roll, triangle
// 9 = named notes, triangle
// 13 = event list, triangle
// 16 = piano roll, diamond
// 17 = named notes, diamond
// 21 = event list, diamond
// field 7, int, ??
// field 8, int (bool), move CCs with notes
// field 9, int, ??
// field 10, int (bool), snap to grid
// field 11, int (bool), show grid
// field 12, float, grid division unit, in beats.ticks
// field 13, field 14, int, X and Y coords of upper left corner of ME window
// field 15, field 16, int, X and Y coords of bottom right corner of ME window
// field 17, int (bool), dock editor window
// field 18, int, note row view modes
// 0 = show all rows
// 1 = hide unused rows
// 2 = hide unused and unnamed rows
// field 19, int, state of Timebase setting
// 0 = project beats
// 1 = project sync
// 2 = project time
// 4 = source beats
// field 20, int, state of Color mode setting
// 0 = velocity
// 1 = channel
// 2 = pitch
// 4 = source
// field 21, float, length of last drawn note in beats.ticks
// field 22, int, re-use editor window
// 0 = off
// 1 = re-use MIDI editor window
// 2 = re-use MIDI editor window, keeping current item secondary
// field 23, int (bool), show velocity numbers
EVTFILTER 0 -1 -1 -1 -1 0 1 // Event filter settings
// field 1, int (16-bit mask), state of channel checkboxes
// 0000000000000000 (0) - "All" is checked, 1-16 unchecked
// 1111111111111111 (65536) - "All" is checked along with 1-16
// 1000000000000001 (32769) - 1 (LSB) and 16 (MSB) are selected
// etc.
// field 2, int, Event type
// -1 = <all>
// 144 = Note
// 160 = Poly Aftertouch
// 176 = Control Change (CC)
// 192 = Program Change (PC)
// 208 = Channel Aftertouch
// 224 = Pitch
// 240 = Sysex/Meta
// field 3, int, parameter field (range: 0-127)
// field 4, int, value Low field (range: 0-127)
// field 5, int, value High field (range: 0-127)
// field 6, int, draw events on channel setting (range: 0-15)
// field 7, int (bool), enable filter
> // Source section end
> // Item section end
```
MIDI Event -> field 2 above... This is the number of ticks (it's ok, I'll tell you in a minute) since the last event or (if this is the first MIDI Event) the start of the Item.
Ticks then. A tick is a small slice of a beat, so the number of Ticks per second varies with the BPM (Beats Per Minute) of the music.
1 beat = 2.6041666666666666666666666666667e-4 \times 240 \times 16
1 beat = 2.6041666666666666666666666666667e-4 * 240 * 16
The MIDI format used in REAPER State Chunks and .rpp files is documented here State Chunk And RPP MIDI Format.
## Envelope
Envelopes appear to share most of their characteristics though there may be some differences in how point values are used. Needs more testing
Envelope types include:
- VOLENV - Track (pre FX)/Take volume (0.0 to 2.0)
- VOLENV2 - Track (post FX) volume (0.0 to 2.0)
- PANENV - Track (pre FX)/Take pan (-1.0 to 1.0)
- PANENV2 - Track (post FX) pan (-1.0 to 1.0)
- MUTEENV - Track mute (0.0 to 1.0)
- AUXVOLENV - Receive volume (0.0 to 2.0?)
- AUXPANENV - Receive pan (-1.0 to 1.0)
- AUXMUTEENV - Receive mute (0.0 to 1.0)
- PARMENV - Plugin parameter (value range defined by additional parameters after type tag)
- TEMPOENVEX - Master tempo
```text
<VOLENV2 // Type. PARMENV has additional fields on this line (see below)
ACT 1 // Active, int (bool)
VIS 1 1 1.0 // Visibility
// field 1, int (bool), visible
// field 2, int (bool), show in lane
// field 3, float, ??
LANEHEIGHT 0 0 // Lane height
// field 1, int, height in pixels
// field 2, int, ??
ARM 1 // Armed, int (bool)
DEFSHAPE 0 // Default point shape, int
// 0 = Linear
// 1 = Square
// 2 = Slow Start/End
// 3 = Fast Start
// 4 = Fast End
// 5 = Bezier
PT 3.000000 -0.2 5 0 0 0 -0.7 // Envelope point definition
// field 1, float, position (seconds)
// field 2, float, value
// field 3, int, shape (-1 = envelope default?)
// field 4, int, optional, ?? (TEMPOENVEX time sig? check this)
// field 5, int (bool), selected (optional)
// field 6, int, ?? (optional)
// field 7, float, bezier tension (optional)
>```
PARMENV contains extra data denoting which plugin parameter is controlled and what the minimum, maximum and default values are.
```text
<PARMENV 1 0.0 1469.0 734.5 // Type
// field 1, int, param index - zero based top to bottom.
// REAPER tags additional bypass and wet params onto the end, in that order
// field 2, float, minimum value
// field 3, float, maximum value
// field 4, float, center/default value
/* snip */
>
```
## Track/Take FX
Plugin chains appear to be the same for both tracks and item takes, with the exception that the chunk name is different.
```text
<FXCHAIN // FXCHAIN for track or TAKEFX for take
WNDRECT 0 42 716 227 // FX Window position
// field 1, int, top
// field 2, int, left
// field 3, int, width
// field 4, int, height
SHOW 0 // Show FX window, int (bool)
LASTSEL 1 // Index of selected plugin (zero based), int
DOCKED 0 // FX window is docked, int (bool)
// --- Start of first plugin definition
BYPASS 0 0 0 // Plugin bypass state
// field 1, int (bool), bypassed
// field 2, int (bool), offline
// field 3, int (bool), set if plug-in is
// offline and should be floated when brought back online
<VST "VST: SomePlugin" "SomePlugin.dll" 0 "Sax offender" // Plugin data
(see VST(i) plugin info below) //
> //
FLOATPOS 0 0 0 0 // Plugin floating window pos, int (top, left, width, height)
FXID {1191A7FE-F583-477E-8416-D9F0F58226CD} // Plugin id, leave it alone
// --- Start of parameter envelopes for this plugin.
// One block for each non-empty envelope.
<PARMENV 2 0.0 1.0 0.5 // First parameter envelope
(see envelope chunk info) //
> //
// --- End of parameter envelopes
PARM_TCP 4 2 0 // Params visible on TCP/MCP.
// List of int indexes separated by spaces.
WAK 0 // int, ??
<COMMENT // Plugin comment. Not present if no comment.
Y29tbWVudA== // Binary data, probably best to leave it alone
> //
// --- Start of second plugin definition
BYPASS 0 0 0 // ...
<JS "Guitar/tremolo" "" // Start of JS plugin data
(see Jesusonic plugin info below) //
> //
FLOATPOS 0 0 0 0 // ...
FXID {BE5D3334-6675-4DAD-AFDD-F4489878D82A} // ...
WAK 0 // ...
<COMMENT // ...
Y29tbWVudA== // ...
> // ...
> // --- End of FX section
```
## VST(i) Plugin
```text
<VST "VST: SomePlugin" "SomePlugin.dll" 0 "Sax offender" // Start of VST plugin data
// field 1, str, default name
// field 2, str, filename
// field 3, int, ??
// field 4, str, display name (default used if empty)
RmFkbe9e7f4CAAAAAQAAAAAAAAACAAAAAAAAAAIAAAABAAAAAAAAAA== // Binary data, leave it alone (variable number of lines)
AgAAAAAAAAAwAAAAAAAAAAAAEADvvq3eDfCt3sP1qD4zMzM/AAAAPw== //
mplZPwAAAAAAAAA/MzMzP83MzD4AAAAAAABAP1Jlc29uYW50IEZpbA== //
dGVyAA== //
> // End of VST plugin data
```
## Jesusonic Plugin
For the sake of formatting, the plugin data has been truncated.
```text
<JS "Guitar/tremolo" "" // Start of JS plugin data
// field 1, str, filename
// field 2, str, display name (filename used if empty)
4.0 -6.0 0.0 - - - - - - - - - - - - - - - - - - - - // Data, 64 fields of float or '-' separated by spaces
> // End of JS plugin data
```

330
docs/REASAMPLOMATIC.md Normal file
View File

@@ -0,0 +1,330 @@
State format of REAPER's ReaSamplOmatic 5000
I used the verson that bundled with REAPER 7.48
// volume
000 82
001 66
002 51
003 207
004 185
005 9
006 224
007 63
//
008 0
009 0
010 0
011 0
012 0
013 0
014 224
015 63
// max volume
016 14
017 71
018 84
019 28
020 213
021 115
022 252
023 63
//
024 0
025 0
026 0
027 0
028 0
029 0
030 0
031 0
//
032 0
033 0
034 0
035 0
036 0
037 0
038 240
039 63
// pitch start/root note (note mode), C4 = -60, C3 = -48, C-1 = 0
040 154
041 153
042 153
043 153
044 153
045 153
046 177
047 63
//
048 205
049 204
050 204
051 204
052 204
053 204
054 235
055 63
//
056 0
057 0
058 0
059 0
060 0
061 0
062 0
063 0
//
064 28
065 199
066 113
067 28
068 199
069 113
070 220
071 63
// attack
072 252
073 169
074 241
075 210
076 77
077 98
078 64
079 63
// release
080 252
081 169
082 241
083 210
084 77
085 98
086 64
087 63
// obey note off: 0, 1
088 0
089 0
090 0
091 0
092 0
093 0
094 0
095 0
//
096 0
097 0
098 0
099 0
100 0
101 0
102 0
103 0
// sample start
104 0
105 0
106 0
107 0
108 0
109 0
110 0
111 0
// sample end
112 0
113 0
114 0
115 0
116 0
117 0
118 240
119 63
// pitch offset in semitones
120 0
121 0
122 0
123 0
124 0
125 0
126 224
127 63
//
128 1 // mode: 0, 1, 2
129 0
130 0
131 0
132 0
133 0
134 0
135 0
136 0
137 0
138 0
139 0
//
140 0
141 0
142 0
143 0
144 0
145 0
146 240
147 63
148 64
149 0
150 0
151 0
//
152 85
153 85
154 85
155 85
156 85
157 85
158 197
159 63
160 255
161 255
162 255
163 255
164 8
165 4
166 2
167 129
168 64
169 32
170 128
171 63
//
172 0
173 0
174 0
175 0
176 0
177 0
178 240
179 63
//
180 0
181 0
182 0
183 0
184 0
185 0
186 240
187 63
188 0
189 0
190 0
191 0
192 0
193 0
194 0
195 0
196 0
197 0
198 0
199 0
200 0
201 0
202 0
203 0
204 0
205 0
206 0
207 0
208 0
209 0
210 0
211 0
212 0
213 0
214 0
215 0
216 0
217 0
218 0
219 0
//
220 206
221 164
222 33
223 33
224 26
225 101
226 144
227 63
//
228 0
229 0
230 0
231 0
232 0
233 0
234 240
235 63
//
236 252
237 169
238 241
239 210
240 77
241 98
242 48
243 63
244 0
245 0
246 0
247 0
248 0
249 0
250 0
251 0
252 0
253 0
254 0
255 0
256 0
257 0
258 0
259 0
260 0
261 0
262 0
263 0
264 0
265 0
266 0
267 0
268 0
269 0
270 16
271 0
272 0
273 0