A Web Audio framework for creating interactive music and audio applications in the browser.
Tone.js is a Web Audio framework for creating interactive music and audio applications in the browser. It provides a comprehensive suite of tools including synthesizers, effects, sample playback, and precise scheduling, abstracting the complexity of the native Web Audio API into a musician-friendly interface. It solves the problem of building browser-based audio experiences that require both high-level musical timing and low-level audio signal control.
Web developers, musicians, and audio programmers looking to create interactive music applications, audio toys, educational tools, or experimental sound art in the browser.
Developers choose Tone.js for its balanced approach: it offers ready-to-use musical components for rapid prototyping while exposing the full power of Web Audio for custom synthesis and effects, all wrapped in a consistent API that handles cross-browser compatibility and performance optimizations.
A Web Audio framework for making interactive music in the browser.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Abstracts Web Audio's seconds-based timing into musical terms like '4n' for quarter notes, making it intuitive for musicians to schedule events without manual conversion.
Includes prebuilt synthesizers like FM and AM synths, and effects like distortion and delay, allowing rapid prototyping without building audio nodes from scratch.
Leverages the Web Audio API for precise event timing, enabling complex, synchronized audio sequences with minimal jitter, as shown in the Transport and Loop examples.
Supports serial and parallel connections between nodes, facilitating advanced signal processing chains similar to professional DAWs, with examples using Tone.Gain for complex routing.
Audio context only starts after Tone.start() is called from a user event like a click, preventing autoplay and complicating scenarios where audio must begin immediately on page load.
Core synthesizers are monophonic; creating polyphonic instruments requires wrapping them in Tone.PolySynth, adding overhead and complexity for multi-note playback.
To use MIDI files, they must first be converted to JSON using an external tool, adding an extra step and dependency for music sequencing projects, as noted in the MIDI section.