tone 14.8.27
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/CHANGELOG.md +313 -0
- package/LICENSE.md +21 -0
- package/README.md +255 -0
- package/Tone/classes.ts +7 -0
- package/Tone/component/analysis/Analyser.test.ts +78 -0
- package/Tone/component/analysis/Analyser.ts +168 -0
- package/Tone/component/analysis/DCMeter.test.ts +34 -0
- package/Tone/component/analysis/DCMeter.ts +38 -0
- package/Tone/component/analysis/FFT.test.ts +83 -0
- package/Tone/component/analysis/FFT.ts +92 -0
- package/Tone/component/analysis/Follower.test.ts +111 -0
- package/Tone/component/analysis/Follower.ts +85 -0
- package/Tone/component/analysis/Meter.test.ts +91 -0
- package/Tone/component/analysis/Meter.ts +123 -0
- package/Tone/component/analysis/MeterBase.ts +45 -0
- package/Tone/component/analysis/Waveform.test.ts +49 -0
- package/Tone/component/analysis/Waveform.ts +57 -0
- package/Tone/component/channel/Channel.test.ts +77 -0
- package/Tone/component/channel/Channel.ts +178 -0
- package/Tone/component/channel/CrossFade.test.ts +57 -0
- package/Tone/component/channel/CrossFade.ts +143 -0
- package/Tone/component/channel/Merge.test.ts +59 -0
- package/Tone/component/channel/Merge.ts +62 -0
- package/Tone/component/channel/MidSideMerge.test.ts +28 -0
- package/Tone/component/channel/MidSideMerge.ts +105 -0
- package/Tone/component/channel/MidSideSplit.test.ts +79 -0
- package/Tone/component/channel/MidSideSplit.ts +90 -0
- package/Tone/component/channel/Mono.test.ts +43 -0
- package/Tone/component/channel/Mono.ts +55 -0
- package/Tone/component/channel/MultibandSplit.test.ts +66 -0
- package/Tone/component/channel/MultibandSplit.ts +166 -0
- package/Tone/component/channel/PanVol.test.ts +58 -0
- package/Tone/component/channel/PanVol.ts +110 -0
- package/Tone/component/channel/Panner.test.ts +86 -0
- package/Tone/component/channel/Panner.ts +89 -0
- package/Tone/component/channel/Panner3D.test.ts +77 -0
- package/Tone/component/channel/Panner3D.ts +234 -0
- package/Tone/component/channel/Recorder.test.ts +119 -0
- package/Tone/component/channel/Recorder.ts +162 -0
- package/Tone/component/channel/Solo.test.ts +138 -0
- package/Tone/component/channel/Solo.ts +148 -0
- package/Tone/component/channel/Split.test.ts +62 -0
- package/Tone/component/channel/Split.ts +51 -0
- package/Tone/component/channel/Volume.test.ts +129 -0
- package/Tone/component/channel/Volume.ts +109 -0
- package/Tone/component/dynamics/Compressor.test.ts +85 -0
- package/Tone/component/dynamics/Compressor.ts +163 -0
- package/Tone/component/dynamics/Gate.test.ts +72 -0
- package/Tone/component/dynamics/Gate.ts +110 -0
- package/Tone/component/dynamics/Limiter.test.ts +43 -0
- package/Tone/component/dynamics/Limiter.ts +78 -0
- package/Tone/component/dynamics/MidSideCompressor.test.ts +59 -0
- package/Tone/component/dynamics/MidSideCompressor.ts +87 -0
- package/Tone/component/dynamics/MultibandCompressor.test.ts +54 -0
- package/Tone/component/dynamics/MultibandCompressor.ts +130 -0
- package/Tone/component/envelope/AmplitudeEnvelope.test.ts +92 -0
- package/Tone/component/envelope/AmplitudeEnvelope.ts +65 -0
- package/Tone/component/envelope/Envelope.test.ts +834 -0
- package/Tone/component/envelope/Envelope.ts +623 -0
- package/Tone/component/envelope/FrequencyEnvelope.test.ts +92 -0
- package/Tone/component/envelope/FrequencyEnvelope.ts +134 -0
- package/Tone/component/filter/BiquadFilter.test.ts +94 -0
- package/Tone/component/filter/BiquadFilter.ts +158 -0
- package/Tone/component/filter/Convolver.test.ts +106 -0
- package/Tone/component/filter/Convolver.ts +134 -0
- package/Tone/component/filter/EQ3.test.ts +60 -0
- package/Tone/component/filter/EQ3.ts +163 -0
- package/Tone/component/filter/FeedbackCombFilter.test.ts +80 -0
- package/Tone/component/filter/FeedbackCombFilter.ts +105 -0
- package/Tone/component/filter/FeedbackCombFilter.worklet.ts +39 -0
- package/Tone/component/filter/Filter.test.ts +114 -0
- package/Tone/component/filter/Filter.ts +202 -0
- package/Tone/component/filter/LowpassCombFilter.test.ts +75 -0
- package/Tone/component/filter/LowpassCombFilter.ts +100 -0
- package/Tone/component/filter/OnePoleFilter.test.ts +90 -0
- package/Tone/component/filter/OnePoleFilter.ts +146 -0
- package/Tone/component/filter/PhaseShiftAllpass.test.ts +71 -0
- package/Tone/component/filter/PhaseShiftAllpass.ts +81 -0
- package/Tone/component/index.ts +39 -0
- package/Tone/core/Global.ts +73 -0
- package/Tone/core/Tone.ts +107 -0
- package/Tone/core/clock/Clock.test.ts +663 -0
- package/Tone/core/clock/Clock.ts +317 -0
- package/Tone/core/clock/TickParam.test.ts +15 -0
- package/Tone/core/clock/TickParam.ts +271 -0
- package/Tone/core/clock/TickSignal.test.ts +455 -0
- package/Tone/core/clock/TickSignal.ts +94 -0
- package/Tone/core/clock/TickSource.test.ts +655 -0
- package/Tone/core/clock/TickSource.ts +338 -0
- package/Tone/core/clock/Ticker.test.ts +86 -0
- package/Tone/core/clock/Ticker.ts +149 -0
- package/Tone/core/clock/Transport.test.ts +972 -0
- package/Tone/core/clock/Transport.ts +731 -0
- package/Tone/core/clock/TransportEvent.test.ts +45 -0
- package/Tone/core/clock/TransportEvent.ts +105 -0
- package/Tone/core/clock/TransportRepeatEvent.test.ts +43 -0
- package/Tone/core/clock/TransportRepeatEvent.ts +150 -0
- package/Tone/core/context/AbstractParam.ts +260 -0
- package/Tone/core/context/AudioContext.ts +60 -0
- package/Tone/core/context/BaseContext.ts +162 -0
- package/Tone/core/context/Context.test.ts +358 -0
- package/Tone/core/context/Context.ts +628 -0
- package/Tone/core/context/ContextInitialization.ts +42 -0
- package/Tone/core/context/Delay.test.ts +105 -0
- package/Tone/core/context/Delay.ts +103 -0
- package/Tone/core/context/Destination.test.ts +76 -0
- package/Tone/core/context/Destination.ts +128 -0
- package/Tone/core/context/DummyContext.test.ts +47 -0
- package/Tone/core/context/DummyContext.ts +201 -0
- package/Tone/core/context/Gain.test.ts +75 -0
- package/Tone/core/context/Gain.ts +90 -0
- package/Tone/core/context/Listener.test.ts +22 -0
- package/Tone/core/context/Listener.ts +117 -0
- package/Tone/core/context/Offline.test.ts +79 -0
- package/Tone/core/context/Offline.ts +65 -0
- package/Tone/core/context/OfflineContext.test.ts +64 -0
- package/Tone/core/context/OfflineContext.ts +118 -0
- package/Tone/core/context/Param.test.ts +607 -0
- package/Tone/core/context/Param.ts +541 -0
- package/Tone/core/context/ToneAudioBuffer.test.ts +360 -0
- package/Tone/core/context/ToneAudioBuffer.ts +412 -0
- package/Tone/core/context/ToneAudioBuffers.test.ts +159 -0
- package/Tone/core/context/ToneAudioBuffers.ts +167 -0
- package/Tone/core/context/ToneAudioNode.test.ts +345 -0
- package/Tone/core/context/ToneAudioNode.ts +396 -0
- package/Tone/core/context/ToneWithContext.ts +205 -0
- package/Tone/core/index.ts +38 -0
- package/Tone/core/type/Conversions.test.ts +34 -0
- package/Tone/core/type/Conversions.ts +78 -0
- package/Tone/core/type/Frequency.test.ts +220 -0
- package/Tone/core/type/Frequency.ts +249 -0
- package/Tone/core/type/Midi.test.ts +137 -0
- package/Tone/core/type/Midi.ts +82 -0
- package/Tone/core/type/NoteUnits.ts +36 -0
- package/Tone/core/type/Ticks.test.ts +190 -0
- package/Tone/core/type/Ticks.ts +69 -0
- package/Tone/core/type/Time.test.ts +181 -0
- package/Tone/core/type/Time.ts +156 -0
- package/Tone/core/type/TimeBase.ts +324 -0
- package/Tone/core/type/TransportTime.test.ts +184 -0
- package/Tone/core/type/TransportTime.ts +34 -0
- package/Tone/core/type/Units.ts +204 -0
- package/Tone/core/util/AdvancedTypeCheck.ts +40 -0
- package/Tone/core/util/Debug.test.ts +74 -0
- package/Tone/core/util/Debug.ts +63 -0
- package/Tone/core/util/Decorator.ts +51 -0
- package/Tone/core/util/Defaults.ts +123 -0
- package/Tone/core/util/Draw.test.ts +72 -0
- package/Tone/core/util/Draw.ts +125 -0
- package/Tone/core/util/Emitter.test.ts +109 -0
- package/Tone/core/util/Emitter.ts +125 -0
- package/Tone/core/util/Interface.ts +45 -0
- package/Tone/core/util/IntervalTimeline.test.ts +465 -0
- package/Tone/core/util/IntervalTimeline.ts +569 -0
- package/Tone/core/util/Math.ts +40 -0
- package/Tone/core/util/StateTimeline.test.ts +103 -0
- package/Tone/core/util/StateTimeline.ts +96 -0
- package/Tone/core/util/Timeline.test.ts +606 -0
- package/Tone/core/util/Timeline.ts +399 -0
- package/Tone/core/util/TimelineValue.test.ts +29 -0
- package/Tone/core/util/TimelineValue.ts +56 -0
- package/Tone/core/util/TypeCheck.ts +65 -0
- package/Tone/core/util/global.d.ts +7 -0
- package/Tone/core/worklet/DelayLine.worklet.ts +49 -0
- package/Tone/core/worklet/SingleIOProcessor.worklet.ts +73 -0
- package/Tone/core/worklet/ToneAudioWorklet.ts +76 -0
- package/Tone/core/worklet/ToneAudioWorkletProcessor.worklet.ts +35 -0
- package/Tone/core/worklet/WorkletGlobalScope.ts +26 -0
- package/Tone/effect/AutoFilter.test.ts +113 -0
- package/Tone/effect/AutoFilter.ts +102 -0
- package/Tone/effect/AutoPanner.test.ts +90 -0
- package/Tone/effect/AutoPanner.ts +63 -0
- package/Tone/effect/AutoWah.test.ts +61 -0
- package/Tone/effect/AutoWah.ts +208 -0
- package/Tone/effect/BitCrusher.test.ts +42 -0
- package/Tone/effect/BitCrusher.ts +129 -0
- package/Tone/effect/BitCrusher.worklet.ts +27 -0
- package/Tone/effect/Chebyshev.test.ts +49 -0
- package/Tone/effect/Chebyshev.ts +123 -0
- package/Tone/effect/Chorus.test.ts +87 -0
- package/Tone/effect/Chorus.ts +225 -0
- package/Tone/effect/Distortion.test.ts +41 -0
- package/Tone/effect/Distortion.ts +98 -0
- package/Tone/effect/Effect.ts +88 -0
- package/Tone/effect/FeedbackDelay.test.ts +75 -0
- package/Tone/effect/FeedbackDelay.ts +73 -0
- package/Tone/effect/FeedbackEffect.ts +68 -0
- package/Tone/effect/Freeverb.test.ts +45 -0
- package/Tone/effect/Freeverb.ts +137 -0
- package/Tone/effect/FrequencyShifter.test.ts +55 -0
- package/Tone/effect/FrequencyShifter.ts +155 -0
- package/Tone/effect/JCReverb.test.ts +41 -0
- package/Tone/effect/JCReverb.ts +130 -0
- package/Tone/effect/LFOEffect.ts +115 -0
- package/Tone/effect/MidSideEffect.ts +93 -0
- package/Tone/effect/Phaser.test.ts +44 -0
- package/Tone/effect/Phaser.ts +187 -0
- package/Tone/effect/PingPongDelay.test.ts +41 -0
- package/Tone/effect/PingPongDelay.ts +105 -0
- package/Tone/effect/PitchShift.test.ts +66 -0
- package/Tone/effect/PitchShift.ts +218 -0
- package/Tone/effect/Reverb.test.ts +75 -0
- package/Tone/effect/Reverb.ts +145 -0
- package/Tone/effect/StereoEffect.ts +99 -0
- package/Tone/effect/StereoFeedbackEffect.ts +91 -0
- package/Tone/effect/StereoWidener.test.ts +41 -0
- package/Tone/effect/StereoWidener.ts +112 -0
- package/Tone/effect/StereoXFeedbackEffect.ts +37 -0
- package/Tone/effect/Tremolo.test.ts +88 -0
- package/Tone/effect/Tremolo.ts +191 -0
- package/Tone/effect/Vibrato.test.ts +52 -0
- package/Tone/effect/Vibrato.ts +104 -0
- package/Tone/effect/index.ts +18 -0
- package/Tone/event/Loop.test.ts +334 -0
- package/Tone/event/Loop.ts +210 -0
- package/Tone/event/Part.test.ts +848 -0
- package/Tone/event/Part.ts +473 -0
- package/Tone/event/Pattern.test.ts +137 -0
- package/Tone/event/Pattern.ts +121 -0
- package/Tone/event/PatternGenerator.test.ts +95 -0
- package/Tone/event/PatternGenerator.ts +176 -0
- package/Tone/event/Sequence.test.ts +453 -0
- package/Tone/event/Sequence.ts +300 -0
- package/Tone/event/ToneEvent.test.ts +485 -0
- package/Tone/event/ToneEvent.ts +392 -0
- package/Tone/event/index.ts +5 -0
- package/Tone/fromContext.test.ts +29 -0
- package/Tone/fromContext.ts +77 -0
- package/Tone/index.test.ts +54 -0
- package/Tone/index.ts +116 -0
- package/Tone/instrument/AMSynth.test.ts +79 -0
- package/Tone/instrument/AMSynth.ts +51 -0
- package/Tone/instrument/DuoSynth.test.ts +95 -0
- package/Tone/instrument/DuoSynth.ts +216 -0
- package/Tone/instrument/FMSynth.test.ts +72 -0
- package/Tone/instrument/FMSynth.ts +65 -0
- package/Tone/instrument/Instrument.ts +180 -0
- package/Tone/instrument/MembraneSynth.test.ts +74 -0
- package/Tone/instrument/MembraneSynth.ts +96 -0
- package/Tone/instrument/MetalSynth.test.ts +66 -0
- package/Tone/instrument/MetalSynth.ts +272 -0
- package/Tone/instrument/ModulationSynth.ts +217 -0
- package/Tone/instrument/MonoSynth.test.ts +88 -0
- package/Tone/instrument/MonoSynth.ts +177 -0
- package/Tone/instrument/Monophonic.ts +135 -0
- package/Tone/instrument/NoiseSynth.test.ts +82 -0
- package/Tone/instrument/NoiseSynth.ts +127 -0
- package/Tone/instrument/PluckSynth.test.ts +62 -0
- package/Tone/instrument/PluckSynth.ts +127 -0
- package/Tone/instrument/PolySynth.test.ts +298 -0
- package/Tone/instrument/PolySynth.ts +393 -0
- package/Tone/instrument/Sampler.test.ts +275 -0
- package/Tone/instrument/Sampler.ts +329 -0
- package/Tone/instrument/Synth.test.ts +132 -0
- package/Tone/instrument/Synth.ts +141 -0
- package/Tone/instrument/index.ts +11 -0
- package/Tone/signal/Abs.test.ts +42 -0
- package/Tone/signal/Abs.ts +53 -0
- package/Tone/signal/Add.test.ts +60 -0
- package/Tone/signal/Add.ts +63 -0
- package/Tone/signal/AudioToGain.test.ts +53 -0
- package/Tone/signal/AudioToGain.ts +40 -0
- package/Tone/signal/GainToAudio.test.ts +41 -0
- package/Tone/signal/GainToAudio.ts +40 -0
- package/Tone/signal/GreaterThan.test.ts +81 -0
- package/Tone/signal/GreaterThan.ts +88 -0
- package/Tone/signal/GreaterThanZero.test.ts +49 -0
- package/Tone/signal/GreaterThanZero.ts +67 -0
- package/Tone/signal/Multiply.test.ts +46 -0
- package/Tone/signal/Multiply.ts +85 -0
- package/Tone/signal/Negate.test.ts +30 -0
- package/Tone/signal/Negate.ts +41 -0
- package/Tone/signal/Pow.test.ts +40 -0
- package/Tone/signal/Pow.ts +84 -0
- package/Tone/signal/Scale.test.ts +58 -0
- package/Tone/signal/Scale.ts +119 -0
- package/Tone/signal/ScaleExp.test.ts +49 -0
- package/Tone/signal/ScaleExp.ts +69 -0
- package/Tone/signal/Signal.test.ts +519 -0
- package/Tone/signal/Signal.ts +226 -0
- package/Tone/signal/SignalOperator.ts +21 -0
- package/Tone/signal/Subtract.test.ts +60 -0
- package/Tone/signal/Subtract.ts +74 -0
- package/Tone/signal/SyncedSignal.test.ts +245 -0
- package/Tone/signal/SyncedSignal.ts +172 -0
- package/Tone/signal/ToneConstantSource.test.ts +202 -0
- package/Tone/signal/ToneConstantSource.ts +90 -0
- package/Tone/signal/WaveShaper.test.ts +95 -0
- package/Tone/signal/WaveShaper.ts +136 -0
- package/Tone/signal/Zero.test.ts +25 -0
- package/Tone/signal/Zero.ts +45 -0
- package/Tone/signal/index.ts +16 -0
- package/Tone/source/Noise.test.ts +121 -0
- package/Tone/source/Noise.ts +287 -0
- package/Tone/source/OneShotSource.ts +260 -0
- package/Tone/source/Source.test.ts +408 -0
- package/Tone/source/Source.ts +339 -0
- package/Tone/source/UserMedia.test.ts +177 -0
- package/Tone/source/UserMedia.ts +260 -0
- package/Tone/source/buffer/GrainPlayer.test.ts +235 -0
- package/Tone/source/buffer/GrainPlayer.ts +322 -0
- package/Tone/source/buffer/Player.test.ts +651 -0
- package/Tone/source/buffer/Player.ts +440 -0
- package/Tone/source/buffer/Players.test.ts +288 -0
- package/Tone/source/buffer/Players.ts +235 -0
- package/Tone/source/buffer/ToneBufferSource.test.ts +578 -0
- package/Tone/source/buffer/ToneBufferSource.ts +253 -0
- package/Tone/source/index.ts +15 -0
- package/Tone/source/oscillator/AMOscillator.test.ts +69 -0
- package/Tone/source/oscillator/AMOscillator.ts +222 -0
- package/Tone/source/oscillator/FMOscillator.test.ts +85 -0
- package/Tone/source/oscillator/FMOscillator.ts +236 -0
- package/Tone/source/oscillator/FatOscillator.test.ts +91 -0
- package/Tone/source/oscillator/FatOscillator.ts +255 -0
- package/Tone/source/oscillator/LFO.test.ts +234 -0
- package/Tone/source/oscillator/LFO.ts +332 -0
- package/Tone/source/oscillator/OmniOscillator.test.ts +303 -0
- package/Tone/source/oscillator/OmniOscillator.ts +428 -0
- package/Tone/source/oscillator/Oscillator.test.ts +278 -0
- package/Tone/source/oscillator/Oscillator.ts +448 -0
- package/Tone/source/oscillator/OscillatorInterface.ts +462 -0
- package/Tone/source/oscillator/PWMOscillator.test.ts +49 -0
- package/Tone/source/oscillator/PWMOscillator.ts +190 -0
- package/Tone/source/oscillator/PulseOscillator.test.ts +126 -0
- package/Tone/source/oscillator/PulseOscillator.ts +225 -0
- package/Tone/source/oscillator/ToneOscillatorNode.test.ts +241 -0
- package/Tone/source/oscillator/ToneOscillatorNode.ts +131 -0
- package/Tone/version.ts +1 -0
- package/build/Tone.js +22 -0
- package/build/Tone.js.map +1 -0
- package/build/esm/classes.d.ts +7 -0
- package/build/esm/classes.js +8 -0
- package/build/esm/classes.js.map +1 -0
- package/build/esm/component/analysis/Analyser.d.ts +77 -0
- package/build/esm/component/analysis/Analyser.js +121 -0
- package/build/esm/component/analysis/Analyser.js.map +1 -0
- package/build/esm/component/analysis/DCMeter.d.ts +23 -0
- package/build/esm/component/analysis/DCMeter.js +31 -0
- package/build/esm/component/analysis/DCMeter.js.map +1 -0
- package/build/esm/component/analysis/FFT.d.ts +50 -0
- package/build/esm/component/analysis/FFT.js +65 -0
- package/build/esm/component/analysis/FFT.js.map +1 -0
- package/build/esm/component/analysis/Follower.d.ts +44 -0
- package/build/esm/component/analysis/Follower.js +51 -0
- package/build/esm/component/analysis/Follower.js.map +1 -0
- package/build/esm/component/analysis/Meter.d.ts +62 -0
- package/build/esm/component/analysis/Meter.js +90 -0
- package/build/esm/component/analysis/Meter.js.map +1 -0
- package/build/esm/component/analysis/MeterBase.d.ts +23 -0
- package/build/esm/component/analysis/MeterBase.js +23 -0
- package/build/esm/component/analysis/MeterBase.js.map +1 -0
- package/build/esm/component/analysis/Waveform.d.ts +32 -0
- package/build/esm/component/analysis/Waveform.js +38 -0
- package/build/esm/component/analysis/Waveform.js.map +1 -0
- package/build/esm/component/channel/Channel.d.ts +91 -0
- package/build/esm/component/channel/Channel.js +124 -0
- package/build/esm/component/channel/Channel.js.map +1 -0
- package/build/esm/component/channel/CrossFade.d.ts +80 -0
- package/build/esm/component/channel/CrossFade.js +106 -0
- package/build/esm/component/channel/CrossFade.js.map +1 -0
- package/build/esm/component/channel/Merge.d.ts +39 -0
- package/build/esm/component/channel/Merge.js +32 -0
- package/build/esm/component/channel/Merge.js.map +1 -0
- package/build/esm/component/channel/MidSideMerge.d.ts +52 -0
- package/build/esm/component/channel/MidSideMerge.js +53 -0
- package/build/esm/component/channel/MidSideMerge.js.map +1 -0
- package/build/esm/component/channel/MidSideSplit.d.ts +42 -0
- package/build/esm/component/channel/MidSideSplit.js +51 -0
- package/build/esm/component/channel/MidSideSplit.js.map +1 -0
- package/build/esm/component/channel/Mono.d.ts +26 -0
- package/build/esm/component/channel/Mono.js +30 -0
- package/build/esm/component/channel/Mono.js.map +1 -0
- package/build/esm/component/channel/MultibandSplit.d.ts +80 -0
- package/build/esm/component/channel/MultibandSplit.js +121 -0
- package/build/esm/component/channel/MultibandSplit.js.map +1 -0
- package/build/esm/component/channel/PanVol.d.ts +53 -0
- package/build/esm/component/channel/PanVol.js +61 -0
- package/build/esm/component/channel/PanVol.js.map +1 -0
- package/build/esm/component/channel/Panner.d.ts +49 -0
- package/build/esm/component/channel/Panner.js +55 -0
- package/build/esm/component/channel/Panner.js.map +1 -0
- package/build/esm/component/channel/Panner3D.d.ts +98 -0
- package/build/esm/component/channel/Panner3D.js +177 -0
- package/build/esm/component/channel/Panner3D.js.map +1 -0
- package/build/esm/component/channel/Recorder.d.ts +77 -0
- package/build/esm/component/channel/Recorder.js +131 -0
- package/build/esm/component/channel/Recorder.js.map +1 -0
- package/build/esm/component/channel/Solo.d.ts +68 -0
- package/build/esm/component/channel/Solo.js +121 -0
- package/build/esm/component/channel/Solo.js.map +1 -0
- package/build/esm/component/channel/Split.d.ts +29 -0
- package/build/esm/component/channel/Split.js +30 -0
- package/build/esm/component/channel/Split.js.map +1 -0
- package/build/esm/component/channel/Volume.d.ts +60 -0
- package/build/esm/component/channel/Volume.js +66 -0
- package/build/esm/component/channel/Volume.js.map +1 -0
- package/build/esm/component/dynamics/Compressor.d.ts +73 -0
- package/build/esm/component/dynamics/Compressor.js +99 -0
- package/build/esm/component/dynamics/Compressor.js.map +1 -0
- package/build/esm/component/dynamics/Gate.d.ts +53 -0
- package/build/esm/component/dynamics/Gate.js +72 -0
- package/build/esm/component/dynamics/Gate.js.map +1 -0
- package/build/esm/component/dynamics/Limiter.d.ts +39 -0
- package/build/esm/component/dynamics/Limiter.js +51 -0
- package/build/esm/component/dynamics/Limiter.js.map +1 -0
- package/build/esm/component/dynamics/MidSideCompressor.d.ts +36 -0
- package/build/esm/component/dynamics/MidSideCompressor.js +52 -0
- package/build/esm/component/dynamics/MidSideCompressor.js.map +1 -0
- package/build/esm/component/dynamics/MultibandCompressor.d.ts +57 -0
- package/build/esm/component/dynamics/MultibandCompressor.js +79 -0
- package/build/esm/component/dynamics/MultibandCompressor.js.map +1 -0
- package/build/esm/component/envelope/AmplitudeEnvelope.d.ts +46 -0
- package/build/esm/component/envelope/AmplitudeEnvelope.js +49 -0
- package/build/esm/component/envelope/AmplitudeEnvelope.js.map +1 -0
- package/build/esm/component/envelope/Envelope.d.ts +302 -0
- package/build/esm/component/envelope/Envelope.js +470 -0
- package/build/esm/component/envelope/Envelope.js.map +1 -0
- package/build/esm/component/envelope/FrequencyEnvelope.d.ts +71 -0
- package/build/esm/component/envelope/FrequencyEnvelope.js +91 -0
- package/build/esm/component/envelope/FrequencyEnvelope.js.map +1 -0
- package/build/esm/component/filter/BiquadFilter.d.ts +64 -0
- package/build/esm/component/filter/BiquadFilter.js +101 -0
- package/build/esm/component/filter/BiquadFilter.js.map +1 -0
- package/build/esm/component/filter/Convolver.d.ts +59 -0
- package/build/esm/component/filter/Convolver.js +104 -0
- package/build/esm/component/filter/Convolver.js.map +1 -0
- package/build/esm/component/filter/EQ3.d.ts +77 -0
- package/build/esm/component/filter/EQ3.js +81 -0
- package/build/esm/component/filter/EQ3.js.map +1 -0
- package/build/esm/component/filter/FeedbackCombFilter.d.ts +45 -0
- package/build/esm/component/filter/FeedbackCombFilter.js +72 -0
- package/build/esm/component/filter/FeedbackCombFilter.js.map +1 -0
- package/build/esm/component/filter/FeedbackCombFilter.worklet.d.ts +3 -0
- package/build/esm/component/filter/FeedbackCombFilter.worklet.js +37 -0
- package/build/esm/component/filter/FeedbackCombFilter.worklet.js.map +1 -0
- package/build/esm/component/filter/Filter.d.ts +79 -0
- package/build/esm/component/filter/Filter.js +150 -0
- package/build/esm/component/filter/Filter.js.map +1 -0
- package/build/esm/component/filter/LowpassCombFilter.d.ts +50 -0
- package/build/esm/component/filter/LowpassCombFilter.js +53 -0
- package/build/esm/component/filter/LowpassCombFilter.js.map +1 -0
- package/build/esm/component/filter/OnePoleFilter.d.ts +64 -0
- package/build/esm/component/filter/OnePoleFilter.js +104 -0
- package/build/esm/component/filter/OnePoleFilter.js.map +1 -0
- package/build/esm/component/filter/PhaseShiftAllpass.d.ts +40 -0
- package/build/esm/component/filter/PhaseShiftAllpass.js +54 -0
- package/build/esm/component/filter/PhaseShiftAllpass.js.map +1 -0
- package/build/esm/component/index.d.ts +35 -0
- package/build/esm/component/index.js +36 -0
- package/build/esm/component/index.js.map +1 -0
- package/build/esm/core/Global.d.ts +26 -0
- package/build/esm/core/Global.js +69 -0
- package/build/esm/core/Global.js.map +1 -0
- package/build/esm/core/Tone.d.ts +60 -0
- package/build/esm/core/Tone.js +87 -0
- package/build/esm/core/Tone.js.map +1 -0
- package/build/esm/core/clock/Clock.d.ts +156 -0
- package/build/esm/core/clock/Clock.js +251 -0
- package/build/esm/core/clock/Clock.js.map +1 -0
- package/build/esm/core/clock/TickParam.d.ts +97 -0
- package/build/esm/core/clock/TickParam.js +237 -0
- package/build/esm/core/clock/TickParam.js.map +1 -0
- package/build/esm/core/clock/TickSignal.d.ts +43 -0
- package/build/esm/core/clock/TickSignal.js +64 -0
- package/build/esm/core/clock/TickSignal.js.map +1 -0
- package/build/esm/core/clock/TickSource.d.ts +115 -0
- package/build/esm/core/clock/TickSource.js +284 -0
- package/build/esm/core/clock/TickSource.js.map +1 -0
- package/build/esm/core/clock/Ticker.d.ts +59 -0
- package/build/esm/core/clock/Ticker.js +110 -0
- package/build/esm/core/clock/Ticker.js.map +1 -0
- package/build/esm/core/clock/Transport.d.ts +331 -0
- package/build/esm/core/clock/Transport.js +591 -0
- package/build/esm/core/clock/Transport.js.map +1 -0
- package/build/esm/core/clock/TransportEvent.d.ts +62 -0
- package/build/esm/core/clock/TransportEvent.js +66 -0
- package/build/esm/core/clock/TransportEvent.js.map +1 -0
- package/build/esm/core/clock/TransportRepeatEvent.d.ts +70 -0
- package/build/esm/core/clock/TransportRepeatEvent.js +110 -0
- package/build/esm/core/clock/TransportRepeatEvent.js.map +1 -0
- package/build/esm/core/context/AbstractParam.d.ts +239 -0
- package/build/esm/core/context/AbstractParam.js +6 -0
- package/build/esm/core/context/AbstractParam.js.map +1 -0
- package/build/esm/core/context/AudioContext.d.ts +36 -0
- package/build/esm/core/context/AudioContext.js +38 -0
- package/build/esm/core/context/AudioContext.js.map +1 -0
- package/build/esm/core/context/BaseContext.d.ts +56 -0
- package/build/esm/core/context/BaseContext.js +16 -0
- package/build/esm/core/context/BaseContext.js.map +1 -0
- package/build/esm/core/context/Context.d.ts +255 -0
- package/build/esm/core/context/Context.js +474 -0
- package/build/esm/core/context/Context.js.map +1 -0
- package/build/esm/core/context/ContextInitialization.d.ts +15 -0
- package/build/esm/core/context/ContextInitialization.js +35 -0
- package/build/esm/core/context/ContextInitialization.js.map +1 -0
- package/build/esm/core/context/Delay.d.ts +58 -0
- package/build/esm/core/context/Delay.js +58 -0
- package/build/esm/core/context/Delay.js.map +1 -0
- package/build/esm/core/context/Destination.d.ts +73 -0
- package/build/esm/core/context/Destination.js +105 -0
- package/build/esm/core/context/Destination.js.map +1 -0
- package/build/esm/core/context/DummyContext.d.ts +54 -0
- package/build/esm/core/context/DummyContext.js +138 -0
- package/build/esm/core/context/DummyContext.js.map +1 -0
- package/build/esm/core/context/Gain.d.ts +53 -0
- package/build/esm/core/context/Gain.js +58 -0
- package/build/esm/core/context/Gain.js.map +1 -0
- package/build/esm/core/context/Listener.d.ts +38 -0
- package/build/esm/core/context/Listener.js +87 -0
- package/build/esm/core/context/Listener.js.map +1 -0
- package/build/esm/core/context/Offline.d.ts +37 -0
- package/build/esm/core/context/Offline.js +56 -0
- package/build/esm/core/context/Offline.js.map +1 -0
- package/build/esm/core/context/OfflineContext.d.ts +58 -0
- package/build/esm/core/context/OfflineContext.js +87 -0
- package/build/esm/core/context/OfflineContext.js.map +1 -0
- package/build/esm/core/context/Param.d.ts +132 -0
- package/build/esm/core/context/Param.js +446 -0
- package/build/esm/core/context/Param.js.map +1 -0
- package/build/esm/core/context/ToneAudioBuffer.d.ts +162 -0
- package/build/esm/core/context/ToneAudioBuffer.js +364 -0
- package/build/esm/core/context/ToneAudioBuffer.js.map +1 -0
- package/build/esm/core/context/ToneAudioBuffers.d.ts +89 -0
- package/build/esm/core/context/ToneAudioBuffers.js +119 -0
- package/build/esm/core/context/ToneAudioBuffers.js.map +1 -0
- package/build/esm/core/context/ToneAudioNode.d.ts +173 -0
- package/build/esm/core/context/ToneAudioNode.js +342 -0
- package/build/esm/core/context/ToneAudioNode.js.map +1 -0
- package/build/esm/core/context/ToneWithContext.d.ts +108 -0
- package/build/esm/core/context/ToneWithContext.js +170 -0
- package/build/esm/core/context/ToneWithContext.js.map +1 -0
- package/build/esm/core/index.d.ts +28 -0
- package/build/esm/core/index.js +33 -0
- package/build/esm/core/index.js.map +1 -0
- package/build/esm/core/type/Conversions.d.ts +44 -0
- package/build/esm/core/type/Conversions.js +68 -0
- package/build/esm/core/type/Conversions.js.map +1 -0
- package/build/esm/core/type/Frequency.d.ts +101 -0
- package/build/esm/core/type/Frequency.js +225 -0
- package/build/esm/core/type/Frequency.js.map +1 -0
- package/build/esm/core/type/Midi.d.ts +53 -0
- package/build/esm/core/type/Midi.js +73 -0
- package/build/esm/core/type/Midi.js.map +1 -0
- package/build/esm/core/type/NoteUnits.d.ts +12 -0
- package/build/esm/core/type/NoteUnits.js +3 -0
- package/build/esm/core/type/NoteUnits.js.map +1 -0
- package/build/esm/core/type/Ticks.d.ts +44 -0
- package/build/esm/core/type/Ticks.js +61 -0
- package/build/esm/core/type/Ticks.js.map +1 -0
- package/build/esm/core/type/Time.d.ts +69 -0
- package/build/esm/core/type/Time.js +147 -0
- package/build/esm/core/type/Time.js.map +1 -0
- package/build/esm/core/type/TimeBase.d.ts +120 -0
- package/build/esm/core/type/TimeBase.js +251 -0
- package/build/esm/core/type/TimeBase.js.map +1 -0
- package/build/esm/core/type/TransportTime.d.ts +25 -0
- package/build/esm/core/type/TransportTime.js +32 -0
- package/build/esm/core/type/TransportTime.js.map +1 -0
- package/build/esm/core/type/Units.d.ts +176 -0
- package/build/esm/core/type/Units.js +2 -0
- package/build/esm/core/type/Units.js.map +1 -0
- package/build/esm/core/util/AdvancedTypeCheck.d.ts +21 -0
- package/build/esm/core/util/AdvancedTypeCheck.js +32 -0
- package/build/esm/core/util/AdvancedTypeCheck.js.map +1 -0
- package/build/esm/core/util/Debug.d.ts +34 -0
- package/build/esm/core/util/Debug.js +50 -0
- package/build/esm/core/util/Debug.js.map +1 -0
- package/build/esm/core/util/Decorator.d.ts +9 -0
- package/build/esm/core/util/Decorator.js +41 -0
- package/build/esm/core/util/Decorator.js.map +1 -0
- package/build/esm/core/util/Defaults.d.ts +32 -0
- package/build/esm/core/util/Defaults.js +99 -0
- package/build/esm/core/util/Defaults.js.map +1 -0
- package/build/esm/core/util/Draw.d.ts +67 -0
- package/build/esm/core/util/Draw.js +110 -0
- package/build/esm/core/util/Draw.js.map +1 -0
- package/build/esm/core/util/Emitter.d.ts +52 -0
- package/build/esm/core/util/Emitter.js +113 -0
- package/build/esm/core/util/Emitter.js.map +1 -0
- package/build/esm/core/util/Interface.d.ts +16 -0
- package/build/esm/core/util/Interface.js +32 -0
- package/build/esm/core/util/Interface.js.map +1 -0
- package/build/esm/core/util/IntervalTimeline.d.ts +106 -0
- package/build/esm/core/util/IntervalTimeline.js +539 -0
- package/build/esm/core/util/IntervalTimeline.js.map +1 -0
- package/build/esm/core/util/Math.d.ts +20 -0
- package/build/esm/core/util/Math.js +36 -0
- package/build/esm/core/util/Math.js.map +1 -0
- package/build/esm/core/util/StateTimeline.d.ts +47 -0
- package/build/esm/core/util/StateTimeline.js +78 -0
- package/build/esm/core/util/StateTimeline.js.map +1 -0
- package/build/esm/core/util/Timeline.d.ts +156 -0
- package/build/esm/core/util/Timeline.js +351 -0
- package/build/esm/core/util/Timeline.js.map +1 -0
- package/build/esm/core/util/TimelineValue.d.ts +28 -0
- package/build/esm/core/util/TimelineValue.js +41 -0
- package/build/esm/core/util/TimelineValue.js.map +1 -0
- package/build/esm/core/util/TypeCheck.d.ts +38 -0
- package/build/esm/core/util/TypeCheck.js +56 -0
- package/build/esm/core/util/TypeCheck.js.map +1 -0
- package/build/esm/core/worklet/DelayLine.worklet.d.ts +1 -0
- package/build/esm/core/worklet/DelayLine.worklet.js +48 -0
- package/build/esm/core/worklet/DelayLine.worklet.js.map +1 -0
- package/build/esm/core/worklet/SingleIOProcessor.worklet.d.ts +2 -0
- package/build/esm/core/worklet/SingleIOProcessor.worklet.js +72 -0
- package/build/esm/core/worklet/SingleIOProcessor.worklet.js.map +1 -0
- package/build/esm/core/worklet/ToneAudioWorklet.d.ts +35 -0
- package/build/esm/core/worklet/ToneAudioWorklet.js +40 -0
- package/build/esm/core/worklet/ToneAudioWorklet.js.map +1 -0
- package/build/esm/core/worklet/ToneAudioWorkletProcessor.worklet.d.ts +1 -0
- package/build/esm/core/worklet/ToneAudioWorkletProcessor.worklet.js +34 -0
- package/build/esm/core/worklet/ToneAudioWorkletProcessor.worklet.js.map +1 -0
- package/build/esm/core/worklet/WorkletGlobalScope.d.ts +12 -0
- package/build/esm/core/worklet/WorkletGlobalScope.js +24 -0
- package/build/esm/core/worklet/WorkletGlobalScope.js.map +1 -0
- package/build/esm/effect/AutoFilter.d.ts +51 -0
- package/build/esm/effect/AutoFilter.js +68 -0
- package/build/esm/effect/AutoFilter.js.map +1 -0
- package/build/esm/effect/AutoPanner.d.ts +31 -0
- package/build/esm/effect/AutoPanner.js +41 -0
- package/build/esm/effect/AutoPanner.js.map +1 -0
- package/build/esm/effect/AutoWah.d.ts +99 -0
- package/build/esm/effect/AutoWah.js +131 -0
- package/build/esm/effect/AutoWah.js.map +1 -0
- package/build/esm/effect/BitCrusher.d.ts +40 -0
- package/build/esm/effect/BitCrusher.js +85 -0
- package/build/esm/effect/BitCrusher.js.map +1 -0
- package/build/esm/effect/BitCrusher.worklet.d.ts +3 -0
- package/build/esm/effect/BitCrusher.worklet.js +25 -0
- package/build/esm/effect/BitCrusher.worklet.js.map +1 -0
- package/build/esm/effect/Chebyshev.d.ts +62 -0
- package/build/esm/effect/Chebyshev.js +95 -0
- package/build/esm/effect/Chebyshev.js.map +1 -0
- package/build/esm/effect/Chorus.d.ts +104 -0
- package/build/esm/effect/Chorus.js +157 -0
- package/build/esm/effect/Chorus.js.map +1 -0
- package/build/esm/effect/Distortion.d.ts +43 -0
- package/build/esm/effect/Distortion.js +69 -0
- package/build/esm/effect/Distortion.js.map +1 -0
- package/build/esm/effect/Effect.d.ts +49 -0
- package/build/esm/effect/Effect.js +70 -0
- package/build/esm/effect/Effect.js.map +1 -0
- package/build/esm/effect/FeedbackDelay.d.ts +37 -0
- package/build/esm/effect/FeedbackDelay.js +47 -0
- package/build/esm/effect/FeedbackDelay.js.map +1 -0
- package/build/esm/effect/FeedbackEffect.d.ts +34 -0
- package/build/esm/effect/FeedbackEffect.js +34 -0
- package/build/esm/effect/FeedbackEffect.js.map +1 -0
- package/build/esm/effect/Freeverb.d.ts +51 -0
- package/build/esm/effect/Freeverb.js +104 -0
- package/build/esm/effect/Freeverb.js.map +1 -0
- package/build/esm/effect/FrequencyShifter.d.ts +68 -0
- package/build/esm/effect/FrequencyShifter.js +88 -0
- package/build/esm/effect/FrequencyShifter.js.map +1 -0
- package/build/esm/effect/JCReverb.d.ts +46 -0
- package/build/esm/effect/JCReverb.js +97 -0
- package/build/esm/effect/JCReverb.js.map +1 -0
- package/build/esm/effect/LFOEffect.d.ts +58 -0
- package/build/esm/effect/LFOEffect.js +77 -0
- package/build/esm/effect/LFOEffect.js.map +1 -0
- package/build/esm/effect/MidSideEffect.d.ts +50 -0
- package/build/esm/effect/MidSideEffect.js +51 -0
- package/build/esm/effect/MidSideEffect.js.map +1 -0
- package/build/esm/effect/Phaser.d.ts +80 -0
- package/build/esm/effect/Phaser.js +119 -0
- package/build/esm/effect/Phaser.js.map +1 -0
- package/build/esm/effect/PingPongDelay.d.ts +48 -0
- package/build/esm/effect/PingPongDelay.js +66 -0
- package/build/esm/effect/PingPongDelay.js.map +1 -0
- package/build/esm/effect/PitchShift.d.ts +89 -0
- package/build/esm/effect/PitchShift.js +140 -0
- package/build/esm/effect/PitchShift.js.map +1 -0
- package/build/esm/effect/Reverb.d.ts +62 -0
- package/build/esm/effect/Reverb.js +111 -0
- package/build/esm/effect/Reverb.js.map +1 -0
- package/build/esm/effect/StereoEffect.d.ts +44 -0
- package/build/esm/effect/StereoEffect.js +61 -0
- package/build/esm/effect/StereoEffect.js.map +1 -0
- package/build/esm/effect/StereoFeedbackEffect.d.ts +39 -0
- package/build/esm/effect/StereoFeedbackEffect.js +49 -0
- package/build/esm/effect/StereoFeedbackEffect.js.map +1 -0
- package/build/esm/effect/StereoWidener.d.ts +50 -0
- package/build/esm/effect/StereoWidener.js +65 -0
- package/build/esm/effect/StereoWidener.js.map +1 -0
- package/build/esm/effect/StereoXFeedbackEffect.d.ts +21 -0
- package/build/esm/effect/StereoXFeedbackEffect.js +28 -0
- package/build/esm/effect/StereoXFeedbackEffect.js.map +1 -0
- package/build/esm/effect/Tremolo.d.ts +86 -0
- package/build/esm/effect/Tremolo.js +131 -0
- package/build/esm/effect/Tremolo.js.map +1 -0
- package/build/esm/effect/Vibrato.d.ts +48 -0
- package/build/esm/effect/Vibrato.js +61 -0
- package/build/esm/effect/Vibrato.js.map +1 -0
- package/build/esm/effect/index.d.ts +18 -0
- package/build/esm/effect/index.js +19 -0
- package/build/esm/effect/index.js.map +1 -0
- package/build/esm/event/Loop.d.ts +107 -0
- package/build/esm/event/Loop.js +164 -0
- package/build/esm/event/Loop.js.map +1 -0
- package/build/esm/event/Part.d.ts +193 -0
- package/build/esm/event/Part.js +401 -0
- package/build/esm/event/Part.js.map +1 -0
- package/build/esm/event/Pattern.d.ts +67 -0
- package/build/esm/event/Pattern.js +67 -0
- package/build/esm/event/Pattern.js.map +1 -0
- package/build/esm/event/PatternGenerator.d.ts +12 -0
- package/build/esm/event/PatternGenerator.js +165 -0
- package/build/esm/event/PatternGenerator.js.map +1 -0
- package/build/esm/event/Sequence.d.ts +127 -0
- package/build/esm/event/Sequence.js +247 -0
- package/build/esm/event/Sequence.js.map +1 -0
- package/build/esm/event/ToneEvent.d.ts +188 -0
- package/build/esm/event/ToneEvent.js +299 -0
- package/build/esm/event/ToneEvent.js.map +1 -0
- package/build/esm/event/index.d.ts +5 -0
- package/build/esm/event/index.js +6 -0
- package/build/esm/event/index.js.map +1 -0
- package/build/esm/fromContext.d.ts +26 -0
- package/build/esm/fromContext.js +41 -0
- package/build/esm/fromContext.js.map +1 -0
- package/build/esm/index.d.ts +86 -0
- package/build/esm/index.js +102 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/instrument/AMSynth.d.ts +25 -0
- package/build/esm/instrument/AMSynth.js +37 -0
- package/build/esm/instrument/AMSynth.js.map +1 -0
- package/build/esm/instrument/DuoSynth.d.ts +72 -0
- package/build/esm/instrument/DuoSynth.js +140 -0
- package/build/esm/instrument/DuoSynth.js.map +1 -0
- package/build/esm/instrument/FMSynth.d.ts +31 -0
- package/build/esm/instrument/FMSynth.js +45 -0
- package/build/esm/instrument/FMSynth.js.map +1 -0
- package/build/esm/instrument/Instrument.d.ts +100 -0
- package/build/esm/instrument/Instrument.js +127 -0
- package/build/esm/instrument/Instrument.js.map +1 -0
- package/build/esm/instrument/MembraneSynth.d.ts +47 -0
- package/build/esm/instrument/MembraneSynth.js +69 -0
- package/build/esm/instrument/MembraneSynth.js.map +1 -0
- package/build/esm/instrument/MetalSynth.d.ts +109 -0
- package/build/esm/instrument/MetalSynth.js +198 -0
- package/build/esm/instrument/MetalSynth.js.map +1 -0
- package/build/esm/instrument/ModulationSynth.d.ts +81 -0
- package/build/esm/instrument/ModulationSynth.js +122 -0
- package/build/esm/instrument/ModulationSynth.js.map +1 -0
- package/build/esm/instrument/MonoSynth.d.ts +76 -0
- package/build/esm/instrument/MonoSynth.js +113 -0
- package/build/esm/instrument/MonoSynth.js.map +1 -0
- package/build/esm/instrument/Monophonic.d.ts +82 -0
- package/build/esm/instrument/Monophonic.js +83 -0
- package/build/esm/instrument/Monophonic.js.map +1 -0
- package/build/esm/instrument/NoiseSynth.d.ts +51 -0
- package/build/esm/instrument/NoiseSynth.js +93 -0
- package/build/esm/instrument/NoiseSynth.js.map +1 -0
- package/build/esm/instrument/PluckSynth.d.ts +57 -0
- package/build/esm/instrument/PluckSynth.js +80 -0
- package/build/esm/instrument/PluckSynth.js.map +1 -0
- package/build/esm/instrument/PolySynth.d.ts +176 -0
- package/build/esm/instrument/PolySynth.js +302 -0
- package/build/esm/instrument/PolySynth.js.map +1 -0
- package/build/esm/instrument/Sampler.d.ts +126 -0
- package/build/esm/instrument/Sampler.js +259 -0
- package/build/esm/instrument/Sampler.js.map +1 -0
- package/build/esm/instrument/Synth.d.ts +65 -0
- package/build/esm/instrument/Synth.js +91 -0
- package/build/esm/instrument/Synth.js.map +1 -0
- package/build/esm/instrument/index.d.ts +11 -0
- package/build/esm/instrument/index.js +12 -0
- package/build/esm/instrument/index.js.map +1 -0
- package/build/esm/signal/Abs.d.ts +34 -0
- package/build/esm/signal/Abs.js +51 -0
- package/build/esm/signal/Abs.js.map +1 -0
- package/build/esm/signal/Add.d.ts +40 -0
- package/build/esm/signal/Add.js +49 -0
- package/build/esm/signal/Add.js.map +1 -0
- package/build/esm/signal/AudioToGain.d.ts +27 -0
- package/build/esm/signal/AudioToGain.js +37 -0
- package/build/esm/signal/AudioToGain.js.map +1 -0
- package/build/esm/signal/GainToAudio.d.ts +27 -0
- package/build/esm/signal/GainToAudio.js +37 -0
- package/build/esm/signal/GainToAudio.js.map +1 -0
- package/build/esm/signal/GreaterThan.d.ts +47 -0
- package/build/esm/signal/GreaterThan.js +46 -0
- package/build/esm/signal/GreaterThan.js.map +1 -0
- package/build/esm/signal/GreaterThanZero.d.ts +29 -0
- package/build/esm/signal/GreaterThanZero.js +45 -0
- package/build/esm/signal/GreaterThanZero.js.map +1 -0
- package/build/esm/signal/Multiply.d.ts +52 -0
- package/build/esm/signal/Multiply.js +51 -0
- package/build/esm/signal/Multiply.js.map +1 -0
- package/build/esm/signal/Negate.d.ts +29 -0
- package/build/esm/signal/Negate.js +39 -0
- package/build/esm/signal/Negate.js.map +1 -0
- package/build/esm/signal/Pow.d.ts +42 -0
- package/build/esm/signal/Pow.js +58 -0
- package/build/esm/signal/Pow.js.map +1 -0
- package/build/esm/signal/Scale.d.ts +62 -0
- package/build/esm/signal/Scale.js +73 -0
- package/build/esm/signal/Scale.js.map +1 -0
- package/build/esm/signal/ScaleExp.d.ts +37 -0
- package/build/esm/signal/ScaleExp.js +46 -0
- package/build/esm/signal/ScaleExp.js.map +1 -0
- package/build/esm/signal/Signal.d.ts +92 -0
- package/build/esm/signal/Signal.js +183 -0
- package/build/esm/signal/Signal.js.map +1 -0
- package/build/esm/signal/SignalOperator.d.ts +9 -0
- package/build/esm/signal/SignalOperator.js +16 -0
- package/build/esm/signal/SignalOperator.js.map +1 -0
- package/build/esm/signal/Subtract.d.ts +48 -0
- package/build/esm/signal/Subtract.js +58 -0
- package/build/esm/signal/Subtract.js.map +1 -0
- package/build/esm/signal/SyncedSignal.d.ts +53 -0
- package/build/esm/signal/SyncedSignal.js +124 -0
- package/build/esm/signal/SyncedSignal.js.map +1 -0
- package/build/esm/signal/ToneConstantSource.d.ts +39 -0
- package/build/esm/signal/ToneConstantSource.js +61 -0
- package/build/esm/signal/ToneConstantSource.js.map +1 -0
- package/build/esm/signal/WaveShaper.d.ts +81 -0
- package/build/esm/signal/WaveShaper.js +99 -0
- package/build/esm/signal/WaveShaper.js.map +1 -0
- package/build/esm/signal/Zero.d.ts +29 -0
- package/build/esm/signal/Zero.js +38 -0
- package/build/esm/signal/Zero.js.map +1 -0
- package/build/esm/signal/index.d.ts +16 -0
- package/build/esm/signal/index.js +17 -0
- package/build/esm/signal/index.js.map +1 -0
- package/build/esm/source/Noise.d.ts +96 -0
- package/build/esm/source/Noise.js +225 -0
- package/build/esm/source/Noise.js.map +1 -0
- package/build/esm/source/OneShotSource.d.ts +102 -0
- package/build/esm/source/OneShotSource.js +183 -0
- package/build/esm/source/OneShotSource.js.map +1 -0
- package/build/esm/source/Source.d.ts +155 -0
- package/build/esm/source/Source.js +281 -0
- package/build/esm/source/Source.js.map +1 -0
- package/build/esm/source/UserMedia.d.ts +123 -0
- package/build/esm/source/UserMedia.js +214 -0
- package/build/esm/source/UserMedia.js.map +1 -0
- package/build/esm/source/buffer/GrainPlayer.d.ts +135 -0
- package/build/esm/source/buffer/GrainPlayer.js +235 -0
- package/build/esm/source/buffer/GrainPlayer.js.map +1 -0
- package/build/esm/source/buffer/Player.d.ts +190 -0
- package/build/esm/source/buffer/Player.js +352 -0
- package/build/esm/source/buffer/Player.js.map +1 -0
- package/build/esm/source/buffer/Players.d.ts +121 -0
- package/build/esm/source/buffer/Players.js +162 -0
- package/build/esm/source/buffer/Players.js.map +1 -0
- package/build/esm/source/buffer/ToneBufferSource.d.ts +97 -0
- package/build/esm/source/buffer/ToneBufferSource.js +196 -0
- package/build/esm/source/buffer/ToneBufferSource.js.map +1 -0
- package/build/esm/source/index.d.ts +15 -0
- package/build/esm/source/index.js +16 -0
- package/build/esm/source/index.js.map +1 -0
- package/build/esm/source/oscillator/AMOscillator.d.ts +101 -0
- package/build/esm/source/oscillator/AMOscillator.js +157 -0
- package/build/esm/source/oscillator/AMOscillator.js.map +1 -0
- package/build/esm/source/oscillator/FMOscillator.d.ts +101 -0
- package/build/esm/source/oscillator/FMOscillator.js +172 -0
- package/build/esm/source/oscillator/FMOscillator.js.map +1 -0
- package/build/esm/source/oscillator/FatOscillator.d.ts +99 -0
- package/build/esm/source/oscillator/FatOscillator.js +195 -0
- package/build/esm/source/oscillator/FatOscillator.js.map +1 -0
- package/build/esm/source/oscillator/LFO.d.ts +167 -0
- package/build/esm/source/oscillator/LFO.js +233 -0
- package/build/esm/source/oscillator/LFO.js.map +1 -0
- package/build/esm/source/oscillator/OmniOscillator.d.ts +162 -0
- package/build/esm/source/oscillator/OmniOscillator.js +348 -0
- package/build/esm/source/oscillator/OmniOscillator.js.map +1 -0
- package/build/esm/source/oscillator/Oscillator.d.ts +125 -0
- package/build/esm/source/oscillator/Oscillator.js +379 -0
- package/build/esm/source/oscillator/Oscillator.js.map +1 -0
- package/build/esm/source/oscillator/OscillatorInterface.d.ts +298 -0
- package/build/esm/source/oscillator/OscillatorInterface.js +22 -0
- package/build/esm/source/oscillator/OscillatorInterface.js.map +1 -0
- package/build/esm/source/oscillator/PWMOscillator.d.ts +94 -0
- package/build/esm/source/oscillator/PWMOscillator.js +136 -0
- package/build/esm/source/oscillator/PWMOscillator.js.map +1 -0
- package/build/esm/source/oscillator/PulseOscillator.d.ts +119 -0
- package/build/esm/source/oscillator/PulseOscillator.js +175 -0
- package/build/esm/source/oscillator/PulseOscillator.js.map +1 -0
- package/build/esm/source/oscillator/ToneOscillatorNode.d.ts +57 -0
- package/build/esm/source/oscillator/ToneOscillatorNode.js +90 -0
- package/build/esm/source/oscillator/ToneOscillatorNode.js.map +1 -0
- package/build/esm/version.d.ts +1 -0
- package/build/esm/version.js +2 -0
- package/build/esm/version.js.map +1 -0
- package/docs/tone.json +1 -0
- package/package.json +116 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
import { ToneWithContext, ToneWithContextOptions } from "../context/ToneWithContext";
|
|
2
|
+
import { Frequency, Hertz, Seconds, Ticks, Time } from "../type/Units";
|
|
3
|
+
import { optionsFromArguments } from "../util/Defaults";
|
|
4
|
+
import { Emitter } from "../util/Emitter";
|
|
5
|
+
import { noOp, readOnly } from "../util/Interface";
|
|
6
|
+
import { PlaybackState, StateTimeline } from "../util/StateTimeline";
|
|
7
|
+
import { TickSignal } from "./TickSignal";
|
|
8
|
+
import { TickSource } from "./TickSource";
|
|
9
|
+
import { assertContextRunning } from "../util/Debug";
|
|
10
|
+
|
|
11
|
+
type ClockCallback = (time: Seconds, ticks?: Ticks) => void;
|
|
12
|
+
|
|
13
|
+
interface ClockOptions extends ToneWithContextOptions {
|
|
14
|
+
frequency: Hertz;
|
|
15
|
+
callback: ClockCallback;
|
|
16
|
+
units: "hertz" | "bpm";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
type ClockEvent = "start" | "stop" | "pause";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* A sample accurate clock which provides a callback at the given rate.
|
|
23
|
+
* While the callback is not sample-accurate (it is still susceptible to
|
|
24
|
+
* loose JS timing), the time passed in as the argument to the callback
|
|
25
|
+
* is precise. For most applications, it is better to use Tone.Transport
|
|
26
|
+
* instead of the Clock by itself since you can synchronize multiple callbacks.
|
|
27
|
+
* @example
|
|
28
|
+
* // the callback will be invoked approximately once a second
|
|
29
|
+
* // and will print the time exactly once a second apart.
|
|
30
|
+
* const clock = new Tone.Clock(time => {
|
|
31
|
+
* console.log(time);
|
|
32
|
+
* }, 1);
|
|
33
|
+
* clock.start();
|
|
34
|
+
* @category Core
|
|
35
|
+
*/
|
|
36
|
+
export class Clock<TypeName extends "bpm" | "hertz" = "hertz">
|
|
37
|
+
extends ToneWithContext<ClockOptions> implements Emitter<ClockEvent> {
|
|
38
|
+
|
|
39
|
+
readonly name: string = "Clock";
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The callback function to invoke at the scheduled tick.
|
|
43
|
+
*/
|
|
44
|
+
callback: ClockCallback = noOp;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The tick counter
|
|
48
|
+
*/
|
|
49
|
+
private _tickSource: TickSource<TypeName>;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* The last time the loop callback was invoked
|
|
53
|
+
*/
|
|
54
|
+
private _lastUpdate = 0;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Keep track of the playback state
|
|
58
|
+
*/
|
|
59
|
+
private _state: StateTimeline = new StateTimeline("stopped");
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Context bound reference to the _loop method
|
|
63
|
+
* This is necessary to remove the event in the end.
|
|
64
|
+
*/
|
|
65
|
+
private _boundLoop: () => void = this._loop.bind(this);
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The rate the callback function should be invoked.
|
|
69
|
+
*/
|
|
70
|
+
frequency: TickSignal<TypeName>;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @param callback The callback to be invoked with the time of the audio event
|
|
74
|
+
* @param frequency The rate of the callback
|
|
75
|
+
*/
|
|
76
|
+
constructor(callback?: ClockCallback, frequency?: Frequency);
|
|
77
|
+
constructor(options: Partial<ClockOptions>);
|
|
78
|
+
constructor() {
|
|
79
|
+
|
|
80
|
+
super(optionsFromArguments(Clock.getDefaults(), arguments, ["callback", "frequency"]));
|
|
81
|
+
const options = optionsFromArguments(Clock.getDefaults(), arguments, ["callback", "frequency"]);
|
|
82
|
+
|
|
83
|
+
this.callback = options.callback;
|
|
84
|
+
this._tickSource = new TickSource({
|
|
85
|
+
context: this.context,
|
|
86
|
+
frequency: options.frequency,
|
|
87
|
+
units: options.units,
|
|
88
|
+
});
|
|
89
|
+
this._lastUpdate = 0;
|
|
90
|
+
this.frequency = this._tickSource.frequency;
|
|
91
|
+
readOnly(this, "frequency");
|
|
92
|
+
|
|
93
|
+
// add an initial state
|
|
94
|
+
this._state.setStateAtTime("stopped", 0);
|
|
95
|
+
|
|
96
|
+
// bind a callback to the worker thread
|
|
97
|
+
this.context.on("tick", this._boundLoop);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
static getDefaults(): ClockOptions {
|
|
101
|
+
return Object.assign(ToneWithContext.getDefaults(), {
|
|
102
|
+
callback: noOp as ClockCallback,
|
|
103
|
+
frequency: 1,
|
|
104
|
+
units: "hertz",
|
|
105
|
+
}) as ClockOptions;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Returns the playback state of the source, either "started", "stopped" or "paused".
|
|
110
|
+
*/
|
|
111
|
+
get state(): PlaybackState {
|
|
112
|
+
return this._state.getValueAtTime(this.now());
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Start the clock at the given time. Optionally pass in an offset
|
|
117
|
+
* of where to start the tick counter from.
|
|
118
|
+
* @param time The time the clock should start
|
|
119
|
+
* @param offset Where the tick counter starts counting from.
|
|
120
|
+
*/
|
|
121
|
+
start(time?: Time, offset?: Ticks): this {
|
|
122
|
+
// make sure the context is running
|
|
123
|
+
assertContextRunning(this.context);
|
|
124
|
+
// start the loop
|
|
125
|
+
const computedTime = this.toSeconds(time);
|
|
126
|
+
this.log("start", computedTime);
|
|
127
|
+
if (this._state.getValueAtTime(computedTime) !== "started") {
|
|
128
|
+
this._state.setStateAtTime("started", computedTime);
|
|
129
|
+
this._tickSource.start(computedTime, offset);
|
|
130
|
+
if (computedTime < this._lastUpdate) {
|
|
131
|
+
this.emit("start", computedTime, offset);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return this;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Stop the clock. Stopping the clock resets the tick counter to 0.
|
|
139
|
+
* @param time The time when the clock should stop.
|
|
140
|
+
* @example
|
|
141
|
+
* const clock = new Tone.Clock(time => {
|
|
142
|
+
* console.log(time);
|
|
143
|
+
* }, 1);
|
|
144
|
+
* clock.start();
|
|
145
|
+
* // stop the clock after 10 seconds
|
|
146
|
+
* clock.stop("+10");
|
|
147
|
+
*/
|
|
148
|
+
stop(time?: Time): this {
|
|
149
|
+
const computedTime = this.toSeconds(time);
|
|
150
|
+
this.log("stop", computedTime);
|
|
151
|
+
this._state.cancel(computedTime);
|
|
152
|
+
this._state.setStateAtTime("stopped", computedTime);
|
|
153
|
+
this._tickSource.stop(computedTime);
|
|
154
|
+
if (computedTime < this._lastUpdate) {
|
|
155
|
+
this.emit("stop", computedTime);
|
|
156
|
+
}
|
|
157
|
+
return this;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Pause the clock. Pausing does not reset the tick counter.
|
|
162
|
+
* @param time The time when the clock should stop.
|
|
163
|
+
*/
|
|
164
|
+
pause(time?: Time): this {
|
|
165
|
+
const computedTime = this.toSeconds(time);
|
|
166
|
+
if (this._state.getValueAtTime(computedTime) === "started") {
|
|
167
|
+
this._state.setStateAtTime("paused", computedTime);
|
|
168
|
+
this._tickSource.pause(computedTime);
|
|
169
|
+
if (computedTime < this._lastUpdate) {
|
|
170
|
+
this.emit("pause", computedTime);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return this;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* The number of times the callback was invoked. Starts counting at 0
|
|
178
|
+
* and increments after the callback was invoked.
|
|
179
|
+
*/
|
|
180
|
+
get ticks(): Ticks {
|
|
181
|
+
return Math.ceil(this.getTicksAtTime(this.now()));
|
|
182
|
+
}
|
|
183
|
+
set ticks(t: Ticks) {
|
|
184
|
+
this._tickSource.ticks = t;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* The time since ticks=0 that the Clock has been running. Accounts for tempo curves
|
|
189
|
+
*/
|
|
190
|
+
get seconds(): Seconds {
|
|
191
|
+
return this._tickSource.seconds;
|
|
192
|
+
}
|
|
193
|
+
set seconds(s: Seconds) {
|
|
194
|
+
this._tickSource.seconds = s;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Return the elapsed seconds at the given time.
|
|
199
|
+
* @param time When to get the elapsed seconds
|
|
200
|
+
* @return The number of elapsed seconds
|
|
201
|
+
*/
|
|
202
|
+
getSecondsAtTime(time: Time): Seconds {
|
|
203
|
+
return this._tickSource.getSecondsAtTime(time);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Set the clock's ticks at the given time.
|
|
208
|
+
* @param ticks The tick value to set
|
|
209
|
+
* @param time When to set the tick value
|
|
210
|
+
*/
|
|
211
|
+
setTicksAtTime(ticks: Ticks, time: Time): this {
|
|
212
|
+
this._tickSource.setTicksAtTime(ticks, time);
|
|
213
|
+
return this;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Get the time of the given tick. The second argument
|
|
218
|
+
* is when to test before. Since ticks can be set (with setTicksAtTime)
|
|
219
|
+
* there may be multiple times for a given tick value.
|
|
220
|
+
* @param tick The tick number.
|
|
221
|
+
* @param before When to measure the tick value from.
|
|
222
|
+
* @return The time of the tick
|
|
223
|
+
*/
|
|
224
|
+
getTimeOfTick(tick: Ticks, before = this.now()): Seconds {
|
|
225
|
+
return this._tickSource.getTimeOfTick(tick, before);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Get the clock's ticks at the given time.
|
|
230
|
+
* @param time When to get the tick value
|
|
231
|
+
* @return The tick value at the given time.
|
|
232
|
+
*/
|
|
233
|
+
getTicksAtTime(time?: Time): Ticks {
|
|
234
|
+
return this._tickSource.getTicksAtTime(time);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Get the time of the next tick
|
|
239
|
+
* @param offset The tick number.
|
|
240
|
+
*/
|
|
241
|
+
nextTickTime(offset: Ticks, when: Time): Seconds {
|
|
242
|
+
const computedTime = this.toSeconds(when);
|
|
243
|
+
const currentTick = this.getTicksAtTime(computedTime);
|
|
244
|
+
return this._tickSource.getTimeOfTick(currentTick + offset, computedTime);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* The scheduling loop.
|
|
249
|
+
*/
|
|
250
|
+
private _loop(): void {
|
|
251
|
+
|
|
252
|
+
const startTime = this._lastUpdate;
|
|
253
|
+
const endTime = this.now();
|
|
254
|
+
this._lastUpdate = endTime;
|
|
255
|
+
this.log("loop", startTime, endTime);
|
|
256
|
+
|
|
257
|
+
if (startTime !== endTime) {
|
|
258
|
+
// the state change events
|
|
259
|
+
this._state.forEachBetween(startTime, endTime, e => {
|
|
260
|
+
switch (e.state) {
|
|
261
|
+
case "started":
|
|
262
|
+
const offset = this._tickSource.getTicksAtTime(e.time);
|
|
263
|
+
this.emit("start", e.time, offset);
|
|
264
|
+
break;
|
|
265
|
+
case "stopped":
|
|
266
|
+
if (e.time !== 0) {
|
|
267
|
+
this.emit("stop", e.time);
|
|
268
|
+
}
|
|
269
|
+
break;
|
|
270
|
+
case "paused":
|
|
271
|
+
this.emit("pause", e.time);
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
// the tick callbacks
|
|
276
|
+
this._tickSource.forEachTickBetween(startTime, endTime, (time, ticks) => {
|
|
277
|
+
this.callback(time, ticks);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Returns the scheduled state at the given time.
|
|
284
|
+
* @param time The time to query.
|
|
285
|
+
* @return The name of the state input in setStateAtTime.
|
|
286
|
+
* @example
|
|
287
|
+
* const clock = new Tone.Clock();
|
|
288
|
+
* clock.start("+0.1");
|
|
289
|
+
* clock.getStateAtTime("+0.1"); // returns "started"
|
|
290
|
+
*/
|
|
291
|
+
getStateAtTime(time: Time): PlaybackState {
|
|
292
|
+
const computedTime = this.toSeconds(time);
|
|
293
|
+
return this._state.getValueAtTime(computedTime);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Clean up
|
|
298
|
+
*/
|
|
299
|
+
dispose(): this {
|
|
300
|
+
super.dispose();
|
|
301
|
+
this.context.off("tick", this._boundLoop);
|
|
302
|
+
this._tickSource.dispose();
|
|
303
|
+
this._state.dispose();
|
|
304
|
+
return this;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
//-------------------------------------
|
|
308
|
+
// EMITTER MIXIN TO SATISFY COMPILER
|
|
309
|
+
//-------------------------------------
|
|
310
|
+
|
|
311
|
+
on!: (event: ClockEvent, callback: (...args: any[]) => void) => this;
|
|
312
|
+
once!: (event: ClockEvent, callback: (...args: any[]) => void) => this;
|
|
313
|
+
off!: (event: ClockEvent, callback?: ((...args: any[]) => void) | undefined) => this;
|
|
314
|
+
emit!: (event: any, ...args: any[]) => this;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
Emitter.mixin(Clock);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Compare, Plot } from "@tonejs/plot";
|
|
2
|
+
import { expect } from "chai";
|
|
3
|
+
import { BasicTests, testAudioContext } from "test/helper/Basic";
|
|
4
|
+
// import { atTime, Offline } from "test/helper/Offline";
|
|
5
|
+
import { TickParam } from "./TickParam";
|
|
6
|
+
|
|
7
|
+
describe("TickParam", () => {
|
|
8
|
+
|
|
9
|
+
// sanity checks
|
|
10
|
+
BasicTests(TickParam, {
|
|
11
|
+
context: testAudioContext,
|
|
12
|
+
param: testAudioContext.createOscillator().frequency,
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
});
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
import { AutomationEvent, Param, ParamOptions } from "../context/Param";
|
|
2
|
+
import { Seconds, Ticks, Time, UnitMap, UnitName } from "../type/Units";
|
|
3
|
+
import { optionsFromArguments } from "../util/Defaults";
|
|
4
|
+
import { Timeline } from "../util/Timeline";
|
|
5
|
+
import { isUndef } from "../util/TypeCheck";
|
|
6
|
+
|
|
7
|
+
type TickAutomationEvent = AutomationEvent & {
|
|
8
|
+
ticks: number;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
interface TickParamOptions<TypeName extends UnitName> extends ParamOptions<TypeName> {
|
|
12
|
+
multiplier: number;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* A Param class just for computing ticks. Similar to the [[Param]] class,
|
|
17
|
+
* but offers conversion to BPM values as well as ability to compute tick
|
|
18
|
+
* duration and elapsed ticks
|
|
19
|
+
*/
|
|
20
|
+
export class TickParam<TypeName extends "hertz" | "bpm"> extends Param<TypeName> {
|
|
21
|
+
|
|
22
|
+
readonly name: string = "TickParam";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The timeline which tracks all of the automations.
|
|
26
|
+
*/
|
|
27
|
+
protected _events: Timeline<TickAutomationEvent> = new Timeline(Infinity);
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The internal holder for the multiplier value
|
|
31
|
+
*/
|
|
32
|
+
private _multiplier = 1;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @param param The AudioParam to wrap
|
|
36
|
+
* @param units The unit name
|
|
37
|
+
* @param convert Whether or not to convert the value to the target units
|
|
38
|
+
*/
|
|
39
|
+
/**
|
|
40
|
+
* @param value The initial value of the signal
|
|
41
|
+
*/
|
|
42
|
+
constructor(value?: number);
|
|
43
|
+
constructor(options: Partial<TickParamOptions<TypeName>>);
|
|
44
|
+
constructor() {
|
|
45
|
+
|
|
46
|
+
super(optionsFromArguments(TickParam.getDefaults(), arguments, ["value"]));
|
|
47
|
+
const options = optionsFromArguments(TickParam.getDefaults(), arguments, ["value"]);
|
|
48
|
+
|
|
49
|
+
// set the multiplier
|
|
50
|
+
this._multiplier = options.multiplier;
|
|
51
|
+
|
|
52
|
+
// clear the ticks from the beginning
|
|
53
|
+
this._events.cancel(0);
|
|
54
|
+
// set an initial event
|
|
55
|
+
this._events.add({
|
|
56
|
+
ticks: 0,
|
|
57
|
+
time: 0,
|
|
58
|
+
type: "setValueAtTime",
|
|
59
|
+
value: this._fromType(options.value),
|
|
60
|
+
});
|
|
61
|
+
this.setValueAtTime(options.value, 0);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
static getDefaults(): TickParamOptions<any> {
|
|
65
|
+
return Object.assign(Param.getDefaults(), {
|
|
66
|
+
multiplier: 1,
|
|
67
|
+
units: "hertz",
|
|
68
|
+
value: 1,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
setTargetAtTime(value: UnitMap[TypeName], time: Time, constant: number): this {
|
|
73
|
+
// approximate it with multiple linear ramps
|
|
74
|
+
time = this.toSeconds(time);
|
|
75
|
+
this.setRampPoint(time);
|
|
76
|
+
const computedValue = this._fromType(value);
|
|
77
|
+
|
|
78
|
+
// start from previously scheduled value
|
|
79
|
+
const prevEvent = this._events.get(time) as TickAutomationEvent;
|
|
80
|
+
const segments = Math.round(Math.max(1 / constant, 1));
|
|
81
|
+
for (let i = 0; i <= segments; i++) {
|
|
82
|
+
const segTime = constant * i + time;
|
|
83
|
+
const rampVal = this._exponentialApproach(prevEvent.time, prevEvent.value, computedValue, constant, segTime);
|
|
84
|
+
this.linearRampToValueAtTime(this._toType(rampVal), segTime);
|
|
85
|
+
}
|
|
86
|
+
return this;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
setValueAtTime(value: UnitMap[TypeName], time: Time): this {
|
|
90
|
+
const computedTime = this.toSeconds(time);
|
|
91
|
+
super.setValueAtTime(value, time);
|
|
92
|
+
const event = this._events.get(computedTime) as TickAutomationEvent;
|
|
93
|
+
const previousEvent = this._events.previousEvent(event);
|
|
94
|
+
const ticksUntilTime = this._getTicksUntilEvent(previousEvent, computedTime);
|
|
95
|
+
event.ticks = Math.max(ticksUntilTime, 0);
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
linearRampToValueAtTime(value: UnitMap[TypeName], time: Time): this {
|
|
100
|
+
const computedTime = this.toSeconds(time);
|
|
101
|
+
super.linearRampToValueAtTime(value, time);
|
|
102
|
+
const event = this._events.get(computedTime) as TickAutomationEvent;
|
|
103
|
+
const previousEvent = this._events.previousEvent(event);
|
|
104
|
+
const ticksUntilTime = this._getTicksUntilEvent(previousEvent, computedTime);
|
|
105
|
+
event.ticks = Math.max(ticksUntilTime, 0);
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
exponentialRampToValueAtTime(value: UnitMap[TypeName], time: Time): this {
|
|
110
|
+
// aproximate it with multiple linear ramps
|
|
111
|
+
time = this.toSeconds(time);
|
|
112
|
+
const computedVal = this._fromType(value);
|
|
113
|
+
|
|
114
|
+
// start from previously scheduled value
|
|
115
|
+
const prevEvent = this._events.get(time) as TickAutomationEvent;
|
|
116
|
+
// approx 10 segments per second
|
|
117
|
+
const segments = Math.round(Math.max((time - prevEvent.time) * 10, 1));
|
|
118
|
+
const segmentDur = ((time - prevEvent.time) / segments);
|
|
119
|
+
for (let i = 0; i <= segments; i++) {
|
|
120
|
+
const segTime = segmentDur * i + prevEvent.time;
|
|
121
|
+
const rampVal = this._exponentialInterpolate(prevEvent.time, prevEvent.value, time, computedVal, segTime);
|
|
122
|
+
this.linearRampToValueAtTime(this._toType(rampVal), segTime);
|
|
123
|
+
}
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Returns the tick value at the time. Takes into account
|
|
129
|
+
* any automation curves scheduled on the signal.
|
|
130
|
+
* @param event The time to get the tick count at
|
|
131
|
+
* @return The number of ticks which have elapsed at the time given any automations.
|
|
132
|
+
*/
|
|
133
|
+
private _getTicksUntilEvent(event: TickAutomationEvent | null, time: number): Ticks {
|
|
134
|
+
if (event === null) {
|
|
135
|
+
event = {
|
|
136
|
+
ticks: 0,
|
|
137
|
+
time: 0,
|
|
138
|
+
type: "setValueAtTime",
|
|
139
|
+
value: 0,
|
|
140
|
+
};
|
|
141
|
+
} else if (isUndef(event.ticks)) {
|
|
142
|
+
const previousEvent = this._events.previousEvent(event);
|
|
143
|
+
event.ticks = this._getTicksUntilEvent(previousEvent, event.time);
|
|
144
|
+
}
|
|
145
|
+
const val0 = this._fromType(this.getValueAtTime(event.time));
|
|
146
|
+
let val1 = this._fromType(this.getValueAtTime(time));
|
|
147
|
+
// if it's right on the line, take the previous value
|
|
148
|
+
const onTheLineEvent = this._events.get(time);
|
|
149
|
+
if (onTheLineEvent && onTheLineEvent.time === time && onTheLineEvent.type === "setValueAtTime") {
|
|
150
|
+
val1 = this._fromType(this.getValueAtTime(time - this.sampleTime));
|
|
151
|
+
}
|
|
152
|
+
return 0.5 * (time - event.time) * (val0 + val1) + event.ticks;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Returns the tick value at the time. Takes into account
|
|
157
|
+
* any automation curves scheduled on the signal.
|
|
158
|
+
* @param time The time to get the tick count at
|
|
159
|
+
* @return The number of ticks which have elapsed at the time given any automations.
|
|
160
|
+
*/
|
|
161
|
+
getTicksAtTime(time: Time): Ticks {
|
|
162
|
+
const computedTime = this.toSeconds(time);
|
|
163
|
+
const event = this._events.get(computedTime);
|
|
164
|
+
return Math.max(this._getTicksUntilEvent(event, computedTime), 0);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Return the elapsed time of the number of ticks from the given time
|
|
169
|
+
* @param ticks The number of ticks to calculate
|
|
170
|
+
* @param time The time to get the next tick from
|
|
171
|
+
* @return The duration of the number of ticks from the given time in seconds
|
|
172
|
+
*/
|
|
173
|
+
getDurationOfTicks(ticks: Ticks, time: Time): Seconds {
|
|
174
|
+
const computedTime = this.toSeconds(time);
|
|
175
|
+
const currentTick = this.getTicksAtTime(time);
|
|
176
|
+
return this.getTimeOfTick(currentTick + ticks) - computedTime;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Given a tick, returns the time that tick occurs at.
|
|
181
|
+
* @return The time that the tick occurs.
|
|
182
|
+
*/
|
|
183
|
+
getTimeOfTick(tick: Ticks): Seconds {
|
|
184
|
+
const before = this._events.get(tick, "ticks");
|
|
185
|
+
const after = this._events.getAfter(tick, "ticks");
|
|
186
|
+
if (before && before.ticks === tick) {
|
|
187
|
+
return before.time;
|
|
188
|
+
} else if (before && after &&
|
|
189
|
+
after.type === "linearRampToValueAtTime" &&
|
|
190
|
+
before.value !== after.value) {
|
|
191
|
+
const val0 = this._fromType(this.getValueAtTime(before.time));
|
|
192
|
+
const val1 = this._fromType(this.getValueAtTime(after.time));
|
|
193
|
+
const delta = (val1 - val0) / (after.time - before.time);
|
|
194
|
+
const k = Math.sqrt(Math.pow(val0, 2) - 2 * delta * (before.ticks - tick));
|
|
195
|
+
const sol1 = (-val0 + k) / delta;
|
|
196
|
+
const sol2 = (-val0 - k) / delta;
|
|
197
|
+
return (sol1 > 0 ? sol1 : sol2) + before.time;
|
|
198
|
+
} else if (before) {
|
|
199
|
+
if (before.value === 0) {
|
|
200
|
+
return Infinity;
|
|
201
|
+
} else {
|
|
202
|
+
return before.time + (tick - before.ticks) / before.value;
|
|
203
|
+
}
|
|
204
|
+
} else {
|
|
205
|
+
return tick / this._initialValue;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Convert some number of ticks their the duration in seconds accounting
|
|
211
|
+
* for any automation curves starting at the given time.
|
|
212
|
+
* @param ticks The number of ticks to convert to seconds.
|
|
213
|
+
* @param when When along the automation timeline to convert the ticks.
|
|
214
|
+
* @return The duration in seconds of the ticks.
|
|
215
|
+
*/
|
|
216
|
+
ticksToTime(ticks: Ticks, when: Time): Seconds {
|
|
217
|
+
return this.getDurationOfTicks(ticks, when);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* The inverse of [[ticksToTime]]. Convert a duration in
|
|
222
|
+
* seconds to the corresponding number of ticks accounting for any
|
|
223
|
+
* automation curves starting at the given time.
|
|
224
|
+
* @param duration The time interval to convert to ticks.
|
|
225
|
+
* @param when When along the automation timeline to convert the ticks.
|
|
226
|
+
* @return The duration in ticks.
|
|
227
|
+
*/
|
|
228
|
+
timeToTicks(duration: Time, when: Time): Ticks {
|
|
229
|
+
const computedTime = this.toSeconds(when);
|
|
230
|
+
const computedDuration = this.toSeconds(duration);
|
|
231
|
+
const startTicks = this.getTicksAtTime(computedTime);
|
|
232
|
+
const endTicks = this.getTicksAtTime(computedTime + computedDuration);
|
|
233
|
+
return endTicks - startTicks;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* Convert from the type when the unit value is BPM
|
|
238
|
+
*/
|
|
239
|
+
protected _fromType(val: UnitMap[TypeName]): number {
|
|
240
|
+
if (this.units === "bpm" && this.multiplier) {
|
|
241
|
+
return 1 / (60 / val / this.multiplier);
|
|
242
|
+
} else {
|
|
243
|
+
return super._fromType(val);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Special case of type conversion where the units === "bpm"
|
|
249
|
+
*/
|
|
250
|
+
protected _toType(val: number): UnitMap[TypeName] {
|
|
251
|
+
if (this.units === "bpm" && this.multiplier) {
|
|
252
|
+
return (val / this.multiplier) * 60 as UnitMap[TypeName];
|
|
253
|
+
} else {
|
|
254
|
+
return super._toType(val);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* A multiplier on the bpm value. Useful for setting a PPQ relative to the base frequency value.
|
|
259
|
+
*/
|
|
260
|
+
get multiplier(): number {
|
|
261
|
+
return this._multiplier;
|
|
262
|
+
}
|
|
263
|
+
set multiplier(m: number) {
|
|
264
|
+
// get and reset the current value with the new multiplier
|
|
265
|
+
// might be necessary to clear all the previous values
|
|
266
|
+
const currentVal = this.value;
|
|
267
|
+
this._multiplier = m;
|
|
268
|
+
this.cancelScheduledValues(0);
|
|
269
|
+
this.setValueAtTime(currentVal, 0);
|
|
270
|
+
}
|
|
271
|
+
}
|