@@ -17,26 +17,22 @@ namespace midi {
17
17
if (ADJUSTMENT_INTERVAL_MS < 0 ) throw ConfigException (" ADJUSTMENT_INTERVAL_MS cannot be negative" );
18
18
}
19
19
20
- void LegitModeSettings::validate () const {
21
- if (TIMING_VARIATION < 0.0 || TIMING_VARIATION > 1.0 )
22
- throw ConfigException (" TIMING_VARIATION must be between 0.0 and 1.0" );
23
- if (NOTE_SKIP_CHANCE < 0.0 || NOTE_SKIP_CHANCE > 1.0 )
24
- throw ConfigException (" NOTE_SKIP_CHANCE must be between 0.0 and 1.0" );
25
- if (EXTRA_DELAY_CHANCE < 0.0 || EXTRA_DELAY_CHANCE > 1.0 )
26
- throw ConfigException (" EXTRA_DELAY_CHANCE must be between 0.0 and 1.0" );
27
- if (EXTRA_DELAY_MIN < 0.0 ) throw ConfigException (" EXTRA_DELAY_MIN cannot be negative" );
28
- if (EXTRA_DELAY_MAX < EXTRA_DELAY_MIN)
29
- throw ConfigException (" EXTRA_DELAY_MAX cannot be less than EXTRA_DELAY_MIN" );
30
- }
31
20
32
21
void AutoTranspose::validate () const {
33
22
if (TRANSPOSE_UP_KEY.empty () || TRANSPOSE_DOWN_KEY.empty ()) {
34
23
throw ConfigException (" Transpose hotkeys cannot be empty" );
35
24
}
36
25
}
37
26
27
+ void AutoplayerTimingAccuracy::validate () const {
28
+ if (MAX_PASSES <= 0 )
29
+ throw ConfigException (" MAX_PASSES must be positive" );
30
+ if (MEASURE_SEC <= 0.0 )
31
+ throw ConfigException (" MEASURE_SEC must be positive" );
32
+ }
33
+
38
34
void MIDISettings::validate () const {
39
- // abcdefg
35
+ // No specific validation needed for DETECT_DRUMS
40
36
}
41
37
42
38
void HotkeySettings::validate () const {
@@ -108,9 +104,9 @@ namespace midi {
108
104
midi.validate ();
109
105
playback.validate ();
110
106
volume.validate ();
111
- legit_mode.validate ();
112
107
auto_transpose.validate ();
113
108
hotkeys.validate ();
109
+ autoplayer_timing.validate ();
114
110
validateKeyMappings ();
115
111
}
116
112
catch (const ConfigException& e) {
@@ -175,27 +171,6 @@ namespace midi {
175
171
v.validate ();
176
172
}
177
173
178
- void to_json (json& j, const LegitModeSettings& l) {
179
- j = json{
180
- {" ENABLED" , l.ENABLED },
181
- {" TIMING_VARIATION" , l.TIMING_VARIATION },
182
- {" NOTE_SKIP_CHANCE" , l.NOTE_SKIP_CHANCE },
183
- {" EXTRA_DELAY_CHANCE" , l.EXTRA_DELAY_CHANCE },
184
- {" EXTRA_DELAY_MIN" , l.EXTRA_DELAY_MIN },
185
- {" EXTRA_DELAY_MAX" , l.EXTRA_DELAY_MAX }
186
- };
187
- }
188
-
189
- void from_json (const json& j, LegitModeSettings& l) {
190
- j.at (" ENABLED" ).get_to (l.ENABLED );
191
- j.at (" TIMING_VARIATION" ).get_to (l.TIMING_VARIATION );
192
- j.at (" NOTE_SKIP_CHANCE" ).get_to (l.NOTE_SKIP_CHANCE );
193
- j.at (" EXTRA_DELAY_CHANCE" ).get_to (l.EXTRA_DELAY_CHANCE );
194
- j.at (" EXTRA_DELAY_MIN" ).get_to (l.EXTRA_DELAY_MIN );
195
- j.at (" EXTRA_DELAY_MAX" ).get_to (l.EXTRA_DELAY_MAX );
196
- l.validate ();
197
- }
198
-
199
174
void to_json (json& j, const AutoTranspose& at) {
200
175
j = json{
201
176
{" ENABLED" , at.ENABLED },
@@ -210,14 +185,28 @@ namespace midi {
210
185
j.at (" TRANSPOSE_DOWN_KEY" ).get_to (at.TRANSPOSE_DOWN_KEY );
211
186
}
212
187
188
+ void to_json (json& j, const AutoplayerTimingAccuracy& a) {
189
+ j = json{
190
+ {" MAX_PASSES" , a.MAX_PASSES },
191
+ {" MEASURE_SEC" , a.MEASURE_SEC }
192
+ };
193
+ }
194
+
195
+ void from_json (const json& j, AutoplayerTimingAccuracy& a) {
196
+ j.at (" MAX_PASSES" ).get_to (a.MAX_PASSES );
197
+ j.at (" MEASURE_SEC" ).get_to (a.MEASURE_SEC );
198
+ a.validate ();
199
+ }
200
+
213
201
void to_json (json& j, const MIDISettings& m) {
214
- j = json{ {" FILTER_DRUMS " , m.FILTER_DRUMS } };
202
+ j = json{ {" DETECT_DRUMS " , m.DETECT_DRUMS } };
215
203
}
216
204
217
205
void from_json (const json& j, MIDISettings& m) {
218
- j.at (" FILTER_DRUMS " ).get_to (m.FILTER_DRUMS );
206
+ j.at (" DETECT_DRUMS " ).get_to (m.DETECT_DRUMS );
219
207
m.validate ();
220
208
}
209
+
221
210
void to_json (nlohmann::json& j, const UISettings& ui) {
222
211
j = nlohmann::json{ {" alwaysOnTop" , ui.alwaysOnTop } };
223
212
}
@@ -282,10 +271,10 @@ namespace midi {
282
271
j = json{
283
272
{" VOLUME_SETTINGS" , c.volume },
284
273
{" KEY_MAPPINGS" , c.key_mappings },
285
- {" LEGIT_MODE_SETTINGS" , c.legit_mode },
286
274
{" AUTO_TRANSPOSE" , c.auto_transpose },
287
275
{" HOTKEY_SETTINGS" , c.hotkeys },
288
- {" MIDI_SETTINGS" , json{{" FILTER_DRUMS" , c.midi .FILTER_DRUMS }}},
276
+ {" MIDI_SETTINGS" , json{{" DETECT_DRUMS" , c.midi .DETECT_DRUMS }}},
277
+ {" AUTOPLAYER_TIMING_ACCURACY" , c.autoplayer_timing },
289
278
{" STACKED_NOTE_HANDLING_MODE" , Config::noteHandlingModeToString (c.playback .noteHandlingMode )},
290
279
{" CUSTOM_VELOCITY_CURVES" , json::array ()},
291
280
{" PLAYLIST_FILES" , c.playlistFiles },
@@ -303,10 +292,13 @@ namespace midi {
303
292
void from_json (const json& j, Config& c) {
304
293
j.at (" VOLUME_SETTINGS" ).get_to (c.volume );
305
294
j.at (" KEY_MAPPINGS" ).get_to (c.key_mappings );
306
- j.at (" LEGIT_MODE_SETTINGS" ).get_to (c.legit_mode );
307
295
j.at (" AUTO_TRANSPOSE" ).get_to (c.auto_transpose );
308
296
j.at (" HOTKEY_SETTINGS" ).get_to (c.hotkeys );
309
- j.at (" MIDI_SETTINGS" ).at (" FILTER_DRUMS" ).get_to (c.midi .FILTER_DRUMS );
297
+ j.at (" MIDI_SETTINGS" ).at (" DETECT_DRUMS" ).get_to (c.midi .DETECT_DRUMS );
298
+
299
+ if (j.contains (" AUTOPLAYER_TIMING_ACCURACY" )) {
300
+ j.at (" AUTOPLAYER_TIMING_ACCURACY" ).get_to (c.autoplayer_timing );
301
+ }
310
302
311
303
if (j.contains (" STACKED_NOTE_HANDLING_MODE" )) {
312
304
std::string mode = j.at (" STACKED_NOTE_HANDLING_MODE" ).get <std::string>();
@@ -331,13 +323,10 @@ namespace midi {
331
323
}
332
324
}
333
325
334
- // New: read UI settings
326
+ // Read UI settings
335
327
if (j.contains (" UI_SETTINGS" )) {
336
328
j.at (" UI_SETTINGS" ).get_to (c.ui );
337
329
}
338
-
339
- // Validate at the end
340
- c.validate ();
341
330
}
342
331
343
332
void Config::setDefaults () {
@@ -349,28 +338,26 @@ namespace midi {
349
338
10 , // VOLUME_STEP
350
339
50 // ADJUSTMENT_INTERVAL_MS
351
340
};
352
-
353
- // Legit mode settings
354
- legit_mode = {
355
- false , // ENABLED
356
- 0.1 , // TIMING_VARIATION
357
- 0.02 , // NOTE_SKIP_CHANCE
358
- 0.05 , // EXTRA_DELAY_CHANCE
359
- 0.05 , // EXTRA_DELAY_MIN
360
- 0.2 // EXTRA_DELAY_MAX
361
- };
362
-
363
341
// AutoTranspose settings
364
342
auto_transpose = {
365
343
false , // ENABLED
366
344
" VK_UP" , // TRANSPOSE_UP_KEY
367
345
" VK_DOWN" // TRANSPOSE_DOWN_KEY
368
346
};
369
347
348
+ // Autoplayer timing accuracy settings
349
+ autoplayer_timing = {
350
+ 20 , // MAX_PASSES
351
+ 1.0 // MEASURE_SEC
352
+ };
353
+
370
354
// MIDI settings
371
- midi = { true }; // FILTER_DRUMS
355
+ midi = { true }; // DETECT_DRUMS
356
+
357
+ // UI settings
358
+ ui = { true }; // alwaysOnTop
372
359
373
- // Hotkey settings (updated with additional keys)
360
+ // Hotkey settings
374
361
hotkeys = {
375
362
" VK_SPACE" , // SUSTAIN_KEY
376
363
" VK_RIGHT" , // VOLUME_UP_KEY
@@ -425,4 +412,4 @@ namespace midi {
425
412
validate ();
426
413
}
427
414
428
- } // namespace midi
415
+ }
0 commit comments