/Audio-Mixer

Allows mixing of PCM audio streams.

Primary LanguageTypeScript

Audio-Mixer

Allows mixing of PCM audio streams.

Installation

npm i audio-mixer -S

API

Mixer.new

// @options - The options for the mixer
let mixer = new Mixer(options: MixerArguments);

// @channels - The number of channels this output has
// @bitDepth - The bit depth of the data going to the output
// @sampleRate - The sample rate of the output
// @clearInterval - An interval in ms of when to dump the stream to keep the inputs in sync (when not specified the stream is not dumped)
interface MixerArguments extends ReadableOptions {
    channels: number;
    bitDepth?: number;
    sampleRate: number;
    clearInterval?: number;
}

Mixer.input

// @options - The options for this input
let input = mixer.input(options: InputArguments);

// @channels - The number of channels this input has (default uses Mixer's)
// @bitDepth - The bit depth of the data coming in this input (default uses Mixer's)
// @sampleRate - The sample rate of this input (default uses Mixer's)
// @volume - The volume to set this input to when mixing (default is 100)
interface InputArguments extends WritableOptions {
    channels?: number;
    bitDepth?: number;
    sampleRate?: number;
    volume?: number;
}

Mixer.removeInput(input)

// @input - The input to remove from the mixer
mixer.removeInput(input);

Input.new

// @options - The options for this input
let input = new Input(options: InputArguments);

// @channels - The number of channels this input has
// @bitDepth - The bit depth of the data coming in this input
// @sampleRate - The sample rate of this input
// @volume - The volume to set this input to when mixing (default is 100)
interface InputArguments extends WritableOptions {
    channels?: number;
    bitDepth?: number;
    sampleRate?: number;
    volume?: number;
}

Input.getVolume()

input.getVolume();

Input.setVolume(volume)

// @volume - The volume to set this input to
input.setVolume(volume);

Code Example

var AudioMixer = require('audio-mixer');

// Creates a new audio mixer with the specified options
let mixer = new AudioMixer.Mixer({
    channels: 2,
    bitDepth: 16,
    sampleRate: 44100,
    clearInterval: 250
});

// Creates an input that is attached to the mixer
let input = mixer.input({
    channels: 1,
    volume: 75
});

// Creates a standalone input
let standaloneInput = new AudioMixer.Input({
    channels: 1,
    bitDepth: 16,
    sampleRate: 48000,
    volume: 75
});

// Adds the standalone input to the mixer
mixer.addInput(standaloneInput);

// Pipes a readable stream into an input
deviceInputStream.pipe(input);
deviceInputStream2.pipe(standaloneInput);

// Pipes the mixer output to an writable stream
mixer.pipe(deviceOutputStream);