Tone.js/Tone/component/channel/Merge.ts
Yotam Mann aaf880c925
Using web-test-runner for tests, updating import paths (#1242)
* WIP moving tests to web-test-runner

* updating thresholds

* Adding file extensions

* Testing integrations

* linting

* fixing dep

* moving back to root dir

* prettier all of the files

* updating eslint rules to use with prettier

* remove import package

* moving tsignore around

* removing unneeded ignores

* all tests run on puppeteer, no need for testing guards

* linting

* import type syntax

* cleaning up

* Update package.json
2024-05-03 14:31:14 -04:00

71 lines
1.7 KiB
TypeScript

import {
ToneAudioNode,
ToneAudioNodeOptions,
} from "../../core/context/ToneAudioNode.js";
import { Positive } from "../../core/type/Units.js";
import { optionsFromArguments } from "../../core/util/Defaults.js";
interface MergeOptions extends ToneAudioNodeOptions {
channels: Positive;
}
/**
* Merge brings multiple mono input channels into a single multichannel output channel.
*
* @example
* const merge = new Tone.Merge().toDestination();
* // routing a sine tone in the left channel
* const osc = new Tone.Oscillator().connect(merge, 0, 0).start();
* // and noise in the right channel
* const noise = new Tone.Noise().connect(merge, 0, 1).start();;
* @category Component
*/
export class Merge extends ToneAudioNode<MergeOptions> {
readonly name: string = "Merge";
/**
* The merger node for the channels.
*/
private _merger: ChannelMergerNode;
/**
* The output is the input channels combined into a single (multichannel) output
*/
readonly output: ChannelMergerNode;
/**
* Multiple input connections combine into a single output.
*/
readonly input: ChannelMergerNode;
/**
* @param channels The number of channels to merge.
*/
constructor(channels?: Positive);
constructor(options?: Partial<MergeOptions>);
constructor() {
super(
optionsFromArguments(Merge.getDefaults(), arguments, ["channels"])
);
const options = optionsFromArguments(Merge.getDefaults(), arguments, [
"channels",
]);
this._merger =
this.output =
this.input =
this.context.createChannelMerger(options.channels);
}
static getDefaults(): MergeOptions {
return Object.assign(ToneAudioNode.getDefaults(), {
channels: 2,
});
}
dispose(): this {
super.dispose();
this._merger.disconnect();
return this;
}
}