A powerful SF2/DLS/MIDI JavaScript library for the browsers.
This is a WebAudioAPI wrapper for the spessasynth_core library.
Project index
- spessasynth_core - SF2/DLS/MIDI library
- spessasynth_lib (you are here) – spessasynth_core wrapper optimized for browsers and WebAudioAPI
- SpessaSynth - online/local web player/editor application
TIP: Looking for a bare JS version that works without WebAudioAPI? Try spessasynth_core!
npm install --save spessasynth_lib
import { Synthetizer } from "spessasynth_lib"
const sfont = await (await fetch("soundfont.sf3")).arrayBuffer();
const ctx = new AudioContext();
// make sure you copied the worklet processor!
await ctx.audioWorklet.addModule("./worklet_processor.min.js");
const synth = new Synthetizer(ctx.destination, sfont);
document.getElementById("button").onclick = async () =>
{
await ctx.resume();
synth.programChange(0, 48); // strings ensemble
synth.noteOn(0, 52, 127);
}
Audio may sometimes sound distorted in Chromium-based browsers: Chrome, Edge, Brave, etc. due to a Chromium Bug. I can't do anything about it, only hope that it gets fixed. Please consider voting for it on the bug tracker to get it fixed!
- Modular design: Easy integration into other projects (load what you need)
- Detailed documentation: With examples!
- Easy to Use: Basic setup is just two lines of code!
- No external dependencies: Just spessasynth_core!
- Reverb and chorus support: customizable!
- Export audio files using OfflineAudioContext
- Written using AudioWorklets:
- Runs in a separate thread for maximum performance
- Does not stop playing even when the main thread is frozen
- Supported by all modern browsers
- High-performance mode: Play Rush E! note: may kill your browser ;)
- Enhance the built-in chorus and reverb effects (suggestions welcome!)
- FluidSynth - for the source code that helped implement functionality and fixes
- Polyphone - for the soundfont testing and editing tool
- Meltysynth - for the initial low-pass filter implementation
- RecordingBlogs - for detailed explanations on MIDI messages
- stbvorbis.js - for the Vorbis decoder
- fflate - for the MIT DEFLATE implementation
- foo_midi - for useful resources on XMF file format
- Falcosoft - for help with the RMIDI format
- Christian Collins - for various bug reports regarding the synthesizer
- And You! - for checking out this project. I hope you like it :)
Copyright © 2025 Spessasus Licensed under the Apache-2.0 License.
SoundFont® is a registered trademark of Creative Technology Ltd.