Browse Source
Fix group cycling with note-based timing and GUI scaling
Fix group cycling with note-based timing and GUI scaling
Major improvements to preset group functionality: - Replace timer-based cycling with accurate note counting via pattern_step signal - Group cycling now counts actual notes played (pattern_length × loop_count) - Add GUI scaling support for dynamic button sizing on different resolutions - Implement complete preset group UI with add/remove, manual controls, and status - Add master file save/load functionality for preset groups - Fix scale_note_start not saving in presets - Update button styling across all controls for consistency 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>master
21 changed files with 1395 additions and 90 deletions
-
17.claude/settings.local.json
-
BIN__pycache__/main.cpython-310.pyc
-
BINcore/__pycache__/arpeggiator_engine.cpython-310.pyc
-
BINcore/__pycache__/output_manager.cpython-310.pyc
-
BINcore/__pycache__/volume_pattern_engine.cpython-310.pyc
-
BINgui/__pycache__/arpeggiator_controls.cpython-310.pyc
-
BINgui/__pycache__/channel_controls.cpython-310.pyc
-
BINgui/__pycache__/main_window.cpython-310.pyc
-
BINgui/__pycache__/output_controls.cpython-310.pyc
-
BINgui/__pycache__/preset_controls.cpython-310.pyc
-
BINgui/__pycache__/simulator_display.cpython-310.pyc
-
BINgui/__pycache__/volume_controls.cpython-310.pyc
-
167gui/arpeggiator_controls.py
-
96gui/main_window.py
-
627gui/preset_controls.py
-
119gui/volume_controls.py
-
129master_files/example_master.json
-
193master_files/test master.json
-
21presets/two Copy Copy.json
-
58presets/two Copy.json
-
58presets/two.json
@ -0,0 +1,129 @@ |
|||
{ |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T18:57:00.000000", |
|||
"type": "master_file", |
|||
"presets": { |
|||
"Slow Ambient": { |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T18:57:00.000000", |
|||
"arpeggiator": { |
|||
"root_note": 60, |
|||
"scale": "minor", |
|||
"scale_note_start": 0, |
|||
"pattern_type": "up", |
|||
"octave_range": 2, |
|||
"note_speed": "1/2", |
|||
"gate": 0.8, |
|||
"swing": 0.0, |
|||
"velocity": 60, |
|||
"tempo": 70.0, |
|||
"user_pattern_length": 8, |
|||
"channel_distribution": "up", |
|||
"delay_enabled": true, |
|||
"delay_length": 3, |
|||
"delay_timing": "1/4", |
|||
"delay_fade": 0.5 |
|||
}, |
|||
"channels": { |
|||
"active_synth_count": 4, |
|||
"channel_instruments": { |
|||
"1": 0, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, |
|||
"9": 0, "10": 0, "11": 0, "12": 0, "13": 0, "14": 0, "15": 0, "16": 0 |
|||
} |
|||
}, |
|||
"volume_patterns": { |
|||
"current_pattern": "swell", |
|||
"pattern_speed": 0.5, |
|||
"pattern_intensity": 0.8, |
|||
"global_volume_range": [0.2, 0.7], |
|||
"global_velocity_range": [40, 80], |
|||
"channel_volume_ranges": {}, |
|||
"velocity_ranges": {} |
|||
} |
|||
}, |
|||
"Fast Dance": { |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T18:57:00.000000", |
|||
"arpeggiator": { |
|||
"root_note": 64, |
|||
"scale": "major", |
|||
"scale_note_start": 0, |
|||
"pattern_type": "up_down", |
|||
"octave_range": 1, |
|||
"note_speed": "1/16", |
|||
"gate": 0.5, |
|||
"swing": 0.2, |
|||
"velocity": 120, |
|||
"tempo": 140.0, |
|||
"user_pattern_length": 4, |
|||
"channel_distribution": "bounce", |
|||
"delay_enabled": false, |
|||
"delay_length": 0, |
|||
"delay_timing": "1/8", |
|||
"delay_fade": 0.3 |
|||
}, |
|||
"channels": { |
|||
"active_synth_count": 8, |
|||
"channel_instruments": { |
|||
"1": 0, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, |
|||
"9": 0, "10": 0, "11": 0, "12": 0, "13": 0, "14": 0, "15": 0, "16": 0 |
|||
} |
|||
}, |
|||
"volume_patterns": { |
|||
"current_pattern": "random_sparkle", |
|||
"pattern_speed": 2.0, |
|||
"pattern_intensity": 1.0, |
|||
"global_volume_range": [0.6, 1.0], |
|||
"global_velocity_range": [100, 127], |
|||
"channel_volume_ranges": {}, |
|||
"velocity_ranges": {} |
|||
} |
|||
}, |
|||
"Med Groove": { |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T18:57:00.000000", |
|||
"arpeggiator": { |
|||
"root_note": 67, |
|||
"scale": "dorian", |
|||
"scale_note_start": 2, |
|||
"pattern_type": "down_up", |
|||
"octave_range": 2, |
|||
"note_speed": "1/8", |
|||
"gate": 0.7, |
|||
"swing": 0.1, |
|||
"velocity": 90, |
|||
"tempo": 110.0, |
|||
"user_pattern_length": 6, |
|||
"channel_distribution": "single_channel", |
|||
"delay_enabled": true, |
|||
"delay_length": 2, |
|||
"delay_timing": "1/8T", |
|||
"delay_fade": 0.4 |
|||
}, |
|||
"channels": { |
|||
"active_synth_count": 3, |
|||
"channel_instruments": { |
|||
"1": 0, "2": 0, "3": 0, "4": 0, "5": 0, "6": 0, "7": 0, "8": 0, |
|||
"9": 0, "10": 0, "11": 0, "12": 0, "13": 0, "14": 0, "15": 0, "16": 0 |
|||
} |
|||
}, |
|||
"volume_patterns": { |
|||
"current_pattern": "accent_4", |
|||
"pattern_speed": 1.0, |
|||
"pattern_intensity": 0.9, |
|||
"global_volume_range": [0.3, 0.9], |
|||
"global_velocity_range": [70, 110], |
|||
"channel_volume_ranges": {}, |
|||
"velocity_ranges": {} |
|||
} |
|||
} |
|||
}, |
|||
"preset_group": { |
|||
"enabled": false, |
|||
"presets": ["Slow Ambient", "Med Groove", "Fast Dance"], |
|||
"loop_count": 2, |
|||
"order": "in_order", |
|||
"current_index": 0, |
|||
"current_loops": 0 |
|||
} |
|||
} |
|||
@ -0,0 +1,193 @@ |
|||
{ |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T13:59:32.284079", |
|||
"type": "master_file", |
|||
"presets": { |
|||
"two Copy Copy": { |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T13:51:05.409379", |
|||
"arpeggiator": { |
|||
"root_note": 60, |
|||
"scale": "mixolydian", |
|||
"scale_note_start": 3, |
|||
"pattern_type": "down", |
|||
"octave_range": 1, |
|||
"note_speed": "1/2", |
|||
"gate": 0.71, |
|||
"swing": 0.0, |
|||
"velocity": 127, |
|||
"tempo": 120.0, |
|||
"user_pattern_length": 3, |
|||
"channel_distribution": "up", |
|||
"delay_enabled": true, |
|||
"delay_length": 2, |
|||
"delay_timing": "2/1T", |
|||
"delay_fade": 0.44 |
|||
}, |
|||
"channels": { |
|||
"active_synth_count": 3, |
|||
"channel_instruments": { |
|||
"1": 0, |
|||
"2": 0, |
|||
"3": 0, |
|||
"4": 0, |
|||
"5": 0, |
|||
"6": 0, |
|||
"7": 0, |
|||
"8": 0, |
|||
"9": 0, |
|||
"10": 0, |
|||
"11": 0, |
|||
"12": 0, |
|||
"13": 0, |
|||
"14": 0, |
|||
"15": 0, |
|||
"16": 0 |
|||
} |
|||
}, |
|||
"volume_patterns": { |
|||
"current_pattern": "static", |
|||
"pattern_speed": 2.0, |
|||
"pattern_intensity": 1.0, |
|||
"global_volume_range": [ |
|||
0.0, |
|||
1.0 |
|||
], |
|||
"global_velocity_range": [ |
|||
40, |
|||
127 |
|||
], |
|||
"channel_volume_ranges": {}, |
|||
"velocity_ranges": {} |
|||
} |
|||
}, |
|||
"two Copy": { |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T13:50:13.070241", |
|||
"arpeggiator": { |
|||
"root_note": 60, |
|||
"scale": "mixolydian", |
|||
"scale_note_start": 0, |
|||
"pattern_type": "down", |
|||
"octave_range": 1, |
|||
"note_speed": "1/2", |
|||
"gate": 0.71, |
|||
"swing": 0.0, |
|||
"velocity": 127, |
|||
"tempo": 120.0, |
|||
"user_pattern_length": 3, |
|||
"channel_distribution": "up", |
|||
"delay_enabled": true, |
|||
"delay_length": 2, |
|||
"delay_timing": "2/1T", |
|||
"delay_fade": 0.44 |
|||
}, |
|||
"channels": { |
|||
"active_synth_count": 3, |
|||
"channel_instruments": { |
|||
"1": 0, |
|||
"2": 0, |
|||
"3": 0, |
|||
"4": 0, |
|||
"5": 0, |
|||
"6": 0, |
|||
"7": 0, |
|||
"8": 0, |
|||
"9": 0, |
|||
"10": 0, |
|||
"11": 0, |
|||
"12": 0, |
|||
"13": 0, |
|||
"14": 0, |
|||
"15": 0, |
|||
"16": 0 |
|||
} |
|||
}, |
|||
"volume_patterns": { |
|||
"current_pattern": "static", |
|||
"pattern_speed": 2.0, |
|||
"pattern_intensity": 1.0, |
|||
"global_volume_range": [ |
|||
0.0, |
|||
1.0 |
|||
], |
|||
"global_velocity_range": [ |
|||
40, |
|||
127 |
|||
], |
|||
"channel_volume_ranges": {}, |
|||
"velocity_ranges": {} |
|||
} |
|||
}, |
|||
"two": { |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T13:49:16.446087", |
|||
"arpeggiator": { |
|||
"root_note": 60, |
|||
"scale": "mixolydian", |
|||
"scale_note_start": 1, |
|||
"pattern_type": "down", |
|||
"octave_range": 1, |
|||
"note_speed": "1/2", |
|||
"gate": 0.71, |
|||
"swing": 0.0, |
|||
"velocity": 127, |
|||
"tempo": 120.0, |
|||
"user_pattern_length": 3, |
|||
"channel_distribution": "up", |
|||
"delay_enabled": true, |
|||
"delay_length": 2, |
|||
"delay_timing": "2/1T", |
|||
"delay_fade": 0.44 |
|||
}, |
|||
"channels": { |
|||
"active_synth_count": 3, |
|||
"channel_instruments": { |
|||
"1": 0, |
|||
"2": 0, |
|||
"3": 0, |
|||
"4": 0, |
|||
"5": 0, |
|||
"6": 0, |
|||
"7": 0, |
|||
"8": 0, |
|||
"9": 0, |
|||
"10": 0, |
|||
"11": 0, |
|||
"12": 0, |
|||
"13": 0, |
|||
"14": 0, |
|||
"15": 0, |
|||
"16": 0 |
|||
} |
|||
}, |
|||
"volume_patterns": { |
|||
"current_pattern": "static", |
|||
"pattern_speed": 2.0, |
|||
"pattern_intensity": 1.0, |
|||
"global_volume_range": [ |
|||
0.0, |
|||
1.0 |
|||
], |
|||
"global_velocity_range": [ |
|||
40, |
|||
127 |
|||
], |
|||
"channel_volume_ranges": {}, |
|||
"velocity_ranges": {} |
|||
} |
|||
} |
|||
}, |
|||
"preset_group": { |
|||
"enabled": true, |
|||
"presets": [ |
|||
"two", |
|||
"two Copy", |
|||
"two Copy Copy" |
|||
], |
|||
"loop_count": 1, |
|||
"order": "in_order", |
|||
"current_index": 0, |
|||
"current_loops": 0 |
|||
} |
|||
} |
|||
@ -0,0 +1,58 @@ |
|||
{ |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T13:50:13.070241", |
|||
"arpeggiator": { |
|||
"root_note": 60, |
|||
"scale": "mixolydian", |
|||
"scale_note_start": 0, |
|||
"pattern_type": "down", |
|||
"octave_range": 1, |
|||
"note_speed": "1/2", |
|||
"gate": 0.71, |
|||
"swing": 0.0, |
|||
"velocity": 127, |
|||
"tempo": 120.0, |
|||
"user_pattern_length": 3, |
|||
"channel_distribution": "up", |
|||
"delay_enabled": true, |
|||
"delay_length": 2, |
|||
"delay_timing": "2/1T", |
|||
"delay_fade": 0.44 |
|||
}, |
|||
"channels": { |
|||
"active_synth_count": 3, |
|||
"channel_instruments": { |
|||
"1": 0, |
|||
"2": 0, |
|||
"3": 0, |
|||
"4": 0, |
|||
"5": 0, |
|||
"6": 0, |
|||
"7": 0, |
|||
"8": 0, |
|||
"9": 0, |
|||
"10": 0, |
|||
"11": 0, |
|||
"12": 0, |
|||
"13": 0, |
|||
"14": 0, |
|||
"15": 0, |
|||
"16": 0 |
|||
} |
|||
}, |
|||
"volume_patterns": { |
|||
"current_pattern": "static", |
|||
"pattern_speed": 2.0, |
|||
"pattern_intensity": 1.0, |
|||
"global_volume_range": [ |
|||
0.0, |
|||
1.0 |
|||
], |
|||
"global_velocity_range": [ |
|||
40, |
|||
127 |
|||
], |
|||
"channel_volume_ranges": {}, |
|||
"velocity_ranges": {} |
|||
} |
|||
} |
|||
@ -0,0 +1,58 @@ |
|||
{ |
|||
"version": "1.0", |
|||
"timestamp": "2025-09-09T13:49:16.446087", |
|||
"arpeggiator": { |
|||
"root_note": 60, |
|||
"scale": "mixolydian", |
|||
"scale_note_start": 1, |
|||
"pattern_type": "down", |
|||
"octave_range": 1, |
|||
"note_speed": "1/2", |
|||
"gate": 0.71, |
|||
"swing": 0.0, |
|||
"velocity": 127, |
|||
"tempo": 120.0, |
|||
"user_pattern_length": 3, |
|||
"channel_distribution": "up", |
|||
"delay_enabled": true, |
|||
"delay_length": 2, |
|||
"delay_timing": "2/1T", |
|||
"delay_fade": 0.44 |
|||
}, |
|||
"channels": { |
|||
"active_synth_count": 3, |
|||
"channel_instruments": { |
|||
"1": 0, |
|||
"2": 0, |
|||
"3": 0, |
|||
"4": 0, |
|||
"5": 0, |
|||
"6": 0, |
|||
"7": 0, |
|||
"8": 0, |
|||
"9": 0, |
|||
"10": 0, |
|||
"11": 0, |
|||
"12": 0, |
|||
"13": 0, |
|||
"14": 0, |
|||
"15": 0, |
|||
"16": 0 |
|||
} |
|||
}, |
|||
"volume_patterns": { |
|||
"current_pattern": "static", |
|||
"pattern_speed": 2.0, |
|||
"pattern_intensity": 1.0, |
|||
"global_volume_range": [ |
|||
0.0, |
|||
1.0 |
|||
], |
|||
"global_velocity_range": [ |
|||
40, |
|||
127 |
|||
], |
|||
"channel_volume_ranges": {}, |
|||
"velocity_ranges": {} |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue