10000 GitHub - spessasus/spessasynth_lib: SoundFont/DLS MIDI Library for web browsers
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

spessasus/spessasynth_lib

Repository files navigation

SpessaSynth logo

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

Basic example: play a single note

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!

Current Features

On top of that...

  • 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 ;)

TODO

  • Enhance the built-in chorus and reverb effects (suggestions welcome!)

Special Thanks

  • 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 :)

License

Copyright © 2025 Spessasus Licensed under the Apache-2.0 License.

SoundFont® is a registered trademark of Creative Technology Ltd.

0