tone 14.9.11 → 14.9.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Tone/component/analysis/Analyser.ts +3 -3
- package/Tone/component/analysis/DCMeter.ts +2 -1
- package/Tone/component/analysis/FFT.ts +3 -3
- package/Tone/component/analysis/Meter.ts +6 -5
- package/Tone/component/analysis/Waveform.ts +1 -1
- package/Tone/component/channel/Channel.ts +6 -6
- package/Tone/component/channel/MidSideMerge.ts +2 -2
- package/Tone/component/channel/MidSideSplit.ts +1 -1
- package/Tone/component/channel/Recorder.ts +1 -1
- package/Tone/component/dynamics/Gate.ts +4 -3
- package/Tone/component/dynamics/Limiter.ts +1 -1
- package/Tone/component/dynamics/MidSideCompressor.ts +3 -2
- package/Tone/component/dynamics/MultibandCompressor.ts +2 -1
- package/Tone/component/envelope/FrequencyEnvelope.ts +2 -2
- package/Tone/component/filter/BiquadFilter.ts +1 -1
- package/Tone/component/filter/LowpassCombFilter.ts +1 -1
- package/Tone/core/Global.ts +1 -1
- package/Tone/core/clock/TickParam.ts +2 -2
- package/Tone/core/clock/Transport.ts +1 -1
- package/Tone/core/clock/TransportEvent.ts +1 -1
- package/Tone/core/context/AbstractParam.ts +4 -4
- package/Tone/core/context/Context.ts +11 -10
- package/Tone/core/context/Listener.ts +1 -1
- package/Tone/core/context/Offline.ts +1 -1
- package/Tone/core/context/ToneAudioNode.ts +2 -1
- package/Tone/core/context/ToneWithContext.ts +1 -1
- package/Tone/core/index.ts +1 -0
- package/Tone/core/type/Time.ts +1 -1
- package/Tone/core/util/Defaults.ts +2 -0
- package/Tone/core/worklet/ToneAudioWorkletProcessor.worklet.ts +1 -1
- package/Tone/effect/AutoPanner.ts +1 -1
- package/Tone/effect/AutoWah.ts +1 -1
- package/Tone/effect/Chorus.ts +4 -3
- package/Tone/effect/Freeverb.ts +1 -1
- package/Tone/effect/JCReverb.ts +2 -2
- package/Tone/effect/LFOEffect.ts +4 -2
- package/Tone/effect/Reverb.ts +3 -3
- package/Tone/effect/StereoXFeedbackEffect.ts +1 -1
- package/Tone/effect/Tremolo.ts +1 -1
- package/Tone/event/Pattern.ts +1 -1
- package/Tone/index.ts +15 -14
- package/Tone/instrument/DuoSynth.ts +1 -1
- package/Tone/instrument/Instrument.ts +1 -1
- package/Tone/instrument/MetalSynth.ts +2 -2
- package/Tone/instrument/NoiseSynth.ts +1 -1
- package/Tone/instrument/PluckSynth.ts +1 -1
- package/Tone/instrument/Sampler.ts +1 -1
- package/Tone/instrument/Synth.ts +1 -1
- package/Tone/signal/Add.ts +1 -1
- package/Tone/signal/AudioToGain.ts +1 -1
- package/Tone/signal/GainToAudio.ts +1 -1
- package/Tone/signal/Multiply.ts +1 -1
- package/Tone/signal/ScaleExp.ts +2 -2
- package/Tone/signal/Signal.ts +1 -1
- package/Tone/signal/SyncedSignal.ts +1 -1
- package/Tone/source/Source.ts +2 -1
- package/Tone/source/buffer/Player.ts +1 -1
- package/Tone/source/buffer/Players.ts +1 -1
- package/Tone/source/oscillator/LFO.ts +5 -3
- package/Tone/source/oscillator/OmniOscillator.ts +10 -9
- package/Tone/source/oscillator/Oscillator.ts +1 -1
- package/Tone/source/oscillator/ToneOscillatorNode.ts +1 -1
- package/Tone/version.ts +1 -1
- package/build/Tone.js +1 -1
- package/build/Tone.js.map +1 -1
- package/build/esm/component/analysis/Analyser.d.ts +3 -3
- package/build/esm/component/analysis/Analyser.js +3 -3
- package/build/esm/component/analysis/DCMeter.d.ts +2 -1
- package/build/esm/component/analysis/DCMeter.js +2 -1
- package/build/esm/component/analysis/DCMeter.js.map +1 -1
- package/build/esm/component/analysis/FFT.d.ts +3 -3
- package/build/esm/component/analysis/FFT.js +3 -3
- package/build/esm/component/analysis/Meter.d.ts +6 -5
- package/build/esm/component/analysis/Meter.js +6 -5
- package/build/esm/component/analysis/Meter.js.map +1 -1
- package/build/esm/component/analysis/Waveform.d.ts +1 -1
- package/build/esm/component/analysis/Waveform.js +1 -1
- package/build/esm/component/channel/Channel.d.ts +6 -6
- package/build/esm/component/channel/Channel.js +6 -6
- package/build/esm/component/channel/MidSideMerge.d.ts +2 -2
- package/build/esm/component/channel/MidSideMerge.js +1 -1
- package/build/esm/component/channel/MidSideSplit.d.ts +1 -1
- package/build/esm/component/channel/Recorder.d.ts +1 -1
- package/build/esm/component/channel/Recorder.js +1 -1
- package/build/esm/component/dynamics/Gate.d.ts +4 -3
- package/build/esm/component/dynamics/Gate.js +4 -3
- package/build/esm/component/dynamics/Gate.js.map +1 -1
- package/build/esm/component/dynamics/Limiter.d.ts +1 -1
- package/build/esm/component/dynamics/Limiter.js +1 -1
- package/build/esm/component/dynamics/MidSideCompressor.d.ts +3 -2
- package/build/esm/component/dynamics/MidSideCompressor.js +3 -2
- package/build/esm/component/dynamics/MidSideCompressor.js.map +1 -1
- package/build/esm/component/dynamics/MultibandCompressor.d.ts +2 -1
- package/build/esm/component/dynamics/MultibandCompressor.js +2 -1
- package/build/esm/component/dynamics/MultibandCompressor.js.map +1 -1
- package/build/esm/component/envelope/FrequencyEnvelope.d.ts +2 -2
- package/build/esm/component/envelope/FrequencyEnvelope.js +2 -2
- package/build/esm/component/filter/BiquadFilter.d.ts +1 -1
- package/build/esm/component/filter/BiquadFilter.js +1 -1
- package/build/esm/component/filter/LowpassCombFilter.d.ts +1 -1
- package/build/esm/component/filter/LowpassCombFilter.js +1 -1
- package/build/esm/core/Global.d.ts +1 -1
- package/build/esm/core/Global.js +1 -1
- package/build/esm/core/clock/TickParam.d.ts +2 -2
- package/build/esm/core/clock/TickParam.js +2 -2
- package/build/esm/core/clock/Transport.d.ts +1 -1
- package/build/esm/core/clock/Transport.js +1 -1
- package/build/esm/core/clock/TransportEvent.d.ts +1 -1
- package/build/esm/core/clock/TransportEvent.js +1 -1
- package/build/esm/core/context/AbstractParam.d.ts +4 -4
- package/build/esm/core/context/AbstractParam.js +1 -1
- package/build/esm/core/context/Context.d.ts +11 -10
- package/build/esm/core/context/Context.js +11 -10
- package/build/esm/core/context/Context.js.map +1 -1
- package/build/esm/core/context/Listener.d.ts +1 -1
- package/build/esm/core/context/Listener.js +1 -1
- package/build/esm/core/context/Offline.d.ts +1 -1
- package/build/esm/core/context/Offline.js +1 -1
- package/build/esm/core/context/ToneAudioNode.d.ts +2 -1
- package/build/esm/core/context/ToneAudioNode.js +2 -1
- package/build/esm/core/context/ToneAudioNode.js.map +1 -1
- package/build/esm/core/context/ToneWithContext.d.ts +1 -1
- package/build/esm/core/context/ToneWithContext.js +1 -1
- package/build/esm/core/index.d.ts +1 -0
- package/build/esm/core/index.js +1 -0
- package/build/esm/core/index.js.map +1 -1
- package/build/esm/core/type/Time.d.ts +1 -1
- package/build/esm/core/type/Time.js +1 -1
- package/build/esm/core/util/Defaults.d.ts +2 -0
- package/build/esm/core/util/Defaults.js +2 -0
- package/build/esm/core/util/Defaults.js.map +1 -1
- package/build/esm/core/worklet/ToneAudioWorkletProcessor.worklet.js +1 -1
- package/build/esm/effect/AutoPanner.d.ts +1 -1
- package/build/esm/effect/AutoPanner.js +1 -1
- package/build/esm/effect/AutoWah.d.ts +1 -1
- package/build/esm/effect/AutoWah.js +1 -1
- package/build/esm/effect/Chorus.d.ts +4 -3
- package/build/esm/effect/Chorus.js +4 -3
- package/build/esm/effect/Chorus.js.map +1 -1
- package/build/esm/effect/Freeverb.d.ts +1 -1
- package/build/esm/effect/Freeverb.js +1 -1
- package/build/esm/effect/JCReverb.d.ts +2 -2
- package/build/esm/effect/JCReverb.js +2 -2
- package/build/esm/effect/LFOEffect.d.ts +4 -2
- package/build/esm/effect/LFOEffect.js +4 -2
- package/build/esm/effect/LFOEffect.js.map +1 -1
- package/build/esm/effect/Reverb.d.ts +3 -3
- package/build/esm/effect/Reverb.js +3 -3
- package/build/esm/effect/StereoXFeedbackEffect.d.ts +1 -1
- package/build/esm/effect/StereoXFeedbackEffect.js +1 -1
- package/build/esm/effect/Tremolo.d.ts +1 -1
- package/build/esm/effect/Tremolo.js +1 -1
- package/build/esm/event/Pattern.d.ts +1 -1
- package/build/esm/event/Pattern.js +1 -1
- package/build/esm/index.d.ts +16 -15
- package/build/esm/index.js +14 -14
- package/build/esm/index.js.map +1 -1
- package/build/esm/instrument/DuoSynth.d.ts +1 -1
- package/build/esm/instrument/DuoSynth.js +1 -1
- package/build/esm/instrument/Instrument.d.ts +1 -1
- package/build/esm/instrument/Instrument.js +1 -1
- package/build/esm/instrument/MetalSynth.d.ts +2 -2
- package/build/esm/instrument/MetalSynth.js +1 -1
- package/build/esm/instrument/NoiseSynth.d.ts +1 -1
- package/build/esm/instrument/NoiseSynth.js +1 -1
- package/build/esm/instrument/PluckSynth.d.ts +1 -1
- package/build/esm/instrument/PluckSynth.js +1 -1
- package/build/esm/instrument/Sampler.d.ts +1 -1
- package/build/esm/instrument/Sampler.js +1 -1
- package/build/esm/instrument/Synth.d.ts +1 -1
- package/build/esm/instrument/Synth.js +1 -1
- package/build/esm/signal/Add.d.ts +1 -1
- package/build/esm/signal/AudioToGain.d.ts +1 -1
- package/build/esm/signal/AudioToGain.js +1 -1
- package/build/esm/signal/GainToAudio.d.ts +1 -1
- package/build/esm/signal/GainToAudio.js +1 -1
- package/build/esm/signal/Multiply.d.ts +1 -1
- package/build/esm/signal/ScaleExp.d.ts +2 -2
- package/build/esm/signal/ScaleExp.js +2 -2
- package/build/esm/signal/Signal.d.ts +1 -1
- package/build/esm/signal/Signal.js +1 -1
- package/build/esm/signal/SyncedSignal.d.ts +1 -1
- package/build/esm/signal/SyncedSignal.js +1 -1
- package/build/esm/source/Source.d.ts +2 -1
- package/build/esm/source/Source.js +2 -1
- package/build/esm/source/Source.js.map +1 -1
- package/build/esm/source/buffer/Player.d.ts +1 -1
- package/build/esm/source/buffer/Player.js +1 -1
- package/build/esm/source/buffer/Players.d.ts +1 -1
- package/build/esm/source/buffer/Players.js +1 -1
- package/build/esm/source/oscillator/LFO.d.ts +5 -3
- package/build/esm/source/oscillator/LFO.js +5 -3
- package/build/esm/source/oscillator/LFO.js.map +1 -1
- package/build/esm/source/oscillator/OmniOscillator.d.ts +10 -9
- package/build/esm/source/oscillator/OmniOscillator.js +10 -9
- package/build/esm/source/oscillator/OmniOscillator.js.map +1 -1
- package/build/esm/source/oscillator/Oscillator.d.ts +1 -1
- package/build/esm/source/oscillator/Oscillator.js +1 -1
- package/build/esm/source/oscillator/ToneOscillatorNode.d.ts +1 -1
- package/build/esm/source/oscillator/ToneOscillatorNode.js +1 -1
- package/build/esm/version.js +1 -1
- package/package.json +1 -1
|
@@ -92,8 +92,8 @@ export class Analyser extends ToneAudioNode<AnalyserOptions> {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
|
-
* Run the analysis given the current settings. If
|
|
96
|
-
* it will return a Float32Array. If
|
|
95
|
+
* Run the analysis given the current settings. If {@link channels} = 1,
|
|
96
|
+
* it will return a Float32Array. If {@link channels} > 1, it will
|
|
97
97
|
* return an array of Float32Arrays where each index in the array
|
|
98
98
|
* represents the analysis done on a channel.
|
|
99
99
|
*/
|
|
@@ -128,7 +128,7 @@ export class Analyser extends ToneAudioNode<AnalyserOptions> {
|
|
|
128
128
|
|
|
129
129
|
/**
|
|
130
130
|
* The number of channels the analyser does the analysis on. Channel
|
|
131
|
-
* separation is done using
|
|
131
|
+
* separation is done using {@link Split}
|
|
132
132
|
*/
|
|
133
133
|
get channels(): number {
|
|
134
134
|
return this._analysers.length;
|
|
@@ -4,7 +4,8 @@ import { MeterBase, MeterBaseOptions } from "./MeterBase";
|
|
|
4
4
|
export type DCMeterOptions = MeterBaseOptions;
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
* DCMeter gets the raw value of the input signal at the current time.
|
|
7
|
+
* DCMeter gets the raw value of the input signal at the current time.
|
|
8
|
+
* @see {@link Meter}.
|
|
8
9
|
*
|
|
9
10
|
* @example
|
|
10
11
|
* const meter = new Tone.DCMeter();
|
|
@@ -51,7 +51,7 @@ export class FFT extends MeterBase<FFTOptions> {
|
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* Gets the current frequency data from the connected audio source.
|
|
54
|
-
* Returns the frequency data of length
|
|
54
|
+
* Returns the frequency data of length {@link size} as a Float32Array of decibel values.
|
|
55
55
|
*/
|
|
56
56
|
getValue(): Float32Array {
|
|
57
57
|
const values = this._analyser.getValue() as Float32Array;
|
|
@@ -60,7 +60,7 @@ export class FFT extends MeterBase<FFTOptions> {
|
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
62
|
* The size of analysis. This must be a power of two in the range 16 to 16384.
|
|
63
|
-
* Determines the size of the array returned by
|
|
63
|
+
* Determines the size of the array returned by {@link getValue} (i.e. the number of
|
|
64
64
|
* frequency bins). Large FFT sizes may be costly to compute.
|
|
65
65
|
*/
|
|
66
66
|
get size(): PowerOfTwo {
|
|
@@ -81,7 +81,7 @@ export class FFT extends MeterBase<FFTOptions> {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
|
-
* Returns the frequency value in hertz of each of the indices of the FFT's
|
|
84
|
+
* Returns the frequency value in hertz of each of the indices of the FFT's {@link getValue} response.
|
|
85
85
|
* @example
|
|
86
86
|
* const fft = new Tone.FFT(32);
|
|
87
87
|
* console.log([0, 1, 2, 3, 4].map(index => fft.getFrequencyOfIndex(index)));
|
|
@@ -16,7 +16,8 @@ export interface MeterOptions extends MeterBaseOptions {
|
|
|
16
16
|
* of an input signal. It can also get the raw value of the input signal.
|
|
17
17
|
* Setting `normalRange` to `true` will covert the output to a range of
|
|
18
18
|
* 0-1. See an example using a graphical display
|
|
19
|
-
* [here](https://tonejs.github.io/examples/meter).
|
|
19
|
+
* [here](https://tonejs.github.io/examples/meter).
|
|
20
|
+
* @see {@link DCMeter}.
|
|
20
21
|
*
|
|
21
22
|
* @example
|
|
22
23
|
* const meter = new Tone.Meter();
|
|
@@ -80,7 +81,7 @@ export class Meter extends MeterBase<MeterOptions> {
|
|
|
80
81
|
}
|
|
81
82
|
|
|
82
83
|
/**
|
|
83
|
-
* Use
|
|
84
|
+
* Use {@link getValue} instead. For the previous getValue behavior, use DCMeter.
|
|
84
85
|
* @deprecated
|
|
85
86
|
*/
|
|
86
87
|
getLevel(): number | number[] {
|
|
@@ -90,9 +91,9 @@ export class Meter extends MeterBase<MeterOptions> {
|
|
|
90
91
|
|
|
91
92
|
/**
|
|
92
93
|
* Get the current value of the incoming signal.
|
|
93
|
-
* Output is in decibels when
|
|
94
|
-
* If
|
|
95
|
-
* representing the value of the input signal. When
|
|
94
|
+
* Output is in decibels when {@link normalRange} is `false`.
|
|
95
|
+
* If {@link channels} = 1, then the output is a single number
|
|
96
|
+
* representing the value of the input signal. When {@link channels} > 1,
|
|
96
97
|
* then each channel is returned as a value in a number array.
|
|
97
98
|
*/
|
|
98
99
|
getValue(): number | number[] {
|
|
@@ -46,7 +46,7 @@ export class Waveform extends MeterBase<WaveformOptions> {
|
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* The size of analysis. This must be a power of two in the range 16 to 16384.
|
|
49
|
-
* Determines the size of the array returned by
|
|
49
|
+
* Determines the size of the array returned by {@link getValue}.
|
|
50
50
|
*/
|
|
51
51
|
get size(): PowerOfTwo {
|
|
52
52
|
return this._analyser.size;
|
|
@@ -17,7 +17,7 @@ export interface ChannelOptions extends ToneAudioNodeOptions {
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Channel provides a channel strip interface with volume, pan, solo and mute controls.
|
|
20
|
-
*
|
|
20
|
+
* @see {@link PanVol} and {@link Solo}
|
|
21
21
|
* @example
|
|
22
22
|
* // pan the incoming signal left and drop the volume 12db
|
|
23
23
|
* const channel = new Tone.Channel(-0.25, -12);
|
|
@@ -91,7 +91,7 @@ export class Channel extends ToneAudioNode<ChannelOptions> {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
/**
|
|
94
|
-
* Solo/unsolo the channel. Soloing is only relative to other
|
|
94
|
+
* Solo/unsolo the channel. Soloing is only relative to other {@link Channel}s and {@link Solo} instances
|
|
95
95
|
*/
|
|
96
96
|
get solo(): boolean {
|
|
97
97
|
return this._solo.solo;
|
|
@@ -137,9 +137,9 @@ export class Channel extends ToneAudioNode<ChannelOptions> {
|
|
|
137
137
|
|
|
138
138
|
/**
|
|
139
139
|
* Send audio to another channel using a string. `send` is a lot like
|
|
140
|
-
*
|
|
141
|
-
* be useful in large applications to decouple sections since
|
|
142
|
-
* and
|
|
140
|
+
* {@link connect}, except it uses a string instead of an object. This can
|
|
141
|
+
* be useful in large applications to decouple sections since {@link send}
|
|
142
|
+
* and {@link receive} can be invoked separately in order to connect an object
|
|
143
143
|
* @param name The channel name to send the audio
|
|
144
144
|
* @param volume The amount of the signal to send.
|
|
145
145
|
* Defaults to 0db, i.e. send the entire signal
|
|
@@ -158,7 +158,7 @@ export class Channel extends ToneAudioNode<ChannelOptions> {
|
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
/**
|
|
161
|
-
* Receive audio from a channel which was connected with
|
|
161
|
+
* Receive audio from a channel which was connected with {@link send}.
|
|
162
162
|
* @param name The channel name to receive audio from.
|
|
163
163
|
*/
|
|
164
164
|
receive(name: string): this {
|
|
@@ -9,7 +9,7 @@ import { optionsFromArguments } from "../../core/util/Defaults";
|
|
|
9
9
|
export type MidSideMergeOptions = ToneAudioNodeOptions;
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* MidSideMerge merges the mid and side signal after they've been separated by
|
|
12
|
+
* MidSideMerge merges the mid and side signal after they've been separated by {@link MidSideSplit}
|
|
13
13
|
* ```
|
|
14
14
|
* Mid = (Left+Right)/sqrt(2); // obtain mid-signal from left and right
|
|
15
15
|
* Side = (Left-Right)/sqrt(2); // obtain side-signal from left and right
|
|
@@ -21,7 +21,7 @@ export class MidSideMerge extends ToneAudioNode<MidSideMergeOptions> {
|
|
|
21
21
|
readonly name: string = "MidSideMerge";
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
* There is no input, connect sources to either
|
|
24
|
+
* There is no input, connect sources to either {@link mid} or {@link side} inputs.
|
|
25
25
|
*/
|
|
26
26
|
readonly input: undefined;
|
|
27
27
|
|
|
@@ -23,7 +23,7 @@ export class MidSideSplit extends ToneAudioNode<MidSideSplitOptions> {
|
|
|
23
23
|
readonly input: Split;
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
* There is no output node, use either
|
|
26
|
+
* There is no output node, use either {@link mid} or {@link side} outputs.
|
|
27
27
|
*/
|
|
28
28
|
readonly output: undefined;
|
|
29
29
|
/**
|
|
@@ -127,7 +127,7 @@ export class Recorder extends ToneAudioNode<RecorderOptions> {
|
|
|
127
127
|
|
|
128
128
|
/**
|
|
129
129
|
* Stop the recorder. Returns a promise with the recorded content until this point
|
|
130
|
-
* encoded as
|
|
130
|
+
* encoded as {@link mimeType}
|
|
131
131
|
*/
|
|
132
132
|
async stop(): Promise<Blob> {
|
|
133
133
|
assert(this.state !== "stopped", "Recorder is not started");
|
|
@@ -13,8 +13,8 @@ export interface GateOptions extends ToneAudioNodeOptions {
|
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* Gate only passes a signal through when the incoming
|
|
16
|
-
* signal exceeds a specified threshold. It uses
|
|
17
|
-
* of the incoming signal and compares it to the
|
|
16
|
+
* signal exceeds a specified threshold. It uses {@link Follower} to follow the ampltiude
|
|
17
|
+
* of the incoming signal and compares it to the {@link threshold} value using {@link GreaterThan}.
|
|
18
18
|
*
|
|
19
19
|
* @example
|
|
20
20
|
* const gate = new Tone.Gate(-30, 0.2).toDestination();
|
|
@@ -90,7 +90,8 @@ export class Gate extends ToneAudioNode<GateOptions> {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
/**
|
|
93
|
-
* The attack/decay speed of the gate.
|
|
93
|
+
* The attack/decay speed of the gate.
|
|
94
|
+
* @see {@link Follower.smoothing}
|
|
94
95
|
*/
|
|
95
96
|
get smoothing(): Time {
|
|
96
97
|
return this._follower.smoothing;
|
|
@@ -11,7 +11,7 @@ export interface LimiterOptions extends ToneAudioNodeOptions {
|
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Limiter will limit the loudness of an incoming signal.
|
|
14
|
-
* Under the hood it's composed of a
|
|
14
|
+
* Under the hood it's composed of a {@link Compressor} with a fast attack
|
|
15
15
|
* and release and max compression ratio.
|
|
16
16
|
*
|
|
17
17
|
* @example
|
|
@@ -11,8 +11,9 @@ export interface MidSideCompressorOptions extends ToneAudioNodeOptions {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
|
-
* MidSideCompressor applies two different compressors to the
|
|
15
|
-
* and
|
|
14
|
+
* MidSideCompressor applies two different compressors to the {@link mid}
|
|
15
|
+
* and {@link side} signal components of the input.
|
|
16
|
+
* @see {@link MidSideSplit} and {@link MidSideMerge}.
|
|
16
17
|
* @category Component
|
|
17
18
|
*/
|
|
18
19
|
export class MidSideCompressor extends ToneAudioNode<MidSideCompressorOptions> {
|
|
@@ -16,7 +16,8 @@ export interface MultibandCompressorOptions extends ToneAudioNodeOptions {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* A compressor with separate controls over low/mid/high dynamics.
|
|
19
|
+
* A compressor with separate controls over low/mid/high dynamics.
|
|
20
|
+
* @see {@link Compressor} and {@link MultibandSplit}
|
|
20
21
|
*
|
|
21
22
|
* @example
|
|
22
23
|
* const multiband = new Tone.MultibandCompressor({
|
|
@@ -11,8 +11,8 @@ export interface FrequencyEnvelopeOptions extends EnvelopeOptions {
|
|
|
11
11
|
exponent: number;
|
|
12
12
|
}
|
|
13
13
|
/**
|
|
14
|
-
* FrequencyEnvelope is an
|
|
15
|
-
* and
|
|
14
|
+
* FrequencyEnvelope is an {@link Envelope} which ramps between {@link baseFrequency}
|
|
15
|
+
* and {@link octaves}. It can also have an optional {@link exponent} to adjust the curve
|
|
16
16
|
* which it ramps.
|
|
17
17
|
* @example
|
|
18
18
|
* const oscillator = new Tone.Oscillator().toDestination().start();
|
|
@@ -14,7 +14,7 @@ export interface BiquadFilterOptions extends ToneAudioNodeOptions {
|
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Thin wrapper around the native Web Audio [BiquadFilterNode](https://webaudio.github.io/web-audio-api/#biquadfilternode).
|
|
17
|
-
* BiquadFilter is similar to
|
|
17
|
+
* BiquadFilter is similar to {@link Filter} but doesn't have the option to set the "rolloff" value.
|
|
18
18
|
* @category Component
|
|
19
19
|
*/
|
|
20
20
|
export class BiquadFilter extends ToneAudioNode<BiquadFilterOptions> {
|
|
@@ -14,7 +14,7 @@ interface LowpassCombFilterOptions extends ToneAudioNodeOptions {
|
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* A lowpass feedback comb filter. It is similar to
|
|
17
|
-
*
|
|
17
|
+
* {@link FeedbackCombFilter}, but includes a lowpass filter.
|
|
18
18
|
* @category Component
|
|
19
19
|
*/
|
|
20
20
|
export class LowpassCombFilter extends ToneAudioNode<LowpassCombFilterOptions> {
|
package/Tone/core/Global.ts
CHANGED
|
@@ -18,7 +18,7 @@ const dummyContext = new DummyContext();
|
|
|
18
18
|
let globalContext: BaseContext = dummyContext;
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
|
-
* Returns the default system-wide
|
|
21
|
+
* Returns the default system-wide {@link Context}
|
|
22
22
|
* @category Core
|
|
23
23
|
*/
|
|
24
24
|
export function getContext(): BaseContext {
|
|
@@ -13,7 +13,7 @@ interface TickParamOptions<TypeName extends UnitName> extends ParamOptions<TypeN
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
|
-
* A Param class just for computing ticks. Similar to the
|
|
16
|
+
* A Param class just for computing ticks. Similar to the {@link Param} class,
|
|
17
17
|
* but offers conversion to BPM values as well as ability to compute tick
|
|
18
18
|
* duration and elapsed ticks
|
|
19
19
|
*/
|
|
@@ -218,7 +218,7 @@ export class TickParam<TypeName extends "hertz" | "bpm"> extends Param<TypeName>
|
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
/**
|
|
221
|
-
* The inverse of
|
|
221
|
+
* The inverse of {@link ticksToTime}. Convert a duration in
|
|
222
222
|
* seconds to the corresponding number of ticks accounting for any
|
|
223
223
|
* automation curves starting at the given time.
|
|
224
224
|
* @param duration The time interval to convert to ticks.
|
|
@@ -756,7 +756,7 @@ export class TransportClass
|
|
|
756
756
|
|
|
757
757
|
/**
|
|
758
758
|
* Unsyncs a previously synced signal from the transport's control.
|
|
759
|
-
*
|
|
759
|
+
* @see {@link syncSignal}.
|
|
760
760
|
*/
|
|
761
761
|
unsyncSignal(signal: Signal<any>): this {
|
|
762
762
|
for (let i = this._syncedSignals.length - 1; i >= 0; i--) {
|
|
@@ -10,7 +10,7 @@ export interface TransportEventOptions {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* TransportEvent is an internal class used by
|
|
13
|
+
* TransportEvent is an internal class used by {@link TransportClass}
|
|
14
14
|
* to schedule events. Do no invoke this class directly, it is
|
|
15
15
|
* handled from within Tone.Transport.
|
|
16
16
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Time, UnitMap, UnitName } from "../type/Units";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* Abstract base class for
|
|
4
|
+
* Abstract base class for {@link Param} and {@link Signal}
|
|
5
5
|
*/
|
|
6
6
|
export abstract class AbstractParam<TypeName extends UnitName> {
|
|
7
7
|
|
|
@@ -37,8 +37,8 @@ export abstract class AbstractParam<TypeName extends UnitName> {
|
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
39
|
* Creates a schedule point with the current value at the current time.
|
|
40
|
-
* Automation methods like
|
|
41
|
-
* require a starting automation value usually set by
|
|
40
|
+
* Automation methods like {@link linearRampToValueAtTime} and {@link exponentialRampToValueAtTime}
|
|
41
|
+
* require a starting automation value usually set by {@link setValueAtTime}. This method
|
|
42
42
|
* is useful since it will do a `setValueAtTime` with whatever the currently computed
|
|
43
43
|
* value at the given time is.
|
|
44
44
|
* @param time When to add a ramp point.
|
|
@@ -196,7 +196,7 @@ export abstract class AbstractParam<TypeName extends UnitName> {
|
|
|
196
196
|
abstract cancelScheduledValues(time: Time): this;
|
|
197
197
|
|
|
198
198
|
/**
|
|
199
|
-
* This is similar to
|
|
199
|
+
* This is similar to {@link cancelScheduledValues} except
|
|
200
200
|
* it holds the automated value at time until the next automated event.
|
|
201
201
|
* @example
|
|
202
202
|
* return Tone.Offline(() => {
|
|
@@ -349,7 +349,7 @@ export class Context extends BaseContext {
|
|
|
349
349
|
|
|
350
350
|
/**
|
|
351
351
|
* Create an audio worklet node from a name and options. The module
|
|
352
|
-
* must first be loaded using
|
|
352
|
+
* must first be loaded using {@link addAudioWorkletModule}.
|
|
353
353
|
*/
|
|
354
354
|
createAudioWorkletNode(
|
|
355
355
|
name: string,
|
|
@@ -413,7 +413,7 @@ export class Context extends BaseContext {
|
|
|
413
413
|
* The amount of time into the future events are scheduled. Giving Web Audio
|
|
414
414
|
* a short amount of time into the future to schedule events can reduce clicks and
|
|
415
415
|
* improve performance. This value can be set to 0 to get the lowest latency.
|
|
416
|
-
* Adjusting this value also affects the
|
|
416
|
+
* Adjusting this value also affects the {@link updateInterval}.
|
|
417
417
|
*/
|
|
418
418
|
get lookAhead(): Seconds {
|
|
419
419
|
return this._lookAhead;
|
|
@@ -452,7 +452,7 @@ export class Context extends BaseContext {
|
|
|
452
452
|
}
|
|
453
453
|
|
|
454
454
|
/**
|
|
455
|
-
* The current audio context time plus a short
|
|
455
|
+
* The current audio context time plus a short {@link lookAhead}.
|
|
456
456
|
* @example
|
|
457
457
|
* setInterval(() => {
|
|
458
458
|
* console.log("now", Tone.now());
|
|
@@ -463,11 +463,11 @@ export class Context extends BaseContext {
|
|
|
463
463
|
}
|
|
464
464
|
|
|
465
465
|
/**
|
|
466
|
-
* The current audio context time without the
|
|
467
|
-
* In most cases it is better to use
|
|
468
|
-
* with
|
|
469
|
-
* to making sure that everything is scheduled in sync. Mixing
|
|
470
|
-
* can cause some timing issues. If no lookAhead is desired, you can set the
|
|
466
|
+
* The current audio context time without the {@link lookAhead}.
|
|
467
|
+
* In most cases it is better to use {@link now} instead of {@link immediate} since
|
|
468
|
+
* with {@link now} the {@link lookAhead} is applied equally to _all_ components including internal components,
|
|
469
|
+
* to making sure that everything is scheduled in sync. Mixing {@link now} and {@link immediate}
|
|
470
|
+
* can cause some timing issues. If no lookAhead is desired, you can set the {@link lookAhead} to `0`.
|
|
471
471
|
*/
|
|
472
472
|
immediate(): Seconds {
|
|
473
473
|
return this._context.currentTime;
|
|
@@ -475,7 +475,8 @@ export class Context extends BaseContext {
|
|
|
475
475
|
|
|
476
476
|
/**
|
|
477
477
|
* Starts the audio context from a suspended state. This is required
|
|
478
|
-
* to initially start the AudioContext.
|
|
478
|
+
* to initially start the AudioContext.
|
|
479
|
+
* @see {@link start}
|
|
479
480
|
*/
|
|
480
481
|
resume(): Promise<void> {
|
|
481
482
|
if (isAudioContext(this._context)) {
|
|
@@ -593,7 +594,7 @@ export class Context extends BaseContext {
|
|
|
593
594
|
}
|
|
594
595
|
|
|
595
596
|
/**
|
|
596
|
-
* Clear the function scheduled by
|
|
597
|
+
* Clear the function scheduled by {@link setInterval}
|
|
597
598
|
*/
|
|
598
599
|
clearInterval(id: number): this {
|
|
599
600
|
return this.clearTimeout(id);
|
|
@@ -16,7 +16,7 @@ export interface ListenerOptions extends ToneAudioNodeOptions{
|
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Tone.Listener is a thin wrapper around the AudioListener. Listener combined
|
|
19
|
-
* with
|
|
19
|
+
* with {@link Panner3D} makes up the Web Audio API's 3D panning system. Panner3D allows you
|
|
20
20
|
* to place sounds in 3D and Listener allows you to navigate the 3D sound environment from
|
|
21
21
|
* a first-person perspective. There is only one listener per audio context.
|
|
22
22
|
*/
|
|
@@ -6,7 +6,7 @@ import { ToneAudioBuffer } from "./ToneAudioBuffer";
|
|
|
6
6
|
/**
|
|
7
7
|
* Generate a buffer by rendering all of the Tone.js code within the callback using the OfflineAudioContext.
|
|
8
8
|
* The OfflineAudioContext is capable of rendering much faster than real time in many cases.
|
|
9
|
-
* The callback function also passes in an offline instance of
|
|
9
|
+
* The callback function also passes in an offline instance of {@link Context} which can be used
|
|
10
10
|
* to schedule events along the Transport.
|
|
11
11
|
* @param callback All Tone.js nodes which are created and scheduled within this callback are recorded into the output Buffer.
|
|
12
12
|
* @param duration the amount of time to record for.
|
|
@@ -20,6 +20,7 @@ export type ToneAudioNodeOptions = ToneWithContextOptions;
|
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* ToneAudioNode is the base class for classes which process audio.
|
|
23
|
+
* @category Core
|
|
23
24
|
*/
|
|
24
25
|
export abstract class ToneAudioNode<Options extends ToneAudioNodeOptions = ToneAudioNodeOptions>
|
|
25
26
|
extends ToneWithContext<Options> {
|
|
@@ -211,7 +212,7 @@ export abstract class ToneAudioNode<Options extends ToneAudioNodeOptions = ToneA
|
|
|
211
212
|
|
|
212
213
|
/**
|
|
213
214
|
* Connect the output to the context's destination node.
|
|
214
|
-
*
|
|
215
|
+
* @see {@link toDestination}
|
|
215
216
|
* @deprecated
|
|
216
217
|
*/
|
|
217
218
|
toMaster(): this {
|
|
@@ -95,7 +95,7 @@ export abstract class ToneWithContext<Options extends ToneWithContextOptions> ex
|
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
97
|
* Convert the incoming time to seconds.
|
|
98
|
-
* This is calculated against the current
|
|
98
|
+
* This is calculated against the current {@link TransportClass} bpm
|
|
99
99
|
* @example
|
|
100
100
|
* const gain = new Tone.Gain();
|
|
101
101
|
* setInterval(() => console.log(gain.toSeconds("4n")), 100);
|
package/Tone/core/index.ts
CHANGED
package/Tone/core/type/Time.ts
CHANGED
|
@@ -137,7 +137,7 @@ export class TimeClass<Type extends Seconds | Ticks = Seconds, Unit extends stri
|
|
|
137
137
|
|
|
138
138
|
/**
|
|
139
139
|
* Create a TimeClass from a time string or number. The time is computed against the
|
|
140
|
-
* global Tone.Context. To use a specific context, use
|
|
140
|
+
* global Tone.Context. To use a specific context, use {@link TimeClass}
|
|
141
141
|
* @param value A value which represents time
|
|
142
142
|
* @param units The value's units if they can't be inferred by the value.
|
|
143
143
|
* @category Unit
|
|
@@ -52,6 +52,7 @@ export function deepEquals<T>(arrayA: T[], arrayB: T[]): boolean {
|
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
54
|
* Convert an args array into an object.
|
|
55
|
+
* @internal
|
|
55
56
|
*/
|
|
56
57
|
export function optionsFromArguments<T extends object>(
|
|
57
58
|
defaults: T,
|
|
@@ -101,6 +102,7 @@ export function getDefaultsFromInstance<T>(instance: T): BaseToneOptions {
|
|
|
101
102
|
/**
|
|
102
103
|
* Returns the fallback if the given object is undefined.
|
|
103
104
|
* Take an array of arguments and return a formatted options object.
|
|
105
|
+
* @internal
|
|
104
106
|
*/
|
|
105
107
|
export function defaultArg<T>(given: T, fallback: T): T {
|
|
106
108
|
if (isUndef(given)) {
|
|
@@ -2,7 +2,7 @@ import { addToWorklet } from "./WorkletGlobalScope";
|
|
|
2
2
|
|
|
3
3
|
const toneAudioWorkletProcessor = /* javascript */ `
|
|
4
4
|
/**
|
|
5
|
-
* The base AudioWorkletProcessor for use in Tone.js. Works with the
|
|
5
|
+
* The base AudioWorkletProcessor for use in Tone.js. Works with the {@link ToneAudioWorklet}.
|
|
6
6
|
*/
|
|
7
7
|
class ToneAudioWorkletProcessor extends AudioWorkletProcessor {
|
|
8
8
|
|
|
@@ -8,7 +8,7 @@ export interface AutoPannerOptions extends LFOEffectOptions {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* AutoPanner is a
|
|
11
|
+
* AutoPanner is a {@link Panner} with an {@link LFO} connected to the pan amount.
|
|
12
12
|
* [Related Reading](https://www.ableton.com/en/blog/autopan-chopper-effect-and-more-liveschool/).
|
|
13
13
|
*
|
|
14
14
|
* @example
|
package/Tone/effect/AutoWah.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface AutoWahOptions extends EffectOptions {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
-
* AutoWah connects a
|
|
22
|
+
* AutoWah connects a {@link Follower} to a {@link Filter}.
|
|
23
23
|
* The frequency of the filter, follows the input amplitude curve.
|
|
24
24
|
* Inspiration from [Tuna.js](https://github.com/Dinahmoe/tuna).
|
|
25
25
|
*
|
package/Tone/effect/Chorus.ts
CHANGED
|
@@ -16,8 +16,8 @@ export interface ChorusOptions extends StereoFeedbackEffectOptions {
|
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* Chorus is a stereo chorus effect composed of a left and right delay with an
|
|
20
|
-
* When
|
|
19
|
+
* Chorus is a stereo chorus effect composed of a left and right delay with an {@link LFO} applied to the delayTime of each channel.
|
|
20
|
+
* When {@link feedback} is set to a value larger than 0, you also get Flanger-type effects.
|
|
21
21
|
* Inspiration from [Tuna.js](https://github.com/Dinahmoe/tuna/blob/master/tuna.js).
|
|
22
22
|
* Read more on the chorus effect on [Sound On Sound](http://www.soundonsound.com/sos/jun04/articles/synthsecrets.htm).
|
|
23
23
|
*
|
|
@@ -196,7 +196,8 @@ export class Chorus extends StereoFeedbackEffect<ChorusOptions> {
|
|
|
196
196
|
}
|
|
197
197
|
|
|
198
198
|
/**
|
|
199
|
-
* Sync the filter to the transport.
|
|
199
|
+
* Sync the filter to the transport.
|
|
200
|
+
* @see {@link LFO.sync}
|
|
200
201
|
*/
|
|
201
202
|
sync(): this {
|
|
202
203
|
this._lfoL.sync();
|
package/Tone/effect/Freeverb.ts
CHANGED
|
@@ -23,7 +23,7 @@ const allpassFilterFrequencies = [225, 556, 441, 341];
|
|
|
23
23
|
/**
|
|
24
24
|
* Freeverb is a reverb based on [Freeverb](https://ccrma.stanford.edu/~jos/pasp/Freeverb.html).
|
|
25
25
|
* Read more on reverb on [Sound On Sound](https://web.archive.org/web/20160404083902/http://www.soundonsound.com:80/sos/feb01/articles/synthsecrets.asp).
|
|
26
|
-
* Freeverb is now implemented with an AudioWorkletNode which may result on performance degradation on some platforms. Consider using
|
|
26
|
+
* Freeverb is now implemented with an AudioWorkletNode which may result on performance degradation on some platforms. Consider using {@link Reverb}.
|
|
27
27
|
* @example
|
|
28
28
|
* const freeverb = new Tone.Freeverb().toDestination();
|
|
29
29
|
* freeverb.dampening = 1000;
|
package/Tone/effect/JCReverb.ts
CHANGED
|
@@ -28,8 +28,8 @@ const allpassFilterFreqs = [347, 113, 37];
|
|
|
28
28
|
/**
|
|
29
29
|
* JCReverb is a simple [Schroeder Reverberator](https://ccrma.stanford.edu/~jos/pasp/Schroeder_Reverberators.html)
|
|
30
30
|
* tuned by John Chowning in 1970.
|
|
31
|
-
* It is made up of three allpass filters and four
|
|
32
|
-
* JCReverb is now implemented with an AudioWorkletNode which may result on performance degradation on some platforms. Consider using
|
|
31
|
+
* It is made up of three allpass filters and four {@link FeedbackCombFilter}.
|
|
32
|
+
* JCReverb is now implemented with an AudioWorkletNode which may result on performance degradation on some platforms. Consider using {@link Reverb}.
|
|
33
33
|
* @example
|
|
34
34
|
* const reverb = new Tone.JCReverb(0.4).toDestination();
|
|
35
35
|
* const delay = new Tone.FeedbackDelay(0.5);
|
package/Tone/effect/LFOEffect.ts
CHANGED
|
@@ -76,7 +76,8 @@ export abstract class LFOEffect<Options extends LFOEffectOptions> extends Effect
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
/**
|
|
79
|
-
* Sync the filter to the transport.
|
|
79
|
+
* Sync the filter to the transport.
|
|
80
|
+
* @see {@link LFO.sync}
|
|
80
81
|
*/
|
|
81
82
|
sync(): this {
|
|
82
83
|
this._lfo.sync();
|
|
@@ -92,7 +93,8 @@ export abstract class LFOEffect<Options extends LFOEffectOptions> extends Effect
|
|
|
92
93
|
}
|
|
93
94
|
|
|
94
95
|
/**
|
|
95
|
-
* The type of the LFO's oscillator
|
|
96
|
+
* The type of the LFO's oscillator.
|
|
97
|
+
* @see {@link Oscillator.type}
|
|
96
98
|
* @example
|
|
97
99
|
* const autoFilter = new Tone.AutoFilter().start().toDestination();
|
|
98
100
|
* const noise = new Tone.Noise().start().connect(autoFilter);
|
package/Tone/effect/Reverb.ts
CHANGED
|
@@ -18,7 +18,7 @@ interface ReverbOptions extends EffectOptions {
|
|
|
18
18
|
* Generates an Impulse Response Buffer
|
|
19
19
|
* with Tone.Offline then feeds the IR into ConvolverNode.
|
|
20
20
|
* The impulse response generation is async, so you have
|
|
21
|
-
* to wait until
|
|
21
|
+
* to wait until {@link ready} resolves before it will make a sound.
|
|
22
22
|
*
|
|
23
23
|
* Inspiration from [ReverbGen](https://github.com/adelespinasse/reverbGen).
|
|
24
24
|
* Copyright (c) 2014 Alan deLespinasse Apache 2.0 License.
|
|
@@ -45,8 +45,8 @@ export class Reverb extends Effect<ReverbOptions> {
|
|
|
45
45
|
private _preDelay: Seconds;
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
|
-
* Resolves when the reverb buffer is generated. Whenever either
|
|
49
|
-
* or
|
|
48
|
+
* Resolves when the reverb buffer is generated. Whenever either {@link decay}
|
|
49
|
+
* or {@link preDelay} are set, you have to wait until {@link ready} resolves
|
|
50
50
|
* before the IR is generated with the latest values.
|
|
51
51
|
*/
|
|
52
52
|
ready: Promise<void> = Promise.resolve();
|
|
@@ -7,7 +7,7 @@ export interface StereoXFeedbackEffectOptions extends StereoFeedbackEffectOption
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
|
-
* Just like a
|
|
10
|
+
* Just like a {@link StereoFeedbackEffect}, but the feedback is routed from left to right
|
|
11
11
|
* and right to left instead of on the same channel.
|
|
12
12
|
* ```
|
|
13
13
|
* +--------------------------------+ feedbackL <-----------------------------------+
|
package/Tone/effect/Tremolo.ts
CHANGED
|
@@ -15,7 +15,7 @@ export interface TremoloOptions extends StereoEffectOptions {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
* Tremolo modulates the amplitude of an incoming signal using an
|
|
18
|
+
* Tremolo modulates the amplitude of an incoming signal using an {@link LFO}.
|
|
19
19
|
* The effect is a stereo effect where the modulation phase is inverted in each channel.
|
|
20
20
|
*
|
|
21
21
|
* @example
|