Skip to content

Releases: Tonejs/Tone.js

14.7.39

29 Jul 16:15
Compare
Choose a tag to compare

14.7.x

Features

  • Converted to typescript!!!
  • adding AudioWorkletNode constructors to Context (f7bdd75)
  • adding ability to get the frequency at the FFT index (22cecdc)
  • adding AudioWorkletNode constructors to Context (f7bdd75)
  • adding BiquadFilter (75617d3), closes #686
  • adding linting to jsdocs (10ef513)
  • adding send/receive to Channel (703f27a)
  • Adding triggerRelease to PluckSynth (04405af)
  • Can set the parameter after constructing Param (23ca0f9)
  • adding onerror to Sampler (7236600), closes #605
  • Chorus extends StereoFeedbackEffect (a28f1af), closes #575
  • Convolver is just a wrapper around the ConvolverNode, no longer an effect (1668dec)
  • Get an oscillator wave as an array (9ad519e)
  • OfflineContext returns a ToneAudioBuffer (889dafa)
  • OfflineContext yields thread every second of audio rendered (1154470), closes #436
  • Renaming TransportTimelineSignal to SyncedSignal (86853fb)
  • es6 output (e5d28ba)
  • Render a segment of the envelope as an array (fc5b6f7)
  • testing examples in jsdocs (e306319)
  • Wrapper around the AudioWorkletNode (2ee8cb1)
  • Input/Outputs are no longer arrays.
    • simplifies connect/disconnect logic greatly. Simplifies API to just have clearly named inputs/outputs instead of overloading input/output connect numbers
  • Using "Destination" instead of "Master" for output
    • More consistent with Web Audio API
  • FrequencyShifter - thanks @Foaly
  • PolySynth does not require a polyphony value.
    • Voice allocation and disposing is done automatically based on demand.
  • MetalSynth and MembraneSynth extends Monophonic enabling them to be used in PolySynth
  • OnePoleFilter is a 6b-per-octave lowpass or highpass filter
    • Using OnePoleFilter in PluckSynth and LowpassCombFilter
  • latencyHint is now set in constructor (ba8e82b), closes #658
  • meter output can be normalRange in addition to decibels (2625a13)
  • option to pass in the number of input channels to Panner (d966735), closes #609

BREAKING CHANGES

  • TransportTimelineSignal renamed SyncedSignal
  • Master renamed Destination
  • Buffer renamed ToneAudioBuffer
  • Buffer.on("loaded") is should now use: Tone.loaded(): Promise<void>
  • Removing bower (71c8b3b), closes #197
  • Removing Ctrl classes (51d06bd)

13.8.25

27 Aug 05:42
Compare
Choose a tag to compare
  • Moving to common.js-style code

Breaking Changes

  • AudioNode.prototype.connect is no longer overwritten. This means that you can no longer connect native nodes to Tone.js Nodes.
  • Tone.connect(srcNode, destNode, [ouputNum], [inputNum]) is the way to connect native Web Audio nodes with Tone.js nodes.

13.4.9

10 Jan 04:53
Compare
Choose a tag to compare
  • Updating semantic versioning to be more in line with other semvers. Now version is 13.x.x
  • logging full version
  • Added Object notation for Tone.TimeBase and classes that extend it.
    • i.e. Tone.Time({'4n' : 1, '8t' : 2})
    • Replacement for deprecated expression strings.
  • Tone.Meter uses RMS instead of peak (thanks @Idicious)
  • Tone.Sampler supports polyphonic syntax (thanks @zfan40)
  • Building files with webpack
  • Follower/Gate uses a single "smoothing" value instead of separate attacks and releases
  • Changing references to window allowing it to not throw error in node context
  • Testing examples
  • Tone.Channel combines Tone.PanVol with Tone.Solo.
  • Removing require.html example.
  • adding partialCount and baseType to Oscillator classes, helps with getting/setting complex types.
  • New examples with updated interface
  • Tone.start() to simplify resuming the AudioContext

r12

07 Apr 00:42
Compare
Choose a tag to compare
r12
  • Consolidating all shims into shim folder
  • Using ConstantSourceNode in Signal when available
  • switching to eslint from jshint
  • Running CI tests on Firefox, Chrome (latest and canary) and Safari (latest and version 9).
  • Tone.Reverb is a convolution-based stereo reverb. Example.
  • Optimizing basic Oscillator types and many Signal use-case
  • Optimizing basic connection use-case of Tone.Signal where one signal is controlling another signal
  • Testing rendered output against an existing audio file for continuity and consistency
  • Optimizing triggerAttack/Release by starting/stopping oscillators when not playing
  • TickSource (used in Clock and Player) tracks the elapsed ticks
    • Improved precision of tracking ticks in Transport and Clock
  • Player.position returns the playback position of the AudioBuffer accounting for any playbackRate changes
  • Removing retrigger option with Tone.Player. Tone.BufferSource should be used if retriggering is desired.

BREAKING CHANGES:

  • Tone.TimeBase and all classes that extend it not longer support string expressions.
    RATIONALE :
    * Since all classes implement valueOf, expressions can be composed in JS instead of as strings
    * e.g. Time('4n') * 2 + Time('3t') instead of Time('4n * 2 + 3t')
    * this change greatly simplifies the code and is more performant

r11

16 Sep 19:52
Compare
Choose a tag to compare
r11

r10

26 Mar 23:35
Compare
Choose a tag to compare
r10
  • Tone.Context wraps AudioContext
  • Tone.OfflineContext wraps OfflineAudioContext
  • Tone.Offline: method for rendering audio offline
  • Rewriting tests with Tone.Offline
  • Optimizing Tone.Draw to only loop when events are scheduled: #194
  • Time.eval->valueOf which takes advantage of build-in primitive evaluation #205
  • Offline example

r9

08 Jan 23:41
Compare
Choose a tag to compare
r9
  • Tone.Clock performance and lookAhead updates.
  • Tone.Transport.lookAhead = seconds|'playback'|'interactive'|'balanced'
  • Convolver.load and Player.load returns Promise
  • Tone.ExternalInput -> Tone.UserMedia, simplified API, open() returns Promise.
  • Tone.Draw for animation-frame synced drawing
  • Compressor Parameters are now Tone.Params
  • Bug fixes

r8

05 Oct 14:58
Compare
Choose a tag to compare
r8

Better Source syncing to the transport, 3D Audio Spatialization and temporary fix for bug in Chrome 53+.

CHANGELOG:

  • Transport.seconds returns the progress in seconds.
  • Buffer.from/toArray, Float32Array <-> Buffer conversions
  • Buffer.slice(start, end) slices and returns a subsection of the Buffer
  • Source.sync now syncs all subsequent calls to start and stop to the TransportTime instead of the AudioContext time.
    • e.g. source.sync().start(0).stop(0.8); //plays source between 0 and 0.8 of the Transport
  • Transport.on("start" / "stop") callbacks are invoked just before the event.
  • Param can accept an LFO description in the constructor or .value
    • e.g. param.value = {min : 10, max : 20, frequency : 0.4}
  • Time.TimeBase has clone/copy methods.
  • Tone.Buffer.prototype.load returns Promise
  • Using Tone.Delay and Tone.Gain everywhere
  • Patch for Chrome 53+ issue of not correctly scheduling AudioParams with setValueAtTime
  • Panner3D and Tone.Listener wrap native PannerNode and AudioListener to give 3D panning ability.

r7

07 Jul 22:16
Compare
Choose a tag to compare
r7
  • MetalSynth creates metalic, cymbal sounds
  • DrumSynth -> MembraneSynth
  • FMOscillator, AMOscillator types
  • FatOscillator creates multiple oscillators and detunes them slightly
  • FM, AM, Fat Oscillators incorporated into OmniOscillator
  • Simplified FM and AM Synths and APIs
  • Panner.pan is between -1,1 like the StereoPannerNode
  • Pruned away unused (or little used) Signal classes.
    • All this functionality will be available when the AudioWorkerNode is introduced.
  • Clock uses Web Workers instead of requestAnimationFrame which allows it to run in the background.
  • Removed startMobile. Using StartAudioContext in examples.
  • Automated test runner using Travis CI
  • Simplified NoiseSynth by removing filter and filter envelope.
  • Added new timing primitive types: Time, Frequency, TransportTime.
  • Switching parameter position of type and size in Tone.Analyser
  • Tone.Meter uses Tone.Analyser instead of ScriptProcessorNode.
  • Tone.Envelope has 5 new attack/release curves: "sine", "cosine", "bounce", "ripple", "step"
  • Renamed Tone.SimpleSynth -> Tone.Synth
  • Tone.Buffers combines multiple buffers
  • Tone.BufferSource a low-level wrapper, and Tone.MultiPlayer which is good for multisampled instruments.
  • Tone.GrainPlayer: granular synthesis buffer player.
  • Simplified Sampler

DEPRECATED:

  • Removed SimpleFM and SimpleAM

r6

08 Dec 05:39
Compare
Choose a tag to compare
r6

Big changes are the new event classes: Tone.Event, Tone.Loop, Tone.Part, Tone.Sequence, and Tone.Pattern. These simplify interacting with the Transport.schedule (formerly Transport.setTimeline). They allow you to more easily schedule loopable, schedulable, and modifiable events along the Transport's timeline.

All Changes:

  • Added PitchShift and Vibrato Effect.
  • Added Timeline/TimelineState/TimelineSignal which keeps track of all scheduled state changes.
  • Clock uses requestAnimationFrame instead of ScriptProcessorNode
  • Removed onended event from Tone.Source
  • Refactored tests into individual files.
  • Renamed some Signal methods: exponentialRampToValueNow->exponentialRampToValue, setCurrentValueNow->setRampPoint
  • LFO no longer starts at bottom of cycle. Starts at whatever phase it's set at.
  • Transport is an event emitter. triggers events on "start", "stop", "pause", and "loop".
  • Oscillator accepts a "partials" array.
  • Microphone inherits from ExternalInput which is generalized for different inputs.
  • New scheduling methods on Transport - schedule, scheduleOnce, and scheduleRepeat.
  • Tone.Gain and Tone.Delay classes wrap the native Web Audio nodes.
  • Moved MidiToScore and TypeScript definitions to separate repos.
  • Tone.Param wraps the native AudioParam and allows for unit conversion.
  • Quantization with Transport.quantize and using "@" in any Time. Read more.
  • Control-rate generators for value interpolation, patterns, random numbers, and markov chains.
  • Scheduable musical events: Tone.Event, Tone.Loop, Tone.Part, Tone.Pattern, Tone.Sequence.
  • Player's playbackRate is now a signal and Noise includes a playbackRate signal.
  • All filterEnvelopes use new Tone.FrequencyEnvelope with frequency units and baseFrequency and octaves instead of min and max.
  • Phaser uses "octaves" instead of "depth" to be more consistent across the whole Tone.js API.
  • Presets now have their own repo

DEPRECATED:

  • setTimeout, setInterval, setTimeline in favor of new schedule, scheduleOnce, and scheduleRepeat.
  • Tone.Signal no longer takes an AudioParam in the first argument. Use Tone.Param instead.
  • Tone.Buffer.onload/onprogress/onerror is deprecated. Use Tone.Buffer.on("load", callback) instead.