Skip to content

noahlemen/mdlr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

36 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

mdlr

GitHub issues Build Status Test Coverage npm package

โš ๏ธ mdlr is just a lil bb library right now โš ๏ธ
โš ๏ธ ~please contribute if it interests you~ โš ๏ธ

table of contents

intent

mdlr is an abstraction of synthesis via the web audio API in the form of composable React components. The focus of mdlr is the generation, processing, and modulation of synthesized audio.

While it draws inspiration from react-music, its goals differ. If react-music could be considered most equivalent to a synthesizer workstation, mdlr would be best compared to Max (perhaps its BEAP library in particular), or modular synthesizers. Nonetheless, mdlr draws inspiration from other javascript libraries and web audio API abstractions such as react-music and i_dropped_my_phone_the_screen_cracked

mdlr is not concerned with implementing methods of control like sequencers, MIDI input, or basic musical time structures. In fact, mdlr doesn't even implement musical pitch (since this is easily derived by other utilities like note-to-frequency) in favor of frequency. Decisions about control methodology, time structures, musical temperament, etc. are better made in the context of mdlr's use.

installation

via npm:

npm install --save mdlr

or via yarn:

yarn add mdlr

usage

To create a component that renders a sawtooth carrier oscillation at a frequency specified by its freq prop with a 30 Hz sine oscillation modulating its frequency and a second 2 Hz sine oscillation modulating its amplitude:

import React from 'react';
import { AudioContext, Output, Oscillator, Modulation } from 'mdlr';

class ToneGenerator extends React.Component {
  render() {
    return (
      <AudioContext>
        <Output>
          <Oscillator frequency={this.props.freq} waveform="sawtooth">
            <Modulation parameter="frequency">
              <Oscillator frequency={30} />
            </Modulation>
            <Modulation parameter="amplitude">
              <Oscillator frequency={2} />
            </Modulation>
          </Oscillator>
        </Output>
      </AudioContext>
    );
  }
}

reference

โš ๏ธ documentation for components needed here! โš ๏ธ

development

prerequisites

Yarn must be installed.

installation

  • Running yarn install in the components's root directory will install everything you need for development.

demo development server

  • yarn start will run a development server with the component's demo app at https://localhost:3000 with hot module reloading.

formatting

  • yarn lint will run linter on scripts.
  • yarn pretty will prettify scripts.
    • ๐ŸŽ‰ this will also run automatically on commit! ๐ŸŽ‰

running tests

  • yarn test will run the tests once.

  • yarn test:coverage will run the tests and produce a coverage report in coverage/.

  • yarn test:watch will run the tests on every change.

building

  • yarn build will build the component for publishing to npm and also bundle the demo app.

  • yarn clean will delete built resources.