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.
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!
Windows ·
Linux x64 ·
Linux ARM64 ·
ZIP (needs Node.js)
Made with SpessaSynth
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!
[!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
Standalone version (Windows and Linux)
SpessaSynth now comes as native executables in addition to the old Node.js version!
Download the file for your system from the links at the top (or the Download button on the website),
unpack it and start SpessaSynth. Nothing else needs to be installed!
It opens in your browser and closes by itself once you close its last tab,
fully automatically!
- First start: if you have no sound banks yet, SpessaSynth can download the default GeneralUser GS for you.
- Sound banks and settings are kept in a folder for your user:
- Windows:
%LOCALAPPDATA%\SpessaSynth
- Linux:
~/.local/share/SpessaSynth (or $XDG_DATA_HOME/SpessaSynth)
- Portable mode: create a folder named
data next to the executable and everything is kept there instead.
The SPESSASYNTH_HOME environment variable picks any other folder.
- Automatic updates: SpessaSynth checks for a new version on start and asks before updating itself.
Set
"autoUpdate": true in config.json to update without asking,
or "checkForUpdates": false (or start it with --no-update-check) to turn the check off.
- Other devices on your network: start it with
--lan. It then keeps running until you close its window.
Windows may show a SmartScreen warning since the executable is not signed.
Choose “More info”, then “Run anyway”.
Linux: some file managers do not start programs on double-click. Run ./SpessaSynth from a terminal once,
or use ./SpessaSynth --install-launcher (or the button in the sound bank folder menu) to add it to your
applications menu.
macOS is not supported by the standalone version yet. Use the ZIP version there.
ZIP version (needs Node.js)
The ZIP version runs anywhere Node.js does.
It keeps its sound banks in its own soundfonts folder.
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.
npm run build:binary builds the standalone executables into dist/ as well. It needs Go,
see src/executable/go.mod for the version.
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.
评论