On Github Sambego / pedalboard-presentation
const audioContext = new AudioContext();
navigator.getUserMedia({
    audio: true
}, stream => {
    // We've got a stream of the user's audio input device.
}, error => {
    // Errors, gotta catch 'em all!
});
                    
navigator.mediaDevices.getUserMedia({
    audio: true
}).then(stream => {
    // We've got a stream of the user's audio input device.
}, error => {
    // Errors, gotta catch 'em all!
});
                    Only works in Firefox and, Chrome!
const inputNode = audioContext.createMediaStreamSource(stream);
      inputNode.connect(audioContext.destination);
                const gainNode = audioContext.createGain();
      gainNode.gain.value = .5; // The volume is 50%
inputNode.connect(gainNode);
gainNode.connect(audioContext.destination);
                const waveShaperNode = audioContext.createWaveShaper();
      waveShaperNode.oversample = '4x';
      waveShaperNode.curve = fancyMathToCalculateCurve();
                    An example of an algorithm to calculate a distortion curve can be found here.
const delayNode = audioContext.createDelay();
      delayNode.delayTime.value = 1; // 1 second delay
                const oscillatorNode = audioContext.createOscillator();
      oscillatorNode.type = 'sine';
      oscillatorNode.frequency.value = 1000; // 1000Hz
                const convolverNode = audioContext.createConvolver();
fetch('path/to/impulse-response-file', {
    method: 'get'
}).then(response => {
    return response.arrayBuffer();
}).then(buffer => {
    audioContext.decodeAudioData(buffer, buffer => {
        convolverNode.buffer = buffer;
    };
});
                    Impulse response file by Chris Wilson
import {Input, Distortion, Delay, Output} from 'audio-effects';
const audioContext = new AudioContext();
const input = new Input(audioContext);
const distortion = new Distortion(audioContext);
const delay = new Delay(audioContext);
const output = new Output(audioContext);
// Get the user's audio input
input.getUserMedia();
// Chain it all together
input.connect(distortion).connect(delay).connect(output);
                navigator.requestMIDIAccess().then(midi => {
    const inputs = midi.inputs.values(),
          devices = [],
          i;
    for (i = inputs.next(); i && !i.done; i = inputs.next()) {
        devices.push(i.value);
    }
    devices[0].onmidimessage = message => {
        // Incomming message from the first midi-device
    };
});