Profile
Back to NewsBack
GitHub Trending 6 min
Reader Mode
spessasus/SpessaSynth: MIDI SoundFont/DLS player and editor written in TypeScript.

spessasus/SpessaSynth: MIDI SoundFont/DLS player and editor written in TypeScript.

4 hours ago

SpessaSynth logo

SpessaSynth is a SoundFont2-based real-time synthesizer written in TypeScript, previously pure JavaScript. This is a repository for the web application, it used to be a monorepo containing the entire project.

SpessaSynth Project index

SpessaSynth Web App

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

SpessaSynth promotional image

v4.4.0 The XG Update is here!

Featuring full Yamaha XG effects with a new GUI, GS User Drum Sets, video export, a modular theme system, and a redesigned settings menu!

Online Version (no download needed!)

Download Local Edition

Made with SpessaSynth

Watch the YouTube video

Usage Guide

Supported Browsers

  • Chromium-based: such as Google Chrome, Microsoft Edge, Brave, Opera, etc.
  • Gecko-based: such as Mozilla Firefox, Floorp, Zen, Waterfox, Librewolf, etc.
  • Chrome for Android/Chromebook
  • Firefox for Android

Features

  • Visualization of the played sequence: with cool effects like visual pitch bend and note-on effects!
  • Video export: Render the visualization, keyboard and audio to WebM or MP4!
  • Full Yamaha XG and GS effects: Control reverb, chorus, delay and insertion effects from the GUI!
  • GS User Drum Set support: Custom drum kits configured by MIDI files play and render correctly!
  • Themes: Choose from many dark and light themes, with matching note colors!
  • Redesigned settings menu: Easier to navigate and customize!
  • 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: Enjoy SpessaSynth on your phone!
  • Extensive language support:
- English - Polish - Japanese (translated by src3453) - French (translated by Davy Triponney & Samuel Louf) - Portuguese (translated by Lucas Gabriel) - Simplified Chinese (By 懒洋君) - Italian (By ItsFilyy) - Russian (By TGaming03) - Georgian (By TGaming03) - 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 - Render the visualization to a video (.webm or .mp4) - 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:

Local Edition

_SpessaSynth: Local Edition_ comes with easier soundfont management than the demo version, also allowing to use it offline! You can download it here.

[!IMPORTANT]
Firefox is recommended due to Chromium's 4GB memory limit.
A decent computer is also recommended for high-polyphony sound banks.

Recommended high-quality SoundFont for Local Edition

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
  • wasm-media-encoders - for the Ogg Vorbis encoder
  • Bootstrap Icons - for the icons
  • fflate - for the MIT DEFLATE implementation
  • JSZip - for the ZIP creation library
  • mediabunny - For the media toolkit
  • foo_midi - for useful resources on XMF file format
  • corrscope - for the correlation trigger algorithm used to stabilize the waveforms
  • 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 per voice
  • 2.0.0 - Implemented the worklet system and added support for modulators
  • 3.0.0 - Moved to audioWorkletGlobalScope for offline audio rendering
  • 4.0.0 - Rewrote the project in TypeScript

License

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

Third-party licenses

The waveform stabilization trigger (src/website/js/renderer/base/waveform_trigger.ts) is a modified port of the correlation trigger from corrscope, used under the following license:

BSD 2-Clause License

Copyright (c) 2018-2020+, nyanpasu64 All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
  • Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Legal

This project is in no way endorsed or otherwise affiliated with the MIDI Manufacturers Association, Roland Corporation, Yamaha Corporation, 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.

Chat with me