- Create comprehensive preset generation system for live performances
- GUI version with PyQt5 interface matching main app styling
- Command-line version for scripting and automation
- Protects synth count and hardware settings (never changes during generation)
- Only generates performance-friendly speeds (1/1, 1/2, 1/4 - no faster)
- Multiple generation strategies: build_and_release, modal_journey
- Advanced settings: tempo ranges, velocity ranges, scale progressions
- Real-time preview with parameter progression analysis
- Background generation with progress updates
- Comprehensive validation for live performance suitability
Features:
- Locked parameters for live stability (synth count, channel instruments)
- Subtle parameter changes suitable for live performance
- Musical logic using circle of fifths and scale relationships
- Dark theme GUI matching main arpeggiator interface
- Export to master_files directory for immediate use
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add proper setChecked(True/False) calls for delay timing buttons
- Ensure correct timing button shows as selected when loading preset
- Clear previous timing button selection before setting new one
- Fix timing button styling to properly reflect enabled/disabled and selected states
Now delay timing buttons should correctly show which timing is selected on startup.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add complete delay system sync: toggle button, timing buttons, length, fade
- Add root note and octave button updates from engine state
- Add distribution pattern button sync
- Fix delay timing button enable/disable states and styling
- Add scale notes display update when root/octave changes
- Ensure all delay controls properly enable/disable based on delay state
- Fix missing delay fade value label updates
Now all GUI controls should properly reflect engine state on startup and preset changes.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Set default velocity to 20 in arpeggiator engine to match GUI slider
- Fix velocity slider override logic to respect checkbox state during GUI updates
- Add GUI sync call after loading first preset on startup
- Ensure velocity slider shows 20 and stays at 20 when override is checked
- Fix desync between engine settings and GUI display on application launch
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add C2 octave and remove C8 (now C2-C7 range instead of C3-C8)
- Set velocity override checkbox checked by default
- Set default velocity slider value to 20 instead of 80
- Update checkbox initialization to respect default parameter override states
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Unify button styling across all sections using consistent apply_button_style method
- Fix Pattern Length buttons to use proper orange/normal styling
- Fix Note Speed buttons to use purple/normal styling consistently
- Change Delay Timing layout from grid to single horizontal row to prevent text cutoff
- Add purple and disabled button style types for timing controls
- Ensure all buttons are tracked for proper scaling support
- Remove hardcoded inline styles in favor of centralized styling system
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add checkboxes next to all parameter labels to prevent preset changes during group cycling
- Enable selective parameter locking for live manipulation without preset interference
- Fix spacebar emergency stop with global event filter to work when text boxes are focused
- Remove keyboard note functionality (AWSDFGTGHYUJ keys) as requested
- Fix up_down and down_up pattern algorithms for proper note sequence reversals
- Improve debug logging for arpeggiator state changes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major updates:
- Add Note Limit (1-7) to pattern settings - restricts which notes from scale are used
- Fix pattern length and note limit to use proper armed system
- Both settings now arm (orange) and apply at pattern end without interference
- Add spacebar emergency stop (stop-only, doesn't start playback)
- Pattern generation respects note limit for all pattern types
- Note limit included in preset save/load system
- Updated status bar to reflect emergency stop functionality
Example: Scale=C major, Note Limit=3, Pattern Length=8
Result: C,D,E,C,D,E,C,D (then pattern repeats)
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
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>
- Update volume and preset control buttons to use consistent dark theme styling
- Fix volume pattern buttons with proper background colors and contrast
- Apply consistent styling to all preset operation buttons (Load, Save, Delete, etc.)
- Switch delay/echo system from channel volume to velocity-based fading
- Prevents delay echoes from affecting original note volume when still playing
- Each delayed note now uses individual velocity instead of channel-wide volume
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Changes:
- Add virtual environment setup as recommended installation method
- Keep legacy global installation options for experienced users
- Add Python version requirements (3.8+)
- Provide clear guidance on which installation method to choose
- Update running instructions for both virtual env and global installs
- Cross-reference README_VENV.md for detailed virtual environment docs
The guide now recommends the automated virtual environment setup while
preserving the original Windows-specific installer for users who prefer
global installation or need fallback options.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Major Features:
- Add scale note selection with armed state functionality
- Fix down arpeggio patterns to be contextual and smooth
- Make octave range direction-aware (up goes higher, down goes lower)
Scale Note Selection:
- Added scale notes display showing current scale notes as buttons
- Implemented armed state for scale note changes during playback
- Scale notes update dynamically when root note or scale changes
- Added scale_note_start property to engine for starting position
Fixed Arpeggio Patterns:
- Rewrote scale generation to be direction-aware
- Down patterns now continue downward instead of looping back up
- Up patterns go higher from starting note, down patterns go lower
- Fixed octave wrapping for all starting scale degrees
Volume Pattern Improvements:
- Added multi-bar swell patterns (1-16 bar swells)
- Added accent patterns (every 2nd-8th note)
- Replaced random_sparkle with simple random pattern
- Synchronized volume patterns with arpeggiator steps
GUI Enhancements:
- Increased control heights for better usability
- Added scale notes section with dynamic button generation
- Made dropdown menus taller for readability
- Fixed GUI updates when armed changes are applied
Technical Improvements:
- Added settings_changed signal for GUI synchronization
- Improved armed state system with comprehensive change detection
- Fixed preset system to save/load all settings including delays
- Enhanced pattern completion detection for single-note patterns
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add armed preset switching that applies at pattern end (like note/scale changes)
- Fix single-note pattern armed change detection
- Add preset system safety mechanisms (timeout, force apply, clear armed buttons)
- Fix delay timing to be absolute rather than relative to note speed
- Comprehensive error handling and UI safety checks for preset controls
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add triplet divisions for longer notes (2/1T, 4/1T)
- Fix pattern length truncation - up_down now plays half up, half down
- Set default output mode to hardware instead of simulator
- Link delay timing to note speed for proper musical relationships
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Volume Pattern Improvements:
- Volume patterns now use pattern length as "bar length" for timing
- Swell pattern: completes one full cycle per pattern length
- Breathing pattern: completes two breath cycles per pattern length
- Build pattern: builds over pattern length, fades over 2x pattern length
- Fade pattern: fades from max to min over pattern length
- Pulse pattern: creates 4 pulses per pattern length
- Alternating pattern: alternates based on pattern step position
- All patterns now scale dynamically with user-selected pattern length
Delay Timing Enhancements:
- Add triplet note divisions: 1/32T, 1/16T, 1/8T, 1/4T, 1/2T
- Triplet calculations: 1/4T = 1/6 beat, 1/8T = 1/12 beat, etc.
- Arrange delay timing buttons in 2-row grid layout for better fit
- Smaller button size (35px) with 9px font for compact display
- Support for more complex rhythmic delay patterns
Technical Implementation:
- Add set_bar_length() method to volume pattern engine
- Pattern length changes automatically update volume engine bar length
- Mathematical timing calculations adjusted for bar-relative patterns
- Triplet note values added to NOTE_SPEEDS dictionary
- Grid layout for delay timing controls with proper spacing
Result: Volume patterns now properly sync to the selected pattern length,
creating musically coherent lighting that matches the arpeggio structure.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Pattern Length Features:
- Add 1-16 pattern length buttons to Pattern Settings quadrant
- Implement user-settable pattern length that truncates/repeats generated patterns
- Default to 8 steps with immediate pattern regeneration on change
Delay/Echo Features:
- Add comprehensive delay/echo controls to Timing Settings
- Toggle ON/OFF with visual feedback and control enabling/disabling
- Configurable delay length (0-8 repeats) with volume fade per repeat
- Independent delay timing (1/32 to 1/1 note values)
- Delay fade slider (10-90%) for volume reduction per echo
- Delay notes scheduled and processed with decreasing volumes
- Delay notes play on same channels as original notes
Visual Display Improvements:
- Fix volume >100 color overflow issue with proper brightness clamping
- Inactive channels now display completely black (volume 0) instead of dim
- Improved volume threshold for visual feedback (only show when volume > 0)
- Better brightness scaling for MIDI volume values 0-127
Technical Implementation:
- Pattern length applied after pattern generation with smart truncation/repetition
- Delay scheduling system with fade calculations and timing precision
- Delay processing integrated into main update loop
- Proper cleanup of delay queue when disabled
- Volume and timing calculations for delayed notes
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Make velocity static while channel volume (CC7) controls brightness
- Set volume once per note-on instead of constant updates to reduce MIDI traffic
- Fix note speed buttons to work with immediate changes (no armed state needed)
- Optimize volume changes to only affect channels with active notes
- Add visual dimming for inactive channels when notes end
- Remove conflicting volume update systems for cleaner implementation
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>