A powerful soundfont/MIDI JavaScript library for the browsers.
npm install --save spessasynth_lib
import { Synthetizer } from "spessasynth_lib"
const sfont = await (await fetch("soundfont.sf3")).arrayBuffer();
const ctx = new AudioContext();
// make sure you copied the worklet processor!
await ctx.audioWorklet.addModule("./worklet_processor.min.js");
const synth = new Synthetizer(ctx.destination, sfont);
document.getElementById("button").onclick = async () =>
{
await ctx.resume();
synth.programChange(0, 48); // strings ensemble
synth.noteOn(0, 52, 127);
}
- Modular design: Easy integration into other projects (load what you need)
- Detailed documentation: With examples!
- Easy to Use: basic setup is just two lines of code!
- No dependencies: batteries included!
- Suitable for both real-time and offline synthesis
-
Excellent SoundFont support:
- Full Generator Support
- Full Modulator Support: First (to my knowledge) JavaScript SoundFont synth with that feature!
- GeneralUserGS Certified: See more here!
- SoundFont3 Support: Play compressed SoundFonts!
- Experimental SF2Pack Support: Play soundfonts compressed with BASSMIDI! (Note: only works with vorbis compression)
- Can load very large SoundFonts: up to 4GB! Note: Only Firefox handles this well; Chromium has a hard-coded memory limit
- Soundfont manager: Stack multiple soundfonts!
- DLS Level 1 and 2 Support: works with gm.dls!
- Reverb and chorus support: customizable!
- Export audio files using OfflineAudioContext
- Custom modulators for additional controllers: Why not?
-
Written using AudioWorklets:
- Runs in a separate thread for maximum performance
- Supported by all modern browsers
- Unlimited channel count: Your CPU is the limit!
-
Excellent MIDI Standards Support:
- MIDI Controller Support: Default supported controllers here
- MIDI Tuning Standard Support: more info here
- Full RPN and limited NRPN support
- Supports some Roland GS and Yamaha XG system exclusives
- High-performance mode: Play Rush E! note: may kill your browser ;)
- Supports MIDI formats 0, 1, and 2: note: format 2 support is experimental as it's very, very rare
- Multi-Port MIDI support: More than 16 channels!
- Smart preloading: Only preloads the samples used in the MIDI file for smooth playback (down to key and velocity!)
- Lyrics support: Add karaoke to your program!
- Raw lyrics available: Decode in any encoding! (Kanji? No problem!)
- Runs in Audio Thread as well: Never blocks the main thread
- Loop points support: Ensures seamless loops
- Smart name detection: Handles incorrectly formatted and non-standard track names
- Raw name available: Decode in any encoding! (Kanji? No problem!)
- Port detection during load time: Manage ports and channels easily!
- Used channels on track: Quickly determine which channels are used
- Key range detection: Detect the key range of the MIDI
- Easy MIDI editing: Use helper functions to modify the song to your needs!
- Loop detection: Automatically detects loops in MIDIs (e.g., from Touhou Project)
- First note detection: Skip unnecessary silence at the start by jumping to the first note!
- Write MIDI files from scratch
- Easy saving: Save with just one function!
Read and write RMID files with embedded SF2 soundfonts
- Level 4 compliance: Reads and writes everything!
- Compression and trimming support: Reduce a MIDI file with a 1GB soundfont to as small as 5MB!
- DLS Version support: The original legacy format with bank offset detection!
- Automatic bank shifting and validation: Every soundfont just works!
- Metadata support: Add title, artist, album name and cover and more! And of course read them too! (In any encoding!)
- Compatible with Falcosoft Midi Player 6!
- Easy saving: As simple as saving a MIDI file!
- Easy info access: Just an object of strings!
- Smart trimming: Trim the SoundFont to only include samples used in the MIDI (down to key and velocity!)
- sf3 conversion: Compress SoundFont2 files to SoundFont3 with variable quality!
- Easy saving: Also just one function!
- Same features as SoundFont2 but with now with Ogg Vorbis compression!
- Variable compression quality: You choose between file size and quality!
- Compression preserving: Avoid decompressing and recompressing uncompressed samples for minimal quality loss!
- Read DLS (DownLoadable Sounds) files as SF2 files!
- Works like a normal soundfont: Saving it as sf2 is still just one function!
- Converts articulators to both modulators and generators!
- Works with both unsigned 8-bit samples and signed 16-bit samples!
- Covers special generator cases: such as modLfoToPitch!
- Correct volume: looking at you, Viena and gm.sf2!
- Support built right into the synthesizer!
- Convert SF2 to DLS: with limitations;
- Save the MIDI file as WAV audio!
- Metadata support: Embed metadata such as title, artist, album and more!
- Cue points: Write MIDI loop points as cue points!
- Loop multiple times: Render two (or more) loops into the file for seamless transitions!
- That's right, saving as WAV is also just one function!
MIT License, except for the stbvorbis_sync.js in the externals
folder which is licensed under the Apache-2.0 license.