ts-flp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Auto-generated event constants from PyFLP
3
+ * FL Studio .flp file event IDs and types
4
+ *
5
+ * Event ID ranges:
6
+ * - BYTE (0-63): 1 byte data
7
+ * - WORD (64-127): 2 bytes data
8
+ * - DWORD (128-191): 4 bytes data
9
+ * - TEXT (192-207): Variable length strings (+ some IDs in DATA range)
10
+ * - DATA (208+): Variable length binary data
11
+ */
12
+ export declare const BYTE = 0;
13
+ export declare const WORD = 64;
14
+ export declare const DWORD = 128;
15
+ export declare const TEXT = 192;
16
+ export declare const DATA = 208;
17
+ export declare const NEW_TEXT_IDS: readonly [number, number, number];
18
+ /**
19
+ * Event IDs used by FL Studio project files
20
+ * Based on PyFLP's event definitions
21
+ */
22
+ export declare const EVENT_ID: {
23
+ readonly PROJECT_LOOP_ACTIVE: 9;
24
+ readonly PROJECT_SHOW_INFO: 10;
25
+ readonly PROJECT__VOLUME: 12;
26
+ readonly PROJECT_PAN_LAW: 23;
27
+ readonly PROJECT_LICENSED: 28;
28
+ readonly PROJECT__TEMPO_COARSE: number;
29
+ readonly PROJECT_PITCH: number;
30
+ readonly PROJECT__TEMPO_FINE: number;
31
+ readonly PROJECT_CUR_GROUP_ID: number;
32
+ readonly PROJECT_TEMPO: number;
33
+ readonly PROJECT_FL_BUILD: number;
34
+ readonly PROJECT_TITLE: number;
35
+ readonly PROJECT_COMMENTS: number;
36
+ readonly PROJECT_URL: number;
37
+ readonly PROJECT__RTF_COMMENTS: number;
38
+ readonly PROJECT_FL_VERSION: number;
39
+ readonly PROJECT_LICENSEE: number;
40
+ readonly PROJECT_DATA_PATH: number;
41
+ readonly PROJECT_GENRE: number;
42
+ readonly PROJECT_ARTISTS: number;
43
+ readonly PROJECT_TIMESTAMP: number;
44
+ readonly CHANNEL_IS_ENABLED: 0;
45
+ readonly CHANNEL__VOL_BYTE: 2;
46
+ readonly CHANNEL__PAN_BYTE: 3;
47
+ readonly CHANNEL_ZIPPED: 15;
48
+ readonly CHANNEL_PING_PONG_LOOP: 20;
49
+ readonly CHANNEL_TYPE: 21;
50
+ readonly CHANNEL_ROUTED_TO: 22;
51
+ readonly CHANNEL_IS_LOCKED: 32;
52
+ readonly CHANNEL_NEW: 64;
53
+ readonly CHANNEL_FREQ_TILT: number;
54
+ readonly CHANNEL_FX_FLAGS: number;
55
+ readonly CHANNEL_CUTOFF: number;
56
+ readonly CHANNEL__VOL_WORD: number;
57
+ readonly CHANNEL__PAN_WORD: number;
58
+ readonly CHANNEL_PREAMP: number;
59
+ readonly CHANNEL_FADE_OUT: number;
60
+ readonly CHANNEL_FADE_IN: number;
61
+ readonly CHANNEL_RESONANCE: number;
62
+ readonly CHANNEL_STEREO_DELAY: number;
63
+ readonly CHANNEL_POGO: number;
64
+ readonly CHANNEL_TIME_SHIFT: number;
65
+ readonly CHANNEL_CHILDREN: number;
66
+ readonly CHANNEL_SWING: number;
67
+ readonly CHANNEL_RING_MOD: number;
68
+ readonly CHANNEL_CUT_GROUP: number;
69
+ readonly CHANNEL_ROOT_NOTE: number;
70
+ readonly CHANNEL_DELAY_MOD_XY: number;
71
+ readonly CHANNEL_REVERB: number;
72
+ readonly CHANNEL__STRETCH_TIME: number;
73
+ readonly CHANNEL_FINE_TUNE: number;
74
+ readonly CHANNEL_SAMPLER_FLAGS: number;
75
+ readonly CHANNEL_LAYER_FLAGS: number;
76
+ readonly CHANNEL_GROUP_NUM: number;
77
+ readonly CHANNEL_AU_SAMPLE_RATE: number;
78
+ readonly CHANNEL__NAME: 192;
79
+ readonly CHANNEL_SAMPLE_PATH: number;
80
+ readonly CHANNEL_DELAY: number;
81
+ readonly CHANNEL_PARAMETERS: number;
82
+ readonly CHANNEL_ENVELOPE_LFO: number;
83
+ readonly CHANNEL_LEVELS: number;
84
+ readonly CHANNEL_POLYPHONY: number;
85
+ readonly CHANNEL_TRACKING: number;
86
+ readonly CHANNEL_LEVEL_ADJUSTS: number;
87
+ readonly CHANNEL_AUTOMATION: number;
88
+ readonly PLUGIN_COLOR: 128;
89
+ readonly PLUGIN_ICON: number;
90
+ readonly PLUGIN_INTERNAL_NAME: number;
91
+ readonly PLUGIN_NAME: number;
92
+ readonly PLUGIN_WRAPPER: number;
93
+ readonly PLUGIN_DATA: number;
94
+ readonly DISPLAY_GROUP_NAME: number;
95
+ readonly RACK_SWING: 11;
96
+ readonly RACK__FIT_TO_STEPS: 13;
97
+ readonly RACK_WINDOW_HEIGHT: number;
98
+ readonly MIXER_SLOT_INDEX: number;
99
+ readonly MIXER_INSERT_ICON: number;
100
+ readonly MIXER_INSERT_OUTPUT: number;
101
+ readonly MIXER_INSERT_COLOR: number;
102
+ readonly MIXER_INSERT_INPUT: number;
103
+ readonly MIXER_INSERT_NAME: number;
104
+ readonly MIXER_INSERT_ROUTING: number;
105
+ readonly MIXER_INSERT_FLAGS: number;
106
+ };
107
+ /**
108
+ * Event data type classification
109
+ */
110
+ export type EventKind = "u8" | "i8" | "u16" | "i16" | "u32" | "i32" | "f32" | "text" | "data" | "unknown";
111
+ /**
112
+ * Maps event IDs to their data type
113
+ * Used for proper serialization/deserialization
114
+ */
115
+ export declare const EVENT_KIND: Record<number, EventKind>;
116
+ /**
117
+ * Determines the event kind based on ID
118
+ * Falls back to range-based detection if not explicitly mapped
119
+ */
120
+ export declare function getEventKind(eventId: number): EventKind;
121
+ /**
122
+ * Returns the fixed size for BYTE/WORD/DWORD events
123
+ * Returns -1 for variable-length events (TEXT/DATA)
124
+ */
125
+ export declare function getEventFixedSize(eventId: number): number;
126
+ //# sourceMappingURL=events.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.generated.d.ts","sourceRoot":"","sources":["../../../src/generated/events.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,eAAO,MAAM,IAAI,IAAI,CAAC;AACtB,eAAO,MAAM,IAAI,KAAK,CAAC;AACvB,eAAO,MAAM,KAAK,MAAM,CAAC;AACzB,eAAO,MAAM,IAAI,MAAM,CAAC;AACxB,eAAO,MAAM,IAAI,MAAM,CAAC;AAGxB,eAAO,MAAM,YAAY,mCAIf,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+FX,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,MAAM,GACN,MAAM,GACN,SAAS,CAAC;AAEd;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAgGhD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAmBvD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASzD"}
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Auto-generated event constants from PyFLP
3
+ * FL Studio .flp file event IDs and types
4
+ *
5
+ * Event ID ranges:
6
+ * - BYTE (0-63): 1 byte data
7
+ * - WORD (64-127): 2 bytes data
8
+ * - DWORD (128-191): 4 bytes data
9
+ * - TEXT (192-207): Variable length strings (+ some IDs in DATA range)
10
+ * - DATA (208+): Variable length binary data
11
+ */
12
+ // Base offsets for event ID ranges
13
+ export const BYTE = 0;
14
+ export const WORD = 64;
15
+ export const DWORD = 128;
16
+ export const TEXT = 192;
17
+ export const DATA = 208;
18
+ // IDs for TEXT events that use UTF-16LE in newer FL versions
19
+ export const NEW_TEXT_IDS = [
20
+ TEXT + 49, // ArrangementID.Name
21
+ TEXT + 39, // DisplayGroupID.Name
22
+ TEXT + 47, // TrackID.Name
23
+ ];
24
+ /**
25
+ * Event IDs used by FL Studio project files
26
+ * Based on PyFLP's event definitions
27
+ */
28
+ export const EVENT_ID = {
29
+ // === Project IDs (from project.py) ===
30
+ PROJECT_LOOP_ACTIVE: 9,
31
+ PROJECT_SHOW_INFO: 10,
32
+ PROJECT__VOLUME: 12,
33
+ PROJECT_PAN_LAW: 23,
34
+ PROJECT_LICENSED: 28,
35
+ PROJECT__TEMPO_COARSE: WORD + 2, // 66
36
+ PROJECT_PITCH: WORD + 16, // 80
37
+ PROJECT__TEMPO_FINE: WORD + 29, // 93
38
+ PROJECT_CUR_GROUP_ID: DWORD + 18,
39
+ PROJECT_TEMPO: DWORD + 28,
40
+ PROJECT_FL_BUILD: DWORD + 31,
41
+ PROJECT_TITLE: TEXT + 2, // 194
42
+ PROJECT_COMMENTS: TEXT + 3, // 195
43
+ PROJECT_URL: TEXT + 5, // 197
44
+ PROJECT__RTF_COMMENTS: TEXT + 6, // 198
45
+ PROJECT_FL_VERSION: TEXT + 7, // 199
46
+ PROJECT_LICENSEE: TEXT + 8, // 200
47
+ PROJECT_DATA_PATH: TEXT + 10, // 202
48
+ PROJECT_GENRE: TEXT + 14, // 206
49
+ PROJECT_ARTISTS: TEXT + 15, // 207
50
+ PROJECT_TIMESTAMP: DATA + 29, // 237
51
+ // === Channel IDs (from channel.py) ===
52
+ CHANNEL_IS_ENABLED: 0,
53
+ CHANNEL__VOL_BYTE: 2,
54
+ CHANNEL__PAN_BYTE: 3,
55
+ CHANNEL_ZIPPED: 15,
56
+ CHANNEL_PING_PONG_LOOP: 20,
57
+ CHANNEL_TYPE: 21,
58
+ CHANNEL_ROUTED_TO: 22,
59
+ CHANNEL_IS_LOCKED: 32,
60
+ CHANNEL_NEW: WORD,
61
+ CHANNEL_FREQ_TILT: WORD + 5, // 69
62
+ CHANNEL_FX_FLAGS: WORD + 6, // 70
63
+ CHANNEL_CUTOFF: WORD + 7, // 71
64
+ CHANNEL__VOL_WORD: WORD + 8, // 72
65
+ CHANNEL__PAN_WORD: WORD + 9, // 73
66
+ CHANNEL_PREAMP: WORD + 10, // 74
67
+ CHANNEL_FADE_OUT: WORD + 11, // 75
68
+ CHANNEL_FADE_IN: WORD + 12, // 76
69
+ CHANNEL_RESONANCE: WORD + 19, // 83
70
+ CHANNEL_STEREO_DELAY: WORD + 21, // 85
71
+ CHANNEL_POGO: WORD + 22, // 86
72
+ CHANNEL_TIME_SHIFT: WORD + 25, // 89
73
+ CHANNEL_CHILDREN: WORD + 30, // 94
74
+ CHANNEL_SWING: WORD + 33, // 97
75
+ CHANNEL_RING_MOD: DWORD + 3,
76
+ CHANNEL_CUT_GROUP: DWORD + 4,
77
+ CHANNEL_ROOT_NOTE: DWORD + 7,
78
+ CHANNEL_DELAY_MOD_XY: DWORD + 10,
79
+ CHANNEL_REVERB: DWORD + 11,
80
+ CHANNEL__STRETCH_TIME: DWORD + 12,
81
+ CHANNEL_FINE_TUNE: DWORD + 14,
82
+ CHANNEL_SAMPLER_FLAGS: DWORD + 15,
83
+ CHANNEL_LAYER_FLAGS: DWORD + 16,
84
+ CHANNEL_GROUP_NUM: DWORD + 17,
85
+ CHANNEL_AU_SAMPLE_RATE: DWORD + 25,
86
+ CHANNEL__NAME: TEXT,
87
+ CHANNEL_SAMPLE_PATH: TEXT + 4, // 196
88
+ CHANNEL_DELAY: DATA + 1, // 209
89
+ CHANNEL_PARAMETERS: DATA + 7, // 215
90
+ CHANNEL_ENVELOPE_LFO: DATA + 10, // 218
91
+ CHANNEL_LEVELS: DATA + 11, // 219
92
+ CHANNEL_POLYPHONY: DATA + 13, // 221
93
+ CHANNEL_TRACKING: DATA + 20, // 228
94
+ CHANNEL_LEVEL_ADJUSTS: DATA + 21, // 229
95
+ CHANNEL_AUTOMATION: DATA + 26, // 234
96
+ // === Plugin IDs (from plugin.py) ===
97
+ PLUGIN_COLOR: DWORD,
98
+ PLUGIN_ICON: DWORD + 27,
99
+ PLUGIN_INTERNAL_NAME: TEXT + 9, // 201
100
+ PLUGIN_NAME: TEXT + 11, // 203
101
+ PLUGIN_WRAPPER: DATA + 4, // 212
102
+ PLUGIN_DATA: DATA + 5, // 213
103
+ // === Display Group IDs ===
104
+ DISPLAY_GROUP_NAME: TEXT + 39, // 231
105
+ // === Rack IDs ===
106
+ RACK_SWING: 11,
107
+ RACK__FIT_TO_STEPS: 13,
108
+ RACK_WINDOW_HEIGHT: DWORD + 5,
109
+ // === Mixer IDs (from mixer.py) ===
110
+ MIXER_SLOT_INDEX: WORD + 34, // 98
111
+ MIXER_INSERT_ICON: WORD + 31, // 95
112
+ MIXER_INSERT_OUTPUT: DWORD + 19,
113
+ MIXER_INSERT_COLOR: DWORD + 21,
114
+ MIXER_INSERT_INPUT: DWORD + 26,
115
+ MIXER_INSERT_NAME: TEXT + 12, // 204
116
+ MIXER_INSERT_ROUTING: DATA + 27, // 235
117
+ MIXER_INSERT_FLAGS: DATA + 28, // 236
118
+ };
119
+ /**
120
+ * Maps event IDs to their data type
121
+ * Used for proper serialization/deserialization
122
+ */
123
+ export const EVENT_KIND = {
124
+ // Project events
125
+ [EVENT_ID.PROJECT_LOOP_ACTIVE]: "u8",
126
+ [EVENT_ID.PROJECT_SHOW_INFO]: "u8",
127
+ [EVENT_ID.PROJECT__VOLUME]: "u8",
128
+ [EVENT_ID.PROJECT_PAN_LAW]: "u8",
129
+ [EVENT_ID.PROJECT_LICENSED]: "u8",
130
+ [EVENT_ID.PROJECT__TEMPO_COARSE]: "u16",
131
+ [EVENT_ID.PROJECT_PITCH]: "i16",
132
+ [EVENT_ID.PROJECT__TEMPO_FINE]: "u16",
133
+ [EVENT_ID.PROJECT_CUR_GROUP_ID]: "i32",
134
+ [EVENT_ID.PROJECT_TEMPO]: "u32",
135
+ [EVENT_ID.PROJECT_FL_BUILD]: "u32",
136
+ [EVENT_ID.PROJECT_TITLE]: "text",
137
+ [EVENT_ID.PROJECT_COMMENTS]: "text",
138
+ [EVENT_ID.PROJECT_URL]: "text",
139
+ [EVENT_ID.PROJECT__RTF_COMMENTS]: "text",
140
+ [EVENT_ID.PROJECT_FL_VERSION]: "text",
141
+ [EVENT_ID.PROJECT_LICENSEE]: "text",
142
+ [EVENT_ID.PROJECT_DATA_PATH]: "text",
143
+ [EVENT_ID.PROJECT_GENRE]: "text",
144
+ [EVENT_ID.PROJECT_ARTISTS]: "text",
145
+ [EVENT_ID.PROJECT_TIMESTAMP]: "data",
146
+ // Channel events
147
+ [EVENT_ID.CHANNEL_IS_ENABLED]: "u8",
148
+ [EVENT_ID.CHANNEL__VOL_BYTE]: "u8",
149
+ [EVENT_ID.CHANNEL__PAN_BYTE]: "u8",
150
+ [EVENT_ID.CHANNEL_ZIPPED]: "u8",
151
+ [EVENT_ID.CHANNEL_PING_PONG_LOOP]: "u8",
152
+ [EVENT_ID.CHANNEL_TYPE]: "u8",
153
+ [EVENT_ID.CHANNEL_ROUTED_TO]: "i8",
154
+ [EVENT_ID.CHANNEL_IS_LOCKED]: "u8",
155
+ [EVENT_ID.CHANNEL_NEW]: "u16",
156
+ [EVENT_ID.CHANNEL_FREQ_TILT]: "u16",
157
+ [EVENT_ID.CHANNEL_FX_FLAGS]: "u16",
158
+ [EVENT_ID.CHANNEL_CUTOFF]: "u16",
159
+ [EVENT_ID.CHANNEL__VOL_WORD]: "u16",
160
+ [EVENT_ID.CHANNEL__PAN_WORD]: "u16",
161
+ [EVENT_ID.CHANNEL_PREAMP]: "u16",
162
+ [EVENT_ID.CHANNEL_FADE_OUT]: "u16",
163
+ [EVENT_ID.CHANNEL_FADE_IN]: "u16",
164
+ [EVENT_ID.CHANNEL_RESONANCE]: "u16",
165
+ [EVENT_ID.CHANNEL_STEREO_DELAY]: "u16",
166
+ [EVENT_ID.CHANNEL_POGO]: "u16",
167
+ [EVENT_ID.CHANNEL_TIME_SHIFT]: "u16",
168
+ [EVENT_ID.CHANNEL_CHILDREN]: "u16",
169
+ [EVENT_ID.CHANNEL_SWING]: "u16",
170
+ [EVENT_ID.CHANNEL_RING_MOD]: "u32",
171
+ [EVENT_ID.CHANNEL_CUT_GROUP]: "u32",
172
+ [EVENT_ID.CHANNEL_ROOT_NOTE]: "u32",
173
+ [EVENT_ID.CHANNEL_DELAY_MOD_XY]: "u32",
174
+ [EVENT_ID.CHANNEL_REVERB]: "u32",
175
+ [EVENT_ID.CHANNEL__STRETCH_TIME]: "f32",
176
+ [EVENT_ID.CHANNEL_FINE_TUNE]: "i32",
177
+ [EVENT_ID.CHANNEL_SAMPLER_FLAGS]: "u32",
178
+ [EVENT_ID.CHANNEL_LAYER_FLAGS]: "u32",
179
+ [EVENT_ID.CHANNEL_GROUP_NUM]: "i32",
180
+ [EVENT_ID.CHANNEL_AU_SAMPLE_RATE]: "u32",
181
+ [EVENT_ID.CHANNEL__NAME]: "text",
182
+ [EVENT_ID.CHANNEL_SAMPLE_PATH]: "text",
183
+ [EVENT_ID.CHANNEL_DELAY]: "data",
184
+ [EVENT_ID.CHANNEL_PARAMETERS]: "data",
185
+ [EVENT_ID.CHANNEL_ENVELOPE_LFO]: "data",
186
+ [EVENT_ID.CHANNEL_LEVELS]: "data",
187
+ [EVENT_ID.CHANNEL_POLYPHONY]: "data",
188
+ [EVENT_ID.CHANNEL_TRACKING]: "data",
189
+ [EVENT_ID.CHANNEL_LEVEL_ADJUSTS]: "data",
190
+ [EVENT_ID.CHANNEL_AUTOMATION]: "data",
191
+ // Plugin events
192
+ [EVENT_ID.PLUGIN_COLOR]: "u32",
193
+ [EVENT_ID.PLUGIN_ICON]: "u32",
194
+ [EVENT_ID.PLUGIN_INTERNAL_NAME]: "text",
195
+ [EVENT_ID.PLUGIN_NAME]: "text",
196
+ [EVENT_ID.PLUGIN_WRAPPER]: "data",
197
+ [EVENT_ID.PLUGIN_DATA]: "data",
198
+ // Display Group events
199
+ [EVENT_ID.DISPLAY_GROUP_NAME]: "data",
200
+ // Rack events
201
+ [EVENT_ID.RACK_SWING]: "u8",
202
+ [EVENT_ID.RACK__FIT_TO_STEPS]: "u8",
203
+ [EVENT_ID.RACK_WINDOW_HEIGHT]: "u32",
204
+ // Mixer events
205
+ [EVENT_ID.MIXER_SLOT_INDEX]: "u16",
206
+ [EVENT_ID.MIXER_INSERT_ICON]: "i16",
207
+ [EVENT_ID.MIXER_INSERT_OUTPUT]: "i32",
208
+ [EVENT_ID.MIXER_INSERT_COLOR]: "u32",
209
+ [EVENT_ID.MIXER_INSERT_INPUT]: "i32",
210
+ [EVENT_ID.MIXER_INSERT_NAME]: "text",
211
+ [EVENT_ID.MIXER_INSERT_ROUTING]: "data",
212
+ [EVENT_ID.MIXER_INSERT_FLAGS]: "data",
213
+ };
214
+ /**
215
+ * Determines the event kind based on ID
216
+ * Falls back to range-based detection if not explicitly mapped
217
+ */
218
+ export function getEventKind(eventId) {
219
+ // Check explicit mapping first
220
+ const mapped = EVENT_KIND[eventId];
221
+ if (mapped !== undefined) {
222
+ return mapped;
223
+ }
224
+ // Fall back to range-based detection
225
+ if (eventId < WORD) {
226
+ return "u8";
227
+ }
228
+ else if (eventId < DWORD) {
229
+ return "u16";
230
+ }
231
+ else if (eventId < TEXT) {
232
+ return "u32";
233
+ }
234
+ else if (eventId < DATA || NEW_TEXT_IDS.includes(eventId)) {
235
+ return "text";
236
+ }
237
+ else {
238
+ return "data";
239
+ }
240
+ }
241
+ /**
242
+ * Returns the fixed size for BYTE/WORD/DWORD events
243
+ * Returns -1 for variable-length events (TEXT/DATA)
244
+ */
245
+ export function getEventFixedSize(eventId) {
246
+ if (eventId < WORD) {
247
+ return 1;
248
+ }
249
+ else if (eventId < DWORD) {
250
+ return 2;
251
+ }
252
+ else if (eventId < TEXT) {
253
+ return 4;
254
+ }
255
+ return -1; // Variable length
256
+ }
257
+ //# sourceMappingURL=events.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.generated.js","sourceRoot":"","sources":["../../../src/generated/events.generated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * ts-flp - A minimal TypeScript port of PyFLP for FL Studio .flp files
3
+ *
4
+ * This library provides conservative (non-destructive) parsing and patching
5
+ * of FL Studio project files. It preserves all unknown data byte-for-byte.
6
+ *
7
+ * Features:
8
+ * - Read and modify project metadata (name, description, artist, BPM)
9
+ * - Read and modify timestamps (creation date, work time)
10
+ * - List and remap sample paths
11
+ * - List VST plugins (name and vendor)
12
+ * - Conservative round-trip: unchanged files are byte-identical
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { parseFlp, serializeFlp, readProjectMeta, writeProjectMeta } from "ts-flp";
17
+ * import * as fs from "fs";
18
+ *
19
+ * // Parse an FLP file
20
+ * const buffer = fs.readFileSync("project.flp");
21
+ * const parsed = parseFlp(buffer);
22
+ *
23
+ * // Read metadata
24
+ * const meta = readProjectMeta(parsed);
25
+ * console.log(meta.name, meta.bpm);
26
+ *
27
+ * // Modify and save
28
+ * const modified = writeProjectMeta(parsed, { bpm: 140 });
29
+ * fs.writeFileSync("project_modified.flp", serializeFlp(modified));
30
+ * ```
31
+ */
32
+ export { createEvent, createNumberPayload, createTextPayload, findEvents, findFirstEvent, getEventNumber, getEventString, parseFlp, patchEvents, serializeFlp, type FlpEvent, type ParsedFlp } from "./parser/FlpParser.js";
33
+ export { getFlVersion, getPPQ, listPlugins, listSamples, readProjectMeta, readProjectTimeInfo, rewriteSamplePaths, writeProjectMeta, writeProjectTimeInfo, type PluginRef, type ProjectMeta, type ProjectTimeInfo, type SampleRef } from "./api/ProjectApi.js";
34
+ export { EVENT_ID, EVENT_KIND, getEventFixedSize, getEventKind } from "./generated/events.generated.js";
35
+ export { BinaryReader } from "./io/BinaryReader.js";
36
+ export { BinaryWriter, encodeVarInt, varIntSize } from "./io/BinaryWriter.js";
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAGH,OAAO,EACL,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAC/D,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EACnH,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,YAAY,EACZ,MAAM,EACN,WAAW,EACX,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAGxG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ts-flp - A minimal TypeScript port of PyFLP for FL Studio .flp files
3
+ *
4
+ * This library provides conservative (non-destructive) parsing and patching
5
+ * of FL Studio project files. It preserves all unknown data byte-for-byte.
6
+ *
7
+ * Features:
8
+ * - Read and modify project metadata (name, description, artist, BPM)
9
+ * - Read and modify timestamps (creation date, work time)
10
+ * - List and remap sample paths
11
+ * - List VST plugins (name and vendor)
12
+ * - Conservative round-trip: unchanged files are byte-identical
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { parseFlp, serializeFlp, readProjectMeta, writeProjectMeta } from "ts-flp";
17
+ * import * as fs from "fs";
18
+ *
19
+ * // Parse an FLP file
20
+ * const buffer = fs.readFileSync("project.flp");
21
+ * const parsed = parseFlp(buffer);
22
+ *
23
+ * // Read metadata
24
+ * const meta = readProjectMeta(parsed);
25
+ * console.log(meta.name, meta.bpm);
26
+ *
27
+ * // Modify and save
28
+ * const modified = writeProjectMeta(parsed, { bpm: 140 });
29
+ * fs.writeFileSync("project_modified.flp", serializeFlp(modified));
30
+ * ```
31
+ */
32
+ // Re-export parser functions
33
+ export { createEvent, createNumberPayload, createTextPayload, findEvents, findFirstEvent, getEventNumber, getEventString, parseFlp, patchEvents, serializeFlp } from "./parser/FlpParser.js";
34
+ // Re-export API functions
35
+ export { getFlVersion, getPPQ, listPlugins, listSamples, readProjectMeta, readProjectTimeInfo, rewriteSamplePaths, writeProjectMeta, writeProjectTimeInfo } from "./api/ProjectApi.js";
36
+ // Re-export event constants
37
+ export { EVENT_ID, EVENT_KIND, getEventFixedSize, getEventKind } from "./generated/events.generated.js";
38
+ // Re-export IO utilities for advanced usage
39
+ export { BinaryReader } from "./io/BinaryReader.js";
40
+ export { BinaryWriter, encodeVarInt, varIntSize } from "./io/BinaryWriter.js";
41
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,6BAA6B;AAC7B,OAAO,EACL,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAC/D,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EACpF,MAAM,uBAAuB,CAAC;AAE/B,0BAA0B;AAC1B,OAAO,EACL,YAAY,EACZ,MAAM,EACN,WAAW,EACX,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,EAKrB,MAAM,qBAAqB,CAAC;AAE7B,4BAA4B;AAC5B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAExG,4CAA4C;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Binary reader for FL Studio .flp files
3
+ * Uses smart-buffer for binary reading and protobufjs for VarInt decoding
4
+ */
5
+ export declare class BinaryReader {
6
+ private sb;
7
+ constructor(buffer: Buffer);
8
+ /**
9
+ * Returns current read position
10
+ */
11
+ tell(): number;
12
+ /**
13
+ * Seeks to an absolute position
14
+ */
15
+ seek(pos: number): void;
16
+ /**
17
+ * Seeks relative to current position
18
+ */
19
+ skip(offset: number): void;
20
+ /**
21
+ * Returns total buffer length
22
+ */
23
+ length(): number;
24
+ /**
25
+ * Returns remaining bytes to read
26
+ */
27
+ remaining(): number;
28
+ /**
29
+ * Returns true if there are more bytes to read
30
+ */
31
+ hasMore(): boolean;
32
+ /**
33
+ * Reads an unsigned 8-bit integer
34
+ */
35
+ readU8(): number;
36
+ /**
37
+ * Reads a signed 8-bit integer
38
+ */
39
+ readI8(): number;
40
+ /**
41
+ * Reads an unsigned 16-bit integer (little-endian)
42
+ */
43
+ readU16LE(): number;
44
+ /**
45
+ * Reads a signed 16-bit integer (little-endian)
46
+ */
47
+ readI16LE(): number;
48
+ /**
49
+ * Reads an unsigned 32-bit integer (little-endian)
50
+ */
51
+ readU32LE(): number;
52
+ /**
53
+ * Reads a signed 32-bit integer (little-endian)
54
+ */
55
+ readI32LE(): number;
56
+ /**
57
+ * Reads a 32-bit float (little-endian)
58
+ */
59
+ readF32LE(): number;
60
+ /**
61
+ * Reads a 64-bit float (little-endian)
62
+ */
63
+ readF64LE(): number;
64
+ /**
65
+ * Reads raw bytes
66
+ */
67
+ readBytes(length: number): Buffer;
68
+ /**
69
+ * Reads a VarInt (variable-length integer) using protobufjs
70
+ * FL Studio uses this encoding for TEXT and DATA event sizes
71
+ */
72
+ readVarInt(): number;
73
+ /**
74
+ * Reads an ASCII string (null-terminated)
75
+ */
76
+ readAsciiString(length: number): string;
77
+ /**
78
+ * Reads a UTF-16LE string (null-terminated)
79
+ */
80
+ readUtf16LEString(length: number): string;
81
+ /**
82
+ * Peeks at bytes without advancing position
83
+ */
84
+ peek(length: number): Buffer;
85
+ /**
86
+ * Peeks at a single byte without advancing position
87
+ */
88
+ peekU8(): number;
89
+ /**
90
+ * Returns the internal buffer
91
+ */
92
+ toBuffer(): Buffer;
93
+ }
94
+ //# sourceMappingURL=BinaryReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BinaryReader.d.ts","sourceRoot":"","sources":["../../../src/io/BinaryReader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAc;gBAEZ,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIjC;;;OAGG;IACH,UAAU,IAAI,MAAM;IAUpB;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAOvC;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAQzC;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAO5B;;OAEG;IACH,MAAM,IAAI,MAAM;IAOhB;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGnB"}