tone
Version:
A Web Audio framework for making interactive music in the browser.
64 lines • 2.07 kB
JavaScript
import { Param } from "../context/Param.js";
import { optionsFromArguments } from "../util/Defaults.js";
import { readOnly } from "../util/Interface.js";
import { ToneAudioNode } from "./ToneAudioNode.js";
/**
* Wrapper around Web Audio's native [DelayNode](http://webaudio.github.io/web-audio-api/#the-delaynode-interface).
* @category Core
* @example
* return Tone.Offline(() => {
* const delay = new Tone.Delay(0.1).toDestination();
* // connect the signal to both the delay and the destination
* const pulse = new Tone.PulseOscillator().connect(delay).toDestination();
* // start and stop the pulse
* pulse.start(0).stop(0.01);
* }, 0.5, 1);
*/
export class Delay extends ToneAudioNode {
constructor() {
const options = optionsFromArguments(Delay.getDefaults(), arguments, [
"delayTime",
"maxDelay",
]);
super(options);
this.name = "Delay";
const maxDelayInSeconds = this.toSeconds(options.maxDelay);
this._maxDelay = Math.max(maxDelayInSeconds, this.toSeconds(options.delayTime));
this._delayNode =
this.input =
this.output =
this.context.createDelay(maxDelayInSeconds);
this.delayTime = new Param({
context: this.context,
param: this._delayNode.delayTime,
units: "time",
value: options.delayTime,
minValue: 0,
maxValue: this.maxDelay,
});
readOnly(this, "delayTime");
}
static getDefaults() {
return Object.assign(ToneAudioNode.getDefaults(), {
delayTime: 0,
maxDelay: 1,
});
}
/**
* The maximum delay time. This cannot be changed after
* the value is passed into the constructor.
*/
get maxDelay() {
return this._maxDelay;
}
/**
* Clean up.
*/
dispose() {
super.dispose();
this._delayNode.disconnect();
this.delayTime.dispose();
return this;
}
}
//# sourceMappingURL=Delay.js.map