import Tone from "../core/Tone"; import "../core/AudioNode"; /** * @class Tone.Merge brings two signals into the left and right * channels of a single stereo channel. * * @constructor * @extends {Tone.AudioNode} * @param {number} [channels=2] The number of channels to merge. * @example * var merge = new Tone.Merge().toMaster(); * //routing a sine tone in the left channel * //and noise in the right channel * var osc = new Tone.Oscillator().connect(merge.left); * var noise = new Tone.Noise().connect(merge.right); * //starting our oscillators * noise.start(); * osc.start(); */ Tone.Merge = function(channels){ //defaults to 2 channels channels = Tone.defaultArg(channels, 2); Tone.AudioNode.call(this); this.createInsOuts(channels, 0); /** * the merger node for the two channels * @type {ChannelMergerNode} * @private */ this._merger = this.output = this.context.createChannelMerger(channels); //connections for (var i = 0; i < channels; i++){ this.input[i] = new Tone.Gain(); this.input[i].connect(this._merger, 0, i); this.input[i].channelCount = 1; this.input[i].channelCountMode = "explicit"; } /** * The left input channel. * Alias for input[0] * @type {GainNode} */ this.left = this.input[0]; /** * The right input channel. * Alias for input[1]. * @type {GainNode} */ this.right = this.input[1]; }; Tone.extend(Tone.Merge, Tone.AudioNode); /** * Clean up. * @returns {Tone.Merge} this */ Tone.Merge.prototype.dispose = function(){ this.input.forEach(function(input){ input.dispose(); }); Tone.AudioNode.prototype.dispose.call(this); this.left = null; this.right = null; this._merger.disconnect(); this._merger = null; return this; }; export default Tone.Merge;