web-audio-api
Version:
Node.js implementation of Web audio API
218 lines (196 loc) • 7.89 kB
JavaScript
var BLOCK_SIZE = require('./constants').BLOCK_SIZE
var ChannelMixing = (function(){"use strict";var PRS$0 = (function(o,t){o["__proto__"]={"a":t};return o["a"]===t})({},{});var DP$0 = Object.defineProperty;var GOPD$0 = Object.getOwnPropertyDescriptor;var MIXIN$0 = function(t,s){for(var p in s){if(s.hasOwnProperty(p)){DP$0(t,p,GOPD$0(s,p));}}return t};var proto$0={};
function ChannelMixing(numberOfChannels, computedNumberOfChannels, channelInterpretation) {
this.numberOfChannels = numberOfChannels
this.computedNumberOfChannels = computedNumberOfChannels
this.channelInterpretation = channelInterpretation
if (this.numberOfChannels === this.computedNumberOfChannels) {
this._process = this.identityProcess
} else {
if (this.channelInterpretation === 'speakers') {
this._process = this['speakerMix' + this.numberOfChannels + this.computedNumberOfChannels]
if (!this._process) {
// well, this is ugly.
if (this.numberOfChannels < this.computedNumberOfChannels) {
this._process = this.discreteUpMix
} else {
this._process = this.discreteDownMix
}
}
} else {
if (this.numberOfChannels < this.computedNumberOfChannels) {
this._process = this.discreteUpMix
} else {
this._process = this.discreteDownMix
}
}
}
}DP$0(ChannelMixing,"prototype",{"configurable":false,"enumerable":false,"writable":false});
proto$0.identityProcess = function(inBuffer, outBuffer) {
var inData, outData
for (var ch = 0; ch < this.computedNumberOfChannels; ch++) {
inData = inBuffer.getChannelData(ch)
outData = outBuffer.getChannelData(ch)
for (var i = 0; i < BLOCK_SIZE; i++)
outData[i] += inData[i]
}
};
proto$0.discreteUpMix = function(inBuffer, outBuffer) {
var chDataIn, chDataOut
for (var ch = 0; ch < this.numberOfChannels; ch++) {
chDataIn = inBuffer.getChannelData(ch)
chDataOut = outBuffer.getChannelData(ch)
for (var i = 0; i < BLOCK_SIZE; i++) chDataOut[i] += chDataIn[i]
}
};
proto$0.discreteDownMix = function(inBuffer, outBuffer) {
var chDataIn, chDataOut
for (var ch = 0; ch < this.computedNumberOfChannels; ch++) {
chDataIn = inBuffer.getChannelData(ch)
chDataOut = outBuffer.getChannelData(ch)
for (var i = 0; i < BLOCK_SIZE; i++) {
chDataOut[i] += chDataIn[i]
}
}
};
proto$0.speakerMix12 = function(inBuffer, outBuffer) {
var inData = inBuffer.getChannelData(0)
var dataOutL = outBuffer.getChannelData(0)
, dataOutR = outBuffer.getChannelData(1)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOutL[i] += inData[i]
dataOutR[i] += inData[i]
}
};
proto$0.speakerMix14 = function(inBuffer, outBuffer) {
var inData = inBuffer.getChannelData(0)
, dataOutL = outBuffer.getChannelData(0)
, dataOutR = outBuffer.getChannelData(1)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOutL[i] += inData[i]
dataOutR[i] += inData[i]
}
};
proto$0.speakerMix16 = function(inBuffer, outBuffer) {
var inData = inBuffer.getChannelData(0)
, dataOutC = outBuffer.getChannelData(2)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOutC[i] += inData[i]
}
};
proto$0.speakerMix24 = function(inBuffer, outBuffer) {
var dataL = inBuffer.getChannelData(0)
, dataR = inBuffer.getChannelData(1)
, dataOutL = outBuffer.getChannelData(0)
, dataOutR = outBuffer.getChannelData(1)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOutL[i] += dataL[i]
dataOutR[i] += dataR[i]
}
};
proto$0.speakerMix26 = function(inBuffer, outBuffer) {
var dataL = inBuffer.getChannelData(0)
, dataR = inBuffer.getChannelData(1)
, dataOutL = outBuffer.getChannelData(0)
, dataOutR = outBuffer.getChannelData(1)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOutL[i] += dataL[i]
dataOutR[i] += dataR[i]
}
};
proto$0.speakerMix46 = function(inBuffer, outBuffer) {
var dataL = inBuffer.getChannelData(0)
, dataR = inBuffer.getChannelData(1)
, dataSL = inBuffer.getChannelData(2)
, dataSR = inBuffer.getChannelData(3)
, dataOutL = outBuffer.getChannelData(0)
, dataOutR = outBuffer.getChannelData(1)
, dataOutSL = outBuffer.getChannelData(4)
, dataOutSR = outBuffer.getChannelData(5)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOutL[i] += dataL[i]
dataOutR[i] += dataR[i]
dataOutSL[i] += dataSL[i]
dataOutSR[i] += dataSR[i]
}
};
proto$0.speakerMix21 = function(inBuffer, outBuffer) {
var dataL = inBuffer.getChannelData(0)
, dataR = inBuffer.getChannelData(1)
, dataOut = outBuffer.getChannelData(0)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOut[i] += 0.5 * (dataL[i] + dataR[i])
}
};
proto$0.speakerMix41 = function(inBuffer, outBuffer) {
var dataL = inBuffer.getChannelData(0)
, dataR = inBuffer.getChannelData(1)
, dataSL = inBuffer.getChannelData(2)
, dataSR = inBuffer.getChannelData(3)
, dataOut = outBuffer.getChannelData(0)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOut[i] += 0.25 * (dataL[i] + dataR[i] + dataSL[i] + dataSR[i])
}
};
proto$0.speakerMix42 = function(inBuffer, outBuffer) {
var dataL = inBuffer.getChannelData(0)
, dataR = inBuffer.getChannelData(1)
, dataSL = inBuffer.getChannelData(2)
, dataSR = inBuffer.getChannelData(3)
, dataOutL = outBuffer.getChannelData(0)
, dataOutR = outBuffer.getChannelData(1)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOutL[i] += 0.5 * (dataL[i] + dataSL[i])
dataOutR[i] += 0.5 * (dataR[i] + dataSR[i])
}
};
proto$0.speakerMix61 = function(inBuffer, outBuffer) {
var dataL = inBuffer.getChannelData(0)
, dataR = inBuffer.getChannelData(1)
, dataC = inBuffer.getChannelData(2)
, dataLFE = inBuffer.getChannelData(3)
, dataSL = inBuffer.getChannelData(4)
, dataSR = inBuffer.getChannelData(5)
, dataOut = outBuffer.getChannelData(0)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOut[i] += 0.7071 * (dataL[i] + dataR[i]) + dataC[i] + 0.5 * (dataSL[i] + dataSR[i])
}
};
proto$0.speakerMix62 = function(inBuffer, outBuffer) {
var dataL = inBuffer.getChannelData(0)
, dataR = inBuffer.getChannelData(1)
, dataC = inBuffer.getChannelData(2)
, dataLFE = inBuffer.getChannelData(3)
, dataSL = inBuffer.getChannelData(4)
, dataSR = inBuffer.getChannelData(5)
, dataOutL = outBuffer.getChannelData(0)
, dataOutR = outBuffer.getChannelData(1)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOutL[i] += dataL[i] + 0.7071 * (dataC[i] + dataSL[i])
dataOutR[i] += dataR[i] + 0.7071 * (dataC[i] + dataSR[i])
}
};
proto$0.speakerMix64 = function(inBuffer, outBuffer) {
var dataL = inBuffer.getChannelData(0)
, dataR = inBuffer.getChannelData(1)
, dataC = inBuffer.getChannelData(2)
, dataLFE = inBuffer.getChannelData(3)
, dataSL = inBuffer.getChannelData(4)
, dataSR = inBuffer.getChannelData(5)
, dataOutL = outBuffer.getChannelData(0)
, dataOutR = outBuffer.getChannelData(1)
, dataOutSL = outBuffer.getChannelData(2)
, dataOutSR = outBuffer.getChannelData(3)
for (var i = 0; i < BLOCK_SIZE; i++) {
dataOutL[i] += dataL[i] + 0.7071 * dataC[i]
dataOutR[i] += dataR[i] + 0.7071 * dataC[i]
dataOutSL[i] += dataSL[i]
dataOutSR[i] += dataSR[i]
}
};
proto$0.process = function(inBuffer, outBuffer) {
this._process(inBuffer, outBuffer)
return outBuffer
};
MIXIN$0(ChannelMixing.prototype,proto$0);proto$0=void 0;return ChannelMixing;})();
module.exports = ChannelMixing