Skip to content

Add Several Features#8

Open
sethkush wants to merge 6 commits intosimoncoudeville:mainfrom
sethkush:main
Open

Add Several Features#8
sethkush wants to merge 6 commits intosimoncoudeville:mainfrom
sethkush:main

Conversation

@sethkush
Copy link

@sethkush sethkush commented Jan 21, 2026

Hi, I really like your project! I wanted it to do a few more things. I'm not much of a web developer, so I used Claude for a lot of this. I've tested it pretty extensively with my Android tablet, my Roland AIRA S-1, and my Apple //e (with a MIDI card, sound card, and a program to join the two) and it all seems to work. I've tried to keep the UI nice, but that's certainly not my strength, so the pad settings especially are a bit crowded with these changes, unfortunately.

This includes commits to add:

  1. Presets:
    • Save/Load
    • Import/Export
  2. Velocity control:
    • Change velocity of each note in a chord
  3. Single chord mode:
    • Useful for synths with limited polyphony
    • Prevents partial chords when pad touches overlap
  4. Arpeggiator:
    • Modeled after the arpeggiator of the Roland Aira S-1
    • Selectable patterns and rates
    • Rates are either:
      • Synced to global tempo
      • Synced to MIDI in clock

claude and others added 6 commits January 20, 2026 22:16
- Add PresetDialog component with save/load UI
- Implement preset management with localStorage persistence
- Add Save button (floppy disk icon) to top toolbar
- Support exporting/importing presets as JSON files
- Allow users to save current pad configurations and global scale settings
- Enable quick switching between different board setups

Users can now:
- Save current board configuration as named preset
- Load previously saved presets
- Delete unwanted presets
- Export all presets to JSON file
- Import presets from JSON file
Add option to automatically stop any playing chord when a new chord is
pressed, useful for synths with limited polyphony that behave strangely
when chords overlap.

- Add singleChordMode state to useMidi composable
- Persist setting in localStorage with other MIDI settings
- Add checkbox toggle in MidiDialog with proper dirty state tracking
- Modify onStartPad to stop all other pads when single-chord mode enabled
- Automatically save setting when MIDI dialog is saved

Users can now enable single-chord mode from MIDI settings to ensure
only one chord plays at a time, preventing polyphony issues on
hardware synths.
Allow users to set custom MIDI velocity (0-127) for each note in a chord,
enabling fine-grained control over note dynamics and emphasis.

Changes:
- Add velocities array to pad data structure (defaults to 127 per note)
- Add velocity slider UI in EditDialog for each note in the chord
- Display note name above slider and velocity value (0-127) below
- Apply individual note velocities in onStartPad when playing chords
- Fully backward compatible - existing pads default to velocity 127

Users can now customize the volume/emphasis of individual notes within
chords, useful for voice leading, bass emphasis, or creating dynamic
chord voicings.
Add tempo control to Music Settings dialog (formerly Global Scale) with
support for MIDI clock synchronization.

Changes:
- Add tempo state (20-300 BPM, default 120) with localStorage persistence
- Add tempoMidiSync flag for enabling MIDI clock sync
- Implement MIDI clock listener to detect tempo from MIDI input
  - Listens for MIDI clock messages (24 PPQN)
  - Calculates BPM from clock timing
  - Updates detectedMidiTempo in real-time
- Add tempo slider with BPM display to GlobalKeyDialog
- Add "Sync from MIDI clock" checkbox
  - Disables slider when MIDI sync is enabled
  - Shows detected MIDI tempo instead of manual tempo
  - Requires MIDI to be enabled
- Rename dialog title to "Music Settings"
- Add section headers for Global Scale and Tempo

The tempo setting is stored but not yet used - it will be utilized
by future arpeggiator functionality.

MIDI clock sync automatically detects tempo from external MIDI devices
sending clock messages, useful for syncing to DAWs or hardware sequencers.
- Add arpeggiator settings to pad data structure (enabled, pattern, rate)
- Implement UI controls in pad editor with checkbox and two selectors
- Add pattern options: up, down, up&down, random, and 2-octave variants
- Add rate options: quarter, eighth, sixteenth, thirty-second notes and triplets
- Implement arpeggiator timing logic using global BPM or MIDI sync
- Add pattern generation for sequential and random arpeggiation
- Integrate with pad playback system (replaces chord playback when enabled)
- Stop arpeggiator when pad is released or another chord plays
- Respect individual note velocities from velocity sliders
Several Feature Additions



This includes commits to add:

   1. Presets:
       - Save/Load
       - Import/Export
   2. Velocity control:
       - Change velocity of each note in a chord
   3. Arpeggiator:
       - Modeled after the arpeggiator of the Roland Aira S-1
       - Selectable patterns and rates
       - Rates are either:
           - Synced to global tempo
           - Synced to MIDI in clock
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants