Skip to content

spessasus/SpessaSynth

Repository files navigation

SpessaSynth logo

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

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:

Installation (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 into the soundfonts folder (you can select SoundFonts in the program).
  3. Double-click Open SpessaSynth.bat.
  4. Enjoy!

Linux

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

Building from source

git clone "https://github.com/spessasus/SpessaSynth"
npm i
npm run build

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
  • 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.