Skip to content

spessasus/SpessaSynth

Repository files navigation

SpessaSynth logo

SpessaSynth is a SoundFont2-based real-time synthesizer written in vanilla JavaScript.

Download Local Edition

Made with SpessaSynth

Watch the YouTube video

SpessaSynth Project index

Web App / Local Edition

The complete GUI for spessasynth_lib, allowing remixing, experimenting, and playing MIDIs in the coolest way possible.

SpessaSynth promotional image

Features

  • Visualization of the played sequence: with cool effects like visual pitch bend and note-on effects!
  • Playable keyboard with various sizes: mobile friendly!
  • Integrated controller for the synthesizer with numerous options: Edit instruments, controllers, and more!
  • MIDI Lyrics support: Karaoke!
  • Kar Lyrics support: Karaoke but fancy!
  • ASS Subtitle support: Karaoke but even fancier!
  • Music player mode: with support for album covers in .rmi files!
  • Mobile-friendly UI (synthesizer performance not optimized for mobile... don't tell anyone!)
  • Multiple language support:
    • English
    • Polish
    • Japanese
    • French (translated by Davy Triponney)
    • Portuguese (translated by Lucas Gabriel)
    • Custom locale management system, created specifically for this project
  • Description of buttons: Hover over the buttons to see what they do!
  • Web MIDI API support: Use your physical MIDI devices!
  • WebMidiLink support
  • Numerous exporting options:
    • Render the MIDI file (modified or unmodified) to .wav
    • Render each channel as a separate .wav file
    • Export the modified MIDI file to .mid
    • Export the trimmed SoundFont to .sf2
    • Export a DLS file to .sf2
    • Export an SF2 file to .dls
    • Or compress it as .sf3!
    • Bundle both as .rmi with metadata such as album cover!
  • Comes bundled with a compressed GeneralUser GS SoundFont to get you started

Still not convinced? Check out these screenshots:

Downloading the Local Edition

Local edition comes with easier soundfont management than the demo version, also allowing to use it offline!

Important

Firefox is recommended due to Chromium's Web Audio bug and memory limit. A decent computer is also recommended for handling large SoundFonts.

Recommended high-quality SoundFont (better than the built-in one)

Local Edition requires Node.js

Windows

  1. Download the program.
  2. Put your SoundFonts and DLS files into the soundfonts folder (you can select sound banks in the program).
  3. Double-click Open SpessaSynth.bat (or you can type node server/server.js in the Command Prompt)
  4. Enjoy!

Linux

  1. Download the program.
  2. Put your SoundFonts and DLS files into the soundfonts folder (you can select sound banks in the program).
  3. node server/server.js
  4. Enjoy!

Building from source

# clone
git clone "https://github.com/spessasus/SpessaSynth" --depth 1
# install dependencies
npm i
# build and start the local edition
npm start

The "start" will automatically build the script and then invoke server.js. Then it will only invoke server.js so you need to npm run build to rebuild.

The build files:

  • dist: the online demo along with the bundled Local edition ZIP for downloading. This is what's hosted on GH pages.
  • local-dev: Local Edition sources with sourcemaps. For development.
  • server: the Local Edition server. It is here so it can use the root "soundfonts" folder. This is what npm start invokes.

If you would like to help translate SpessaSynth, please read this guide (and thank you!)

If you like this project, consider giving it a star. It really helps out!

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
  • OggVorbisEncoder - for the MIT Vorbis encoder
  • fflate - for the MIT DEFLATE implementation
  • JSZip - for the ZIP creation library
  • foo_midi - for useful resources on XMF file format
  • Composers - for the demo songs
  • Falcosoft - for help with the RMIDI format
  • Christian Collins - for the bundled GeneralUserGS soundfont and various bug reports regarding the synthesizer
  • And You! - for checking out this project. I hope you like it :)

Major Releases

  • 0.0.1 - Initial release
  • 1.0.0 - Removed the 2-sample limit
  • 2.0.0 - Implemented the worklet system and added support for modulators
  • 3.0.0 - Moved to audioWorkletGlobalScope for offline audio rendering

License

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

Legal

This project is in no way endorsed or otherwise affiliated with the MIDI Manufacturers Association, Creative Technology Ltd. or E-mu Systems, Inc., or any other organization mentioned. SoundFont® is a registered trademark of Creative Technology Ltd. All other trademarks are the property of their respective owners.