Skip to content
Record your microphone (or any other input) and add effects to it! In your browser.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


This package is now maintained as a part of the sountility collection. This repository won't be used anymore for this package, but it will still be maintained.


Recording for browsers - the easy way

This module abstracts away the logic needed to record audio in your browser. Since it's based on the Chnl module, a lot of effects can be added to the input. For information about this aspect just have a look a the documentation of Chnl. You can treat any Recordy-instance as a Chnl, because Recordy is extending Chnl. To record the input, I'm using a fork of the popular recorder.js library from Matt Diamond, wrecorder, which allows us to record the output of WebAudio-nodes. Big thanks for this awesome work!

Attention: Since the webaudio-effect-unit has reached v.1.1.0, the way how the effects work has changed. Have a look at it's repository for more details. Make sure to do this BEFORE you update. If you have difficulties or questions, just open an issue! I am always glad if I can help. 😄


The package is hosted on npm. You can consume it with any package manager supporting npm packages.

npm i recordy -S


Creating an instance

new Recordy(audioCtx)

To create a Recordy-instance, you have to pass exactly one argument to the constructor: an AudioContext object. Now, you can request audio input(have a look at the example for more information).

Getting input


This method needs to be executed before you can start recording. It asynchronously requests audio input. So the return value is a Promise, which returns a boolean value. This value evaluates to true if the request for the microphone/audio-input was successfully and to false if it wasn't.

Start recording


This method is really self-explanatory. Recody will record until you call the .stopRecording(...) method.

Stop recording


This methods stops a previously started recording. It accepts exactly one parameter: a boolean. If this boolean evaluates to true, this method will return a Promise which returns an Audio-object with the recorded track. Otherwise, it returns a Promise which returns the plain binary data(blob) of the recorded track.

Outputting to the speakers


Recordy allows you to directly output the audio-input to the speakers, so you could directly hear the effects you apply etc. The method accepts exactly one parameter: The volume of the output. This can be a number from 0 - 1. If you set a value of 0 it's muted, if you set a value of 1 it's the maximal possible volume. ATTENTION: Due to the lack of support of advanced and latency-free audio protocols like ASIO(...) in the actual browsers, there's a quite high latency between input and output (it's clearly noticeable). Therefore, it's muted by default.


This is a simple example which records an one second long track. The track gets returned as an Audio-object so it can be directly played. Also, the input is directly outputted to the speakers with a gain of 0.4. In addition, some functionality of the Chnl module was applied: The bitcrusher effect was enabled.

const audioCtx = new AudioContext();
const r = new Recordy(audioCtx);

  .then(val => {

    window.setTimeout(() => {
        .then(audio => {
    }, 1000);
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.