Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/vincentriemer/io-808
An attempt at a fully recreated web-based TR-808 drum machine.
https://github.com/vincentriemer/io-808
react redux sound web-audio webaudio
Last synced: 9 days ago
JSON representation
An attempt at a fully recreated web-based TR-808 drum machine.
- Host: GitHub
- URL: https://github.com/vincentriemer/io-808
- Owner: vincentriemer
- License: mit
- Created: 2016-06-10T12:36:32.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2022-12-10T20:27:46.000Z (almost 2 years ago)
- Last Synced: 2024-08-01T03:23:02.652Z (3 months ago)
- Topics: react, redux, sound, web-audio, webaudio
- Language: JavaScript
- Homepage: https://io808.com
- Size: 19.3 MB
- Stars: 679
- Watchers: 35
- Forks: 72
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# iO-808
An attempt at a fully recreated web-based TR-808 drum machine using React, Redux, and the Web Audio API.
As an amateur/bedroom music producer I've always been fascinated with the impact and history of the TR-808. While trying to learn the new Web Audio API I attempted to try and recreate a few of the sounds by referencing the Sound on Sound Synth Secrets series and the block diagrams of the 808 itself. It became addicting and once I had most of the sounds done, I figured recreating the interface/functionality was the next logical step. I hope you enjoy it as much as I did making it!
## Tools/Libraries Overview
Like most web/JavaScript developers, I sit on the shoulders of giants. Here's a brief list of the notable dependencies used in this project:
### Web Audio API
All of the sound generated by this drum machine are synthesized using the Web Audio API (look mom, no samples!). A side effect of this is while I got the sounds fairly close to the original hardware, there's still a lot of room for improvement (yes I'm looking at you Cymbal and Rimshot).
The only WAA-related external library used is `WAAClock` which is used for scheduling the drum hits.
### react
This library really has fueled my love of programming user interfaces and is what powers the UI of this app.
### reduxUsed for state management and used in conjuction with `redux-localstorage` for state persistance and `react-redux` for connecting my React components to the Redux store.
### seamless-immutable
Used as the primary data structure for the redux store. The state store in this application is quite large (seriously, there are over 12,000 steps to keep track of) so in order to ensure maximum performance for mutating the state, this library was crucial (and a whole lot smaller than ImmutableJS).
### reselectUsed for efficiently computing values from the Redux store. A lot of the UI state depends on the state of over components so this library was a lifesaver in helping with the reasoning and performance of those dependencies.
### radiumUsed for styling of all React components. All of the styles in the webapp are done through inline styles and in the few places I needed something like a `:hover` selector, Radium provided it. Also doesn't hurt that it autoprefixes all of the inline styles.
## Features Not Yet Implemented
In order to meet my personal deadline of 8/08 for my initial release I had to skip a few of the features of the original 808.
- `PLAY` mode
- `COMPOSE` mode
- `PRE-SCALE` (every pattern is currently hardcoded to `3`)
- Adding triggers via the `TAP` buttonI'll be continuously working on these features as well as improving the synthesis of each sound to greater match the sounds of the original hardware.