npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

electrophone

v1.0.0

Published

Modular Synth Javascript Library

Downloads

3

Readme

ElectroPhone

JavaScript Library to build a modular synthesizer.

Based on WebAudio API and WebAudio Effects Libray tuna

npm version Build Status Coverage Status

Demo Application

https://civa86.github.io/electrophone

HTML5 Application to demonstrate the use of electrophone library.

Frameworks and Libraries:

| Name | Version | Link | | ------------ | ------- | ---------------------------------------------------------------------- | | React | 15.4.1 | https://facebook.github.io/react/ | | Redux | 3.6.0 | http://redux.js.org/ | | jQuery | 1.12.11 | https://jquery.com/ | | jquery-knob | 1.2.11 | http://anthonyterrien.com/knob/ | | Cytoscape.js | 2.5.5 | http://js.cytoscape.org/ | | Moment.js | 2.13.0 | https://momentjs.com/ | | ReduxForm | 6.5.0 | http://redux-form.com/6.5.0/ | | Bootstrap | 3.3.6 | http://getbootstrap.com/ | | Ionicons | 2.0.1 | http://ionicons.com/ |

Development Tools:

| Name | Version | Link | | ------------ | ------- | ------------------------------------------------------------------------------------ | | Babel | 6.18.0 | https://babeljs.io/ | | ESLint | 1.10.3 | http://eslint.org/ | | Less | 2.5.3 | http://lesscss.org/ | | webpack | 1.13.3 | https://webpack.github.io/ | | Mocha | 3.2.0 | https://mochajs.org/ | | Chai | 3.5.0 | http://chaijs.com/ | | ESDoc | 0.4.7 | https://esdoc.org/ | | isparta | 4.0.0 | https://github.com/douglasduteil/isparta |

Library Code Documentation

Documentation Page

Code Documentation of the ElectroPhone class provided by the Library.

For a full development documentation:

  • Download / Clone the Repository
  • Enter in the electrophone project folder
  • Run lib::docs npm script
  • Run docs/index.html in a browser

Usage

Install npm module

npm install electrophone

Include Library

With ES5 via <script> tag:

<script src="<path_to_node_modules>/electrophone/dist/electrophone.min.js"/>

With ES2015 via Babel:

import ElectroPhone from 'electrophone'

Create an instance

// Get the browser AudioContext
var AudioCtx = window.AudioContext || window.webkitAudioContext;

// CREATE A ElectroPhone INSTANCE
var synth = new ElectroPhone(new AudioCtx(), {
        //Optional parameters
        spectrum: <true|false>,            // set true to manage data of playing sound
        updateSpectrum: <dataArray => {}>, // on receive data callback
        resetSpectrum: <() => {}>          // on stop data callback
    });

Create Modules

synth.create("moduleLabel", "moduleType", { ...properties });

Update Modules

synth.update("moduleLabel", { ...properties });

Destroy Modules

synth.destroy("moduleLabel");

Link modules

synth.link("sourceModuleLabel", "destinationModuleLabel");

Update Prebuilt Modules

// Master module
synth.master({ ...properties });

// ADSR module
synth.adsr({ ...properties });

Play and Stop sound

// Play a frequency (20 - 20000)
synth.play(440);

// Stop a frequency (20 - 20000)
synth.stop(440);

Get All Created Modules

synth.getModules();

Static Methods

// Get module properties by type.
ElectroPhone.getModuleProperties("moduleType");

// Describe all ElectroPhone modules with properties configuration.
ElectroPhone.describeModules("moduleType");

// Get frequency float value calculated from given note and octave.
ElectroPhone.getFrequency("A", 4);

// Get complete notes list.
ElectroPhone.getNotes();

Constants

The library expose two set of constants: CONST and TYPES

CONST

The set of string values to setup module properties.

| CONST | Description | | ----------------------- | ------------------------------------ | | MASTER | the Master module label | | ADSR | the ADSR module label | | NOISE_WHITE | the white Noise color value | | NOISE_PINK | the pink Noise color value | | NOISE_BROWN | the brown Noise color value | | WAVE_SINE | the sine Wave type value | | WAVE_SQUARE | the square Wave type value | | WAVE_SAWTOOTH | the sawtooth Wave type value | | WAVE_TRIANLGE | the triangle Wave type value | | WAVE_CUSTOM | the custom Wave type value | | FILTER_LOWPASS | the lowpass Filter type value | | FILTER_HIGHPASS | the highpass Filter type value | | FILTER_BANDPASS | the bandpass Filter type value | | FILTER_LOWSHELF | the lowshelf Filter type value | | FILTER_HIGHSHELF | the highshelf Filter type value | | FILTER_PEAKING | the peaking Filter type value | | FILTER_NOTCH | the notch Filter type value | | FILTER_ALLPASS | the allpass Filter type value | | MODULATOR_TARGET_FREQ | the frequency Modulator target value | | MODULATOR_TARGET_DETUNE | the detune Modulator target value | | ENVELOPE_TARGET_GAIN | the gain Envelope target value | | ENVELOPE_TARGET_FREQ | the frequency Envelope target value | | ENVELOPE_TARGET_DETUNE | the detune Envelope target value |

TYPES

The set of string values to create modules.

| TYPES | Usage | | ------------- | ------------------------------------------------------- | | OSCILLATOR | synth.create('label', ElectroPhone.TYPES.OSCILLATOR, {}) | | NOISE | synth.create('label', ElectroPhone.TYPES.NOISE, {}) | | MODULATOR | synth.create('label', ElectroPhone.TYPES.MODULATOR, {}) | | ENVELOPE | synth.create('label', ElectroPhone.TYPES.ENVELOPE, {}) | | PAN | synth.create('label', ElectroPhone.TYPES.PAN, {}) | | FILTER | synth.create('label', ElectroPhone.TYPES.FILTER, {}) | | DELAY | synth.create('label', ElectroPhone.TYPES.DELAY, {}) | | PINGPONGDELAY | synth.create('label', ElectroPhone.TYPES.PINGPONGDELAY, {}) | | TREMOLO | synth.create('label', ElectroPhone.TYPES.TREMOLO, {}) | | OVERDRIVE | synth.create('label', ElectroPhone.TYPES.OVERDRIVE, {}) | | BITCRUSHER | synth.create('label', ElectroPhone.TYPES.BITCRUSHER, {}) | | MOOGFILTER | synth.create('label', ElectroPhone.TYPES.MOOGFILTER, {}) |

Full Example: Two Voices Synth

// Load library
import ElectroPhone from 'electrophone';

// Build the synth instance (See Usage Section)
const AudioCtx = window.AudioContext || window.webkitAudioContext;
const synth = new ElectroPhone(new AudioCtx());

// Create the first voice
synth.create(
    'Voice1',
    ElectroPhone.TYPES.OSCILLATOR,
    {
        wave: ElectroPhone.CONST.WAVE_SAWTOOTH,
        detune: 500,
        level: 50
    }
);

// Create the second voice
synth.create(
    'Voice2',
    ElectroPhone.TYPES.OSCILLATOR,
    {
        wave: ElectroPhone.CONST.WAVE_SAWTOOTH,
        detune: -500,
        level: 50
    }
);

//Link voices to Master
synth.link('Voice1', ElectroPhone.CONST.MASTER);
synth.link('Voice2', ElectroPhone.CONST.MASTER);

// Setup ADSR
synth.adsr({ attack: 0, decay: 1, sustain: 50, release: 25 });

// Set Master Volume to 80%
synth.master({ level: 80 });

// Get the A4 note frequency
const a4 = ElectroPhone.getFrequency("A", 4);

// Play the a4 note
synth.play(a4);

// Stop the a4 note after 1 second
setTimeout(() => synth.stop(a4), 1000);

Prebuilt Modules

Every ElectroPhone instance has 2 hardcoded modules: Master and ADSR.

This is the minimal configuration to let sound coming out from your sound card and control its behaviour during time.

Master

Main Output Gain.

| Property | Type | Values | Default | | -------- | -------- | ------- | ------- | | level | Integer | 0 - 100 | 100 |

ADSR

Envelope on the master gain. Describes final sound behavior during time.

| Property | Type | Values | Default | | -------- | -------- | ------- | ------- | | attack | Integer | 0 - 100 | 0 | | decay | Integer | 0 - 100 | 1 | | sustain | Integer | 0 - 100 | 100 | | release | Integer | 0 - 100 | 5 |

Sound Modules

Sound Modules can generate sounds and play frequencies.

They can be linked to any Effect Module or directly to Master

Oscillator

Sound Wave Generator.

| Property | Type | Values | Default | | -------- | -------- | ----------------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | detune | Integer | -1200 - 1200 | 0 | | wave | String | sine, square, sawtooth, triangle, custom | sine | | link | String | master, "any module label" | - |

Noise

Noise Generator.

| Property | Type | Values | Default | | -------- | -------- | -------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | detune | Integer | -1200 - 1200 | 0 | | color | String | white, brown, pink | white | | link | String | master, "any module label" | - |

Control Modules

Control Modules can change the behavior of a specific module property or modify the final sound.

Modulator

An Oscillator that produces modulation on another module property.

It can be linked to any module with freq or detune property.

| Property | Type | Values | Default | | -------- | -------- | ----------------------------------------- | --------- | | level | Integer | 0 - 100 | 100 | | freq | Integer | 1 - 100 | 5 | | wave | String | sine, square, sawtooth, triangle, custom | sine | | target | String | frequency, detune | frequency | | link | String | master, "any module label" | - |

Envelope

A module that can describe property changes during time.

It can be linked to any module with level property (gain target).

| Property | Type | Values | Default | | -------- | -------- | -------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | attack | Integer | 0 - 100 | 0 | | decay | Integer | 0 - 100 | 1 | | sustain | Integer | 0 - 100 | 100 | | release | Integer | 0 - 100 | 5 | | target | String | frequency, detune, gain | gain | | link | String | master, "any module label" | - |

Pan

A module that routes sound between left and right channel.

It can be placed between a Sound Module and its destination to setup stereo routing.

| Property | Type | Values | Default | | -------- | -------- | -------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | pan | Float | -1 - 1 | 0 | | link | String | master, "any module label" | - |

Effect Modules

Effect Modules can change the nature of a sound.

They can be linked to other Effect Modules to create an effect chain and finally to Master.

Filter

A module that filters frequencies with different algorithms.

| Property | Type | Values | Default | | ---------- | -------- | ------------------------------------------------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | freq | Integer | 20 - 20000 | 440 | | q | Integer | 0 - 100 | 10 | | filterGain | Integer | -40 - 40 | 0 | | filterType | String | lowpass, highpass, bandpass, lowshelf, highshelf, peaking, notch, allpass | lowpass | | bypass | Flag | 0 / 1 | 0 | | link | String | master, "any module label" | - |

Delay

A module that plays a sound back after a period of time.

| Property | Type | Values | Default | | --------- | -------- | -------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | dry | Float | 0 - 1 | 1 | | wet | Float | 0 - 1 | 0.5 | | feedback | Float | 0 - 0.9 | 0.4 | | cutoff | Integer | 20 - 20000 | 440 | | delayTime | Integer | 20 - 1000 | 100 | | bypass | Flag | 0 / 1 | 0 | | link | String | master, "any module label" | - |

PingPongDelay

A different kind of Delay.

| Property | Type | Values | Default | | -------------- | -------- | -------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | wet | Float | 0 - 1 | 0.5 | | feedback | Float | 0 - 1 | 0.3 | | cutoff | Integer | 20 - 20000 | 440 | | delayTimeLeft | Integer | 1 - 10000 | 200 | | delayTimeRight | Integer | 1 - 10000 | 400 | | bypass | Flag | 0 / 1 | 0 | | link | String | master, "any module label" | - |

Tremolo

A trembling sound effect.

| Property | Type | Values | Default | | ----------- | -------- | -------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | intensity | Float | 0 - 1 | 0.3 | | rate | Float | 0 - 11 | 5 | | stereoPhase | Integer | 0 - 180 | 0 | | bypass | Flag | 0 / 1 | 0 | | link | String | master, "any module label" | - |

Overdrive

A module that alters the sound increasing its gain with distortion.

| Property | Type | Values | Default | | -------------- | -------- | -------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | outputGain | Float | 0 - 1 | 1 | | drive | Float | 0 - 1 | 1 | | curveAmount | Float | 0 - 1 | 0.7 | | algorithmIndex | Integer | 0 - 5 | 0 | | bypass | Flag | 0 / 1 | 0 | | link | String | master, "any module label" | - |

Bitcrusher

A module that produces a distortion by the reduction of the resolution or bandwidth of digital audio data.

| Property | Type | Values | Default | | ---------- | -------- | -------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | bits | Integer | 1 - 16 | 4 | | normfreq | Float | 0 - 1 | 0.1 | | bufferSize | Integer | 256 - 16384 | 4096 | | bypass | Flag | 0 / 1 | 0 | | link | String | master, "any module label" | - |

Moogfilter

A Moog inspired filter

| Property | Type | Values | Default | | ---------- | -------- | -------------------------------- | ------- | | level | Integer | 0 - 100 | 100 | | cutoff | Float | 0 - 1 | 0.1 | | resonance | Float | 0 - 4 | 3.5 | | bufferSize | Integer | 256 - 16384 | 4096 | | bypass | Flag | 0 / 1 | 0 | | link | String | master, "any module label" | - |