Orbital is a solar-system inspired musical instrument for the browser. It works by looping 2, 4, or 8 measures and placing new notes, represented by planets, in orbit as the user inputs them. Each tone has its own orbital path and triggers a synth sound when it reaches its point of origin.
Orbital will allow users to:
- Start, pause, and reset the orbit looper
- Select unlimited notes to add to the looper
- Toggle the arpeggiator to play notes of their choice
- Change the number of measures in the loop and the loop tempo
In addition, this project will include:
- A production README
- Links to my LinkedIn and Github
This app will consist of a single screen with a looper visualization, an options panel, nav links to the Github and my LinkedIn. Looper controls will include a number-of-bars options input, a tempo selector input, Pause/Play and Reset buttons, and an input for tempo.
This project will be implemented with the following technologies:
- JavaScript and
jQuery
for triggering of notes HTML5 Canvas
andEasel.js
for DOM manipulation and renderingTone.js
for synthesizer sounds- Webpack to bundle and serve up the various scripts.
In addition to the webpack entry file, there will be three scripts involved in this project:
display.js
: this script will handle the logic for creating and updating the necessary Canvas
elements and rendering them to the DOM.
synth.js
: this script will handle the logic for tone creation.
looper.js
: this script will handle the triggering of notes and the syncing of the display.
Day 1: Setup all necessary Node modules, including getting webpack up and running. Create webpack.config.js
as well as package.json
. Write a basic entry file and the bare bones of all 3 scripts outlined above. Learn the basics of Easel.js
and Tone.js
. Get the display rendered on the page and begin working on correctly orbiting orbs. Goals for the day:
- Get a green bundle with
webpack
- Learn enough
Easel.js
to render an object to theCanvas
element - Learn enough
Tone.js
to trigger a sound on the browser - Create renderable
ring
andorb
objects - Render the display and get at least one orb rotating correctly on its ring
Day 2: Finish logic for rotating orbs. Make sure that all rings have a correctly revolving orb and can add orbs to the orbit when clicked. Get orbs to trigger notes when they reach the 'home' point in their revolution. Goals for the day:
- Complete the
ring
andorb
objects orb
rotating speed should be based on tempo and number of bars- Assign notes to each ring
- Give each ring a clickable button that adds another orb to orbit
Day 3: Add pause/play functionality. Allow orb
objects to snap to the closest even part of the bar. Debug. Goals for the day:
- Pause looper by stopping orbs from moving
- Create algorithm for finding and snapping orbs to the closest even part of the bar
- Arpeggiator
- Add options for synth sounds
- Add option for more note choices