A collaborative pianoroll ⚡ by solid-js and automerge.
🎹 What happens when you touch the pianoroll's background
🎵 What happens when you touch a single note
Note
- 🎹 Draw a note at and extend it when moving the pointer
- 🎵 Drag a single note
Duration
- 🎹 Draw selection-area and select notes
- 🎵
- If note was selected: update duration of all selected notes
- If note wasn't selected: select note and update its duration
- Sub Menu:
- 🔒 Locks the current selection
- When touching the pianoroll it updates the selected notes' duration instead of drawing a selection-area
- 🔒 Locks the current selection
Velocity
- 🎹 Draw selection-area and select notes
- 🎵
- If note was selected: update velocity of all selected notes
- If note wasn't selected: select note and update its velocity
- Sub Menu:
- 🔒 Locks the current selection
- When touching the pianoroll it updates the selected notes' velocity instead of drawing a selection-area
- 🔒 Locks the current selection
Erase
- 🎹 Draw selection-area and erase all selected notes
- 🎵 Erase a single note
Snip
- 🎹 Draw selection-area and snip the notes that are intersecting with the front of the selection-area in two
- 🎵 (Same as above)
Select
- 🎹 Draw selection-area, move the virtual cursor and select notes
- 🎵
- If note was selected: drag all selected notes in time/pitch
- If note wasn't selected: select note
- Sub Menu:
- 🔒 Locks the current selection
- When touching the pianoroll it updates the selected notes' position instead of drawing a selection-area
- 📋 Copy
- Add all the selected notes to the clipboard
- 📄 Paste
- Paste the notes in the clipboard at the cursor's current position
- 🔒 Locks the current selection
Loop
- 🎹 Draw selection-area, after releasing create a loop from selection-area's start- and end-time
- 🎵 (Same as above)
Pan
- 🎹 Pan the pianoroll
- 🎵 (Same as above)
- change measure
- collaborative feature: add automerge/chee's lib
- history: ctrl+z/ctrl+y
- how to implement undo/redo with automerge?
- research: https://www.youtube.com/watch?v=uP7AKExkMGU
- tried https://github.com/onsetsoftware/automerge-repo-undo-redo but created
conflict
patches
- history: ctrl+z/ctrl+y
- change tempo/bpm
- needs fix: bpm is not correct and creates glitches when changing tempo
- change volume
- ui implemented, but needs more work: should connect the instrument to a
GainNode
and control this.
- ui implemented, but needs more work: should connect the instrument to a
- zoom
- controls for desktop
- pinch on mobile?
- theming
- dark mode
- light mode
- layers: stack music instruments
- loop multiple different sections at the same time
- load from midi
-
WebMidi
- different color schemes
- desktop mode/mobile mode
- we develop mobile-first since it's trickier to pull of right
- arpeggiator / arpeggio-pattern designer
- select area/notes
- select pattern
- arpeggio made within selection-area using the selected notes and according to current grid-size
- record jam to a new sequence
- it's fun to let a loop play and play around with it (mute parts, extend notes, ...)
- it would be cool to be able to record all these jams into a new sequence