git clone git@github.com:nsarrazin/lofi.git
This starts the server on http://localhost:3000/ with debug mode and it supports auto-reload for both front and backend.
npm run install:dev
npm run start:dev
This starts the react app on http://localhost:8000/web/ using gunicorn and nginx for deployment purposes.
npm run build:docker
npm run start:docker
- Set up a webserver with socket.io support
- Implement a customizable
Instrument
class which outputs generated MIDI chunks - Implement a
Conductor
class which holds all the meta information (keys, bpm, instruments, etc.) - Implement a
Chords
class which deals with generating and distributing the chord progression - Implement a
Rythm
class to deal with rythmic phrasing, subdivsion of the measure - Implement an API to communicate meta information to the client
- Set up a basic webapp with react and a socket.io client
- Implement a basic
Player
class that can play an instrument and receive midi chunks - Implement a ToneJS
Transport
to deal with scheduling notes rythmically even if socket messages are delayed - Implement a
Master
class to deal with master volume, effects like reverb etc. - Add display of what's currently being played for each
Player
(piano roll ? display notes?) - Find a way to read the meta information from the API
- Have a working docker container for flask
- Have a working docker container for nginx serving react app
- Setup a docker-compose file to handle easy deployment
- Have a proper build process with build/deployment artefacts
- Handle environment variables so that the front-end knows where to find the flask server
- backend:
- flask-socketio : https://flask-socketio.readthedocs.io/en/latest/
- midi-util : https://midiutil.readthedocs.io/en/1.2.1/
- ChordalPy : https://github.com/P-bibs/ChordalPy (dope, love it)
- frontend:
- toneJS (sounds, effect, sequencer):
- midi websocket: https://github.com/fa-m/midi-websocket
- soundfonts : https://github.com/gleitz/midi-js-soundfont