- Add pentatonic journey master presets with various configurations
- Add new generator settings presets for quick setup
- Include additional individual presets for testing
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fix intensity progression logic to properly interpolate between min/max values instead of adding to base values
- Fix TypeError when base scale_note_start is "random" string in progression calculations
- Add missing scales (pentatonic, blues) to generator base scale dropdown
- Add "Random" option to scale note start with proper handling
- Add base pattern type override with all pattern types (up, down, random, etc.)
- Add Export Master MIDI button to export master presets as single MIDI files
- Add volume pattern override checkbox to volume controls for consistency
- Improve debug output for troubleshooting generator issues
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Include generated master preset files for users to have working examples
- Add generator settings presets for quick configuration recall
- Ensure complete setup is available after fresh clone
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add "Random" button option to scale note section that selects different random scale notes each pattern loop
- Update arpeggiator engine to support "random" as scale_note_start value alongside integers
- Add helper method _get_actual_scale_note_start() to handle random selection on each pattern generation
- Update GUI to properly style and handle "Random" button selection with orange coloring
- Support both immediate and armed state changes for random scale note selection
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Make octave override checkbox prevent root note changes that affect octave
- Add comprehensive debug logging for root note and octave override behavior
- Ensure both root_note and octave overrides block root note preset changes
- Fix parameter mapping between octave buttons (C2,C3,C4) and override system
The octave override now properly prevents preset cycling from changing which
octave the root note is in (C2 vs C3 vs C4 etc.), while still allowing
the octave range parameter to be changed if needed.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add debug output to track octave_range parameter application
- Ensure octave override checkbox properly prevents preset changes
- Fix parameter name consistency between GUI controls and preset application
Now when octave override is checked, preset cycling won't change the octave range setting.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 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>