audio-buffer-remix

1.0.3 • Public • Published

audio-buffer-remix Build Status Greenkeeper badge unstable

Upmix or downmix channels in AudioBuffer or AudioBufferList by the following table:

Input Channels Output Channels Rules
1 (Mono) 2 (Stereo) output[0] = input[0]
output[1] = input[0]
1 (Mono) 4 (Quad) output[0] = input[0]
output[1] = input[0]
output[2] = 0
output[3] = 0
1 (Mono) 6 (5.1) output[0] = 0
output[1] = 0
output[2] = input[0]
output[3] = 0
output[4] = 0
output[5] = 0
2 (Stereo) 1 (Mono) output[0] = 0.5 * (input[0] + input[1])
2 (Stereo) 4 (Quad) output[0] = input[0]
output[1] = input[1]
output[2] = 0
output[3] = 0
2 (Stereo) 6 (5.1) output[0] = input[0]
output[1] = input[1]
output[2] = 0
output[3] = 0
output[4] = 0
output[5] = 0
4 (Quad) 1 (Mono) output[0] = 0.25 * (input[0] + input[1] + input[2] + input[3])
4 (Quad) 2 (Stereo) output[0] = 0.5 * (input[0] + input[2])
output[1] = 0.5 * (input[1] + input[3])
4 (Quad) 6 (5.1) output[0] = input[0]
output[1] = input[1]
output[2] = 0
output[3] = 0
output[4] = input[2]
output[5] = input[3]
6 (5.1) 1 (Mono) output[0] = 0.7071 * (input[0] + input[1]) + input[2] + 0.5 * (input[2] + input[3])
6 (5.1) 2 (Stereo) output[0] = input[0] + 0.7071 * (input[2] + input[4])
output[1] = input[1] + 0.7071 * (input[2] + input[5])
6 (5.1) 4 (Quad) output[0] = input[0] + 0.7071 * input[2]
output[1] = input[1] + 0.7071 * input[2]
output[2] = input[4]
output[3] = input[5]
n m output[n] = input[n]

Usage

npm install audio-buffer-remix

const AudioBuffer = require('audio-buffer')
const remix = require('audio-buffer-remix')
 
let stereoBuffer = new AudioBuffer(2, 1024)
 
quadBuffer = remix(stereoBuffer, 4)

API

let dest = remix(source, channels|map, interpretation|{context, interpretation}?)

Take source audio buffer and upmix/downmix its channels to dest with the indicated number of channels. options may provide audio context or interpretation type: 'discrete' or 'speaker', see channelInterpretation MDN reference.

Alternatively pass map − a list or object with channel mapping. Numbers as values map channels directly by numbers, null drops channel from output and function with (destChannelData, source) => {} signature expects to fill destChannelData array.

const util = require('audio-buffer-utils')
 
let source = util.noise(util.create(1024, 2))
 
let dest = remix(source, {
    //0 output channel - take first input channel data
    0: 1,
 
    //1 output channel - mute the data
    1: null,
 
    //2 output channel - mix 0 + 1 channels
    2: (destChannel, source) => {
        let left = source.getChannelData(0)
        let right = source.getChannelData(1)
        for (let i = 0; i < out.length; i++) {
            destChannel[i] = left[i] * .5 + right[i] * .5
        }
    }
})
 
dest.numberOfChannels // 3

See also

Package Sidebar

Install

npm i audio-buffer-remix

Weekly Downloads

0

Version

1.0.3

License

MIT

Last publish

Collaborators

  • dfcreative