A JavaScript web-app for a WebAudio based synthesizer.
Written in React + Redux starting with the create-react-app project.
Uses SCSS for styling as an additional to the React stuff: Adding Sass or Scss to Create-React-App
Also uses Eslint along with the Airbnb Style Guide
Use npm install
or yarn
to setup the packages.
First build the CSS with npm run build-css
or yarn build-css
.
Then run npm start
or yarn start
will start the create-react-app gubbins and launch the page in you r browser.
To watch and recompile CSS changes, also run npm run watch-css
or yarn watch-css
One component has unit tests...
- Chromium 65.0.3325.181 (Linux) behaving
- Firefox 59.0.2 (Linux) behaving - no Midi
- MotoG3 Chrome Browser - plays notes, slightly laggy with lots of input.
Things that I'd like to do.
-
Have some testing of components, particularly the RotaryKnob. Need to work on Actions / Reducers along with other components.
-
Functionality
- Only the keyboard works on touch-screen, the other controls are quite small.
- Better rotary controls - these don't feel right in browser. They might be okay on a touch screen, but don't respond to touch. (Working in android, but scroll issues / need to handle 'zoom')
- Ability to save and load a 'patch' - use local-storage or similar.
-
Code
- Change to use Immutable props in the components rather than converting these to POJO's
-
Consider drying up repetition of components where we could just build them from a config in an automatic way. Dry isn't necessarily the right word because some 'consistent repetition' is okay - following patterns, etc.
-
Styling:
- Consider a more tight framework approach. The alignment of components and their style works okay and it's moving towards an ITCSS approach.
- Midi device selector (it's a select and needs to be progressively enhanced)
- Nicer buttons - indicators for wave shape, etc. (Icons & leds like https://darker-things.glitch.me/ ?)
- More responsive - keyboard doesn't collapse because we scroll it.
-
MIDI
- (Partially done) MIDI controller inputs - make these 'configurable', but default to standards.
- Move the midi device lookup into the actions (as a thunk)
- (Partially done) Move the other midi actions out of the midi-input (need to keep the event listeners somewhere though!)
- needs to handle disconnect and reconnect possibly.
- Normalise value ranges - probably between 0 & 128 so these map nicely to Midi.
-
Audio
- Some audio FX on the synth...
- Fatten up the oscillator sounds.
- Add an LFO
- Polyphony (with Envelopes for each!)?
- Drop in synth configurations, e.g. a JSON graph describing the modules and settings (modular heaven or hell?)