Skip to content

steve-mackinnon/beatsequence

Repository files navigation

Beatsequence

Check it out at beatsequence.com

Project Info

This is a little beat maker pet project I built a few years ago as I was learning React. It was inspired a bit by the Arturia BeatStep Pro hardware sequencer. It features synthesized kick, snare, closed hi-hat, sine osc, and square osc tracks all with basic parameter controls. The sequencer can be randomized, and each track has a "chance" parameter that controls the probability of each enabled step being triggered.

Feel free to use this repo as a starting point

Dependencies

  • Yarn: brew install yarn
  • Parcel: yarn add --dev parcel

Running the dev server

  1. Run yarn install
  2. Navigate to http://localhost:1234

Architecture

  • Communication with the backend is shielded by the "ports" abstraction. This simply defines abstract interfaces for the various backend-reliant functions: logging in, signing up, saving/loading a project, etc. The app currently uses Firebase as a backend, but none of the application code is aware of this detail. To use a different provider, add new adapters (see /adapters for the Firebase implementation), and update PortProvider.ts to inject the appropriate adapters.
  • One-off components that aren't intended to be shared live in /components
  • Reusable components live in /shared-components
  • Making sound:
    • The audio engine and sequencer live in /engine
    • The sequencer builds on top of Tone.js's sequencer by adding support for randomization and scale locking, but Tone.js is responsible for driving the main sequence scheduler.
    • Sound generators live in /generators. Generators also leverage Tone.js, which build on top of the WebAudio API. They all implement the generator interface, which has a single trigger() function that is called when they should play.
  • State management:
    • Uses Redux toolkit
    • State is typically fetched via the useAppSelector() hook and via useAppDispatch()
    • App-specific entities can be found in /entities
  • The UI makes heavy use of Mui components

Releases

No releases published

Packages

No packages published

Languages