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.
- package/LICENSE +674 -0
- package/README.md +226 -0
- package/dist/src/api/ProjectApi.d.ts +83 -0
- package/dist/src/api/ProjectApi.d.ts.map +1 -0
- package/dist/src/api/ProjectApi.js +326 -0
- package/dist/src/api/ProjectApi.js.map +1 -0
- package/dist/src/generated/events.generated.d.ts +126 -0
- package/dist/src/generated/events.generated.d.ts.map +1 -0
- package/dist/src/generated/events.generated.js +257 -0
- package/dist/src/generated/events.generated.js.map +1 -0
- package/dist/src/index.d.ts +37 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +41 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/io/BinaryReader.d.ts +94 -0
- package/dist/src/io/BinaryReader.d.ts.map +1 -0
- package/dist/src/io/BinaryReader.js +159 -0
- package/dist/src/io/BinaryReader.js.map +1 -0
- package/dist/src/io/BinaryWriter.d.ts +74 -0
- package/dist/src/io/BinaryWriter.d.ts.map +1 -0
- package/dist/src/io/BinaryWriter.js +124 -0
- package/dist/src/io/BinaryWriter.js.map +1 -0
- package/dist/src/parser/FlpParser.d.ts +90 -0
- package/dist/src/parser/FlpParser.d.ts.map +1 -0
- package/dist/src/parser/FlpParser.js +313 -0
- package/dist/src/parser/FlpParser.js.map +1 -0
- package/package.json +73 -0
|
@@ -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"}
|