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_core - SF2/DLS/MIDI library
- spessasynth_lib - spessasynth_core wrapper optimized for browsers and WebAudioAPI
- SpessaSynth (you are here) - online/local MIDI player/editor application
- SpessaFont - online SF2/DLS editor
SpessaSynth Web App
The complete GUI for spessasynth_lib, allowing remixing, experimenting, and playing MIDIs in the coolest way possible.
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
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:
Web MIDI API support: Use your physical MIDI devices!
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 startinvokes.
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.