Releases: spessasus/SpessaSynth
v4.1.0 - The Engine Update
Thank you for almost 300 stars!
Hello everyone,
After 4 months, I'm happy to annouce another update to the SpessaSynth project!
It mostly focuses on spessasynth_core and its major audio engine upgrades.
SpessaSynth Web App patch notes
Changes & Additions
- Implemented the Hybrid Audio Engine (#187) for per-browser optimized approach
- Removed the voice cap when exporting audio
- Disabled custom vibrato in demo songs
- Allowed the
.smfextension - Disabled logging in Local Edition by default (enable with
manager.synth.setLogLevel(true, true, true)) - Added support for the Media Session API: Playback notifications!
- Added an otpion for emulating MSGS style note cutoff (#193)
- Updated Local Edition to support Node.js below v21 (#194)
- Improved build scripts
- Added installation instruction to Local Edition
- Updated spessasynth libraries to 4.1.0
- Added the Poly/Mono mode button to the synthesizer controller (#194)
- Added new ESLint plugin and Git hooks for Prettier formatting
- Reformatted the entire codebase
- Updated documentation formatting
- Added an option for forcing full visual velocity to the MIDI keyboard
Fixes
- Fixed separate channel rendering option not resuming correctly
- Fixed keyboard on mobile when changing the key range
- Fixed demo awaiting a click before running
- Fixed dark mode for browsers on Windows
- Fixed ZSWP stacking issues in subtitles (#179)
- Fixed RMIDI exporting
- Fixed subtitle collision (#181)
- Fixed tempo display
- Fixed sideways layout on Chromium-based browsers
- Fixed solo button when executing a system reset
- Fixed various media session bugs
I hope you enjoy the update :-)
v4.0.0 - The TypeScript Update
Thank you for +200 stars!
Hello everyone,
I'm proud to announce the biggest update SpessaSynth has seen so far: The TypeScript Update!
The entire project has been rewritten in TypeScript, improving the code quality and coding experience not only for me, but also for the users of the library who now have access to auto-completion for all of spessasynth's functions, as well as descriptions for them!
The highlights include:
- FULL bank LSB support: Featuring an advanced preset selection algorithm that works with all 4 MIDI systems: GM, GS, GM2, XG!
- Brand-new DLS parser: The DLS parser has been rewritten from the ground up, improving the accuracy of the conversions from and to the SF2 format!
- WorkerSynthesizer - a brand new synthesizer for
spessasynth_lib, previously only exclusive to the web-app: Allows direct audio engine access while still rendering in a separate thread! - Reworked API - obsolete classes and methods have been removed and existing ones have been overhauled if needed. Back when these were first designed, I didn't even plan on making spessasynth a library :-)
- Brand-new documentation pages - say goodbye to GitHub Wiki! The new wiki pages (also updated) use MkDocs, allowing for cool features such as code embedding (for examples) or a search function! They also look nicer!
I hope you enjoy it :-)
Note: The v3 spessasynth libraries are no longer supported or maintained. Please update! The migration guides are available: core lib.
Now, onto the changes!
spessasynth_core
Additions
- The library is now fully typed, with many JSDoc comments for documentation directly in your IDE
- Typescript
- New "MIDI Patch" bank selection system allowing for supporting various MIDI bank selection systems
- Full bank LSB support and an advanced preset selection algorithm that works with all 4 MIDI systems
- automatic SF2 preset shadowing if needed
- New examples
- New DLS parser/writer
- Brand new documentation page with complete documentation
- Documentation in the types themselves
- Monophonic retrigger mode (spessasus/spessasynth_core#7)
- missing MIDI controllers (and better controller names)
- Date object for sound bank info date and MIDI Date + ISO-8601 dates and a non-standard date parser
- Support for bank LSB in sf2 files that make use of them (SFe-Team-was-taken/SFEReferenceImplementation_Core#3)
- MobileBAE instrument aliasing support (spessasus/spessasynth_core#14)
- reworked BasicSoundBank API optimized for editing sound banks (used by SpessaFont)
- eventHandler for the sequencer
- helper functions for getting RMIDI info, song's decoded name, extra metadata and more
Improvements and fixes
- removed old and confusing APIs and replaced them with better alternatives
- faster hermite interpolation
- more optimizations
- faster modulator cache lookup with a single pre-allocated transform cache block
- special treatment for the resonant modulator, for better accuracy with XG MIDIs
- fixed possible genrator overflow (#169)
- lyric events are now sorted (spessasus/spessasynth_core#10)
- fixed looping mode 2 with loop points set to zero (spessasus/spessasynth_core#12)
- modulator source is now a separate object with its own helper functions
- better DLS reading and conversion with more accuracy (thanks to @rsp4jack)
- a proper DLS structure for a cleaner implementation
- cleaner SF2 write code that doesn't modify the sound bank itself
- better globalization algorithm
- better preset flattening algorithm
- prettier-formatted code + strict eslint checks
- extended chunks will no longer be written to SF2 files if not needed
- more logical sequencer and synthesizer behaviors
- pitchWheel now uses a regular 14-bit pitch value instead of the confusing MSB and LSB combo, a leftover from the very first days of spessasynth when I didn't know how to merge the two :-)
- midi tracks in a
BasicMIDInow have their own class with their data - more changes that would be too long to document here
spessasynth_lib
Additions
- The library is now fully typed, with many JSDoc comments for documentation directly in your IDE
- Typescript
- Brand-new documentation page with updated documentation
- WorkerSequencer - a sequencer that runs in a Web Worker for additional functionality
Improvements and fixes
- More logical sequencer and synthesizer APIs - no longer require songs and sound banks on initialization
- a lot of the code has been rewritten
- prettier-formatted code + strict eslint checks
- preservePlaybackState is always on for the sequencer
- API more in line with spessasynth_core
- Reverb and chorus processors can be used standalone
- pitchWheel now uses a regular 14-bit pitch value instead of the confusing MSB and LSB combo, a leftover from the very first days of spessasynth when I didn't know how to merge the two :-)
- better MIDIDeviceHandler
- better audioToWav
- fixed building the library on windows
SpessaSynth Web App
Additions
- Full bank LSB support in the preset selector
- Save all separate channels as a ZIP file
- Overhauled audio system to use web workers to fix the chromium bug (spessasus/spessasynth_lib#8)
Improvements and fixes
- Preview transpose when paused (#182)
- Unload subtitles when a new song is played (github.com//issues/180)
- Synthesizer controller reports blank presets under certain conditions (#171)
- Way more robust settings saving system, will now discard settings if they get corrupted and keep the last correct version
v3.27.0 - The SpessaFont Update
A new program joins the SpessaSynth project!
Hello everyone,
Today I'm announcing the release of my Online SoundFont2/DLS Editor - SpessaFont. It is based on the same libraries that SpessaSynth Web App uses, both written by me.
Featuring full SF2 editing, including modulators, generators and more!
Highlights include:
- Full SF2/SF3/DLS read and write support
- Fully online, no download needed
- Built-in MIDI player that responds to changes instantly
- Automatic Stereo Sample naming, editing and grouping
- Deleting unused elements
- Automatically linking stereo samples based on their names
I hope you enjoy it :-)
Changes
SpessaSynth Web App
- Added more documentation and issue templates
- Locale fixes
- Improvements to the loading screen
- Added extra sound bank with offset uploading (for AWE32 MIDIs)
- Implemented wakelock - phones should no longer sleep when playing a song
- Fixed time signature (#159)
- Translation updates
- Improved renderer performance
- Fixed loading the default sound bank
- Added What's New? Menu
- Added new renderer mode: filled waveforms
- Brand-new build script and better download
- Removed binaries from the git repository
spessasynth_lib
- Wiki updates
- Reworked examples
- Better build scripts
- binaries removed from the repository
- Added playback speed to offline audio rendering options (#157)
- Exposed Audio Effects for use outside of the synthesizer
- Sound bank Manager can now override
- Fixed meta event return types
- AudioBufferToWav now accepts less or more than 2 channels
spessasynth_core
- fix (#153)
- improved and reworked the documentation
- improved and reworked the examples
- fix voices not clearing after change
- reworked the embedded sound bank behavior
- add support for GS controller to parameter modulation (#154)
- overhauled the SysEx parser
- fix port offsets being empty sometimes
- allow overwriting sound banks in the sound bank manager
- added AWE32 NRPN support
- fixed MIDI writer
- added more NPN exports
- added SF2 NPRN support
- updated DMOD support according to the proposal
- updated the BasicSoundBank internal structure
- improved performance of the sound bank writing
- changed sound bank writing into async, to support async SF3 compression
- SF2 Parser rewrite and enhancements:
- linked instruments, linked presets
- writing empty banks properly
- proper API for bank editing
- audioBufferToWav can now take a different channel count
- overhauled linked samples:
- not an index, but a sample now
- written properly
- invalidated automatically
- fix channel pressure not being reset
- fix linked compressed samples
- added safeguards for sound bank deletion
- added dynamic DLS sample loading
- added awaiting the SF3 decoder
- fix somewhat corrupted DLS files (#5)
- added cloning methods that automatically clone all dependents
- added the XDTA chunk support for extended SF2 limits
- better renderAudio API
v3.26.0 - The Split Update
Full Changelog: v3.25.0...4638337
SpessaSynth project has been split up!
Hello everyone,
Today I'm glad to announce that this project has moved from a monorepo into three repositories! The split should allow users to use the library outside browsers and for more precise manipulation of the sound data. Not to mention that it's a way cleaner solution than the mess that was the monorepo.
- SpessaSynth (this repository) is now only used for the browser-based application
- spessasynth_core for the core synthesis, sequencer, midi and sound bank engines
- spessasynth_lib for the browser wrapper for spessasynth_core (don't worry, it's mostly the same as before)
Read more about the split (and breaking changes) here
Other changes since 3.25
- Added XG drum bank support
- Added GM2 drum bank support
- Added XG LSB bank support
- Added "midiSystem" property to spessasynth_lib
- Fixed filter (#135)
- Added new issue forms!
- Added more useful properties to
Sequencerclass - Added new renderer modes: Waveforms, waveforms split
- Fixed DLS generators being flipped
- Fixed MIDI master volume
- Fixed canvas resolution not updating
- Address findings from (#138)
- Add support for Lilypond (#141)
- Allow scheduling events (#143)
- Fixed stbvorbis
- Fixed sequencer options (#144)
- Fixed MIDIs not starting with 0 ticks (#145)
- Fixed short lyrics (#142)
- Compressed the default reverb to save space
- Removed the requirement to manually copy the flac file
- Added port description (#148)
- Added support for MTS bulk tuning dump (#150)
- split the worklet and the engine to allow for separation
I hope you enjoy :-)
v3.25.0 - The Big Update
Full Changelog: v3.24.0...d4f9ff8
Massive thanks to @TS53 for suggesting and testing a lot of new features!
It has been almost 4 months since the last major release of SpessaSynth. Time sure flies!
Now, onto the patch notes:
Additions
- Added note after trigger time to the renderer settings
- Added more tips to settings
- Added tempo change listener to the Sequencer
- Allowed custom WebAudio wrappers, such as the
standardized-audio-context(#97, reported by @this-fifo) - Added loop count to the sequencer(#116, suggested by @altaico)
- Added portamento support, using the XG/GS portamento timing
- Added meta event listener to the Sequencer
- Added random pan SysEx support
- Added support for more parameters
- Added a helper for MIDI Tuning standard
- Added BPM display
- Added Time Signature display
- Added a hold pedal message when on
- Added ISBJ as valid metadata to music mode
- Added Advanced configuration menu, allowing voice cap modification (#121, suggested by @Falcosoft in VOGONS forum)
- Added song shuffling
- Added playback rate slider (#120 Shoutout to @TS53 for testing!)
- Added more MIDI controllers and grouped them (#117, #127, Shoutout to @TS53 for testing!)
- Added Low-pass filter cutoff smoothing to prevent clicks on rapid filter changes (#124, reported by @kode54)
- Added a "show only used channels" button to the SynthesizerUI (#133, tested by @TS53)
- A small secret functionality just for @Falcosoft :-)
- Added XMF/MXMF support with zlib compression and embedded DLS (#134, #114)
Changes
- This project is now licensed under the Apache-2.0 license.
- Major, and I mean BIG code rewrite everywhere
- Improved XG display letters support
- Improved drop file handler
- The first MIDI input now automatically connects
- Tweaked the README a bit
- The website now accepts
.karfiles - The note exclusive cutoff time has been changed to reduce clicks
- Updated the French translation (#96) by @davy7125
- The local edition can now be downloaded from the demo website
- Optimized renderer note calculations
- The vorbis encoder is now dynamically loaded when used
- The website now accepts
.dlpfiles for DLS - Firefox is now properly recommended
- Adjusted overlapping notes in the renderer
- Wiki typo fixes
- Pan lookup table for better performance
- Filter coefficients caching for better performance
- MIDI editor (
modifyMIDI) rewrites that should fix Multi-Port bugs and improve performance - workletProcessorChannel is finally a class (#122)
- Moved all of the MIDI interpreting code to BasicMIDI, making it work with both MIDI files and MIDI builder (#123)
- The release time modulator has been tweaked
- The synthesizer controller locking behavior has been improved (#129, #127, Shoutout to @TS53 for testing!)
- Updated Polish translation
- Improved the transpose slider (#128, #130, suggested and tested by @TS53)
- The voice caching is now global, should improve performance
- Various voice optimizations
- Dark reader lock
- Removed local edition minified script
- Exclusive class optimization
- The reset all controllers CC is now RP-15 compliant
- The MIDI-related functions are now members of the BasicMIDI class
- The reverb is now a base64 encoded file, it should no longer be required to bundle it into your program explicitly
Fixes
- Fixed CSS erros in the keyboard
- Fixed typos, a lot of typos
- Fixed double lyrics repair
- Fixed 0-tick long MIDI files crashing the program (#106, reported by @kiam001)
- Fixed KMIDI karaoke files
- Fixed short samples not showing in waveform display
- Fixed newline in lyrics
- Fixed bytes above 127 in voice messages breaking things
- Fixed bank offseet of 1 being assumed for RMIDIs with no sound bank (#111)
- Fixed autoPlay always being on (#112, reported by @gkiranps)
- Fixed the sequencer updating time tracker even when paused
- Fixed subtitles flashing while (#109, reported by @TS53)
- Fixed font getting stretched on canvas
- Fixed pan smoothing being broken
- Fixed MIDI lyrics highlighting (#118, reported by @TS53)
- Fixed Black MIDI mode because it was just... broken?
- Fixed reset controllers not working with locked controllers
- Fixed portamento after adding it
- Fixed a crash with corrupted SF3 samples
- Fixed corrupted DLS files
- Fixed resolution not getting updated after top part has been hidden
- Fixed settings saving (#132, reported b @TS53)
- Fixed pitch envelope after optimization
- Fixed disabling NPRN
- Fixed portamento control locking
- Fixed DLS sample writing overflow
Wow, that might be the longest changelog so far :-)
v3.24.0 - The Karaoke Update
Full Changelog: v3.23.0...f6ce0a0
Thank you all so much for 100+ stars! It really means a lot to me :-)
Additions
ASS Subtitle support
- Upload your own subtitles in the .ass format!
- Karaoke tags support
- Embedded fonts support
- Limited support for other tags and override tags
Soft Karaoke Support
- Full support for lyrics in .kar files!
- Song title too!
- Other data available through copyright propery
System Exclusive Display support
- For both XG and GS
- Documented in the spessasynth_lib documentation
Others
- Added sample rate option when exporting audio
- Added an option to generate a dummy soundfont file
- Spessasynth now attempts to repair duplicated lyrics or ones that lack spaces
- New Wiki page dedicated to synthesizer's event handler
Changes
- The attenuation is now interpolated linearly, rather than logarhitmically (#81)
- Minor improvements in key modifier menus
- The loop points are now always written to the WAV file, rather than when no loops were rendered
- The lyrics menu had a major internal rewrite, should lag a lot less now in Firefox
- Improved and expanded the copyright and MIDI metadata detection significantly
Fixes
- Fixed audio export in Local Edition
- Fixed pan and attenuation smoothing in different sample rates
- Fixed timing issues with large waveform sample sizes and synced up keyboard and synth controllers to match
- Fixed DLS writing functions (#80)
- Fixed WINAMP rejecting DLS files written by spessasynth
- Major internal rewrites to the code and improvements with classes
- More verbose descriptions in the code
- Fixed karaoke after implementing it
- Fixed various css errors
- Fixed compressing very high or low sample rates failing and producing a corrupted soundfont
- Fixed force stop being sent in MIDI out
- Fixed various lyrics bugs
I hope you enjoy the new features and Happy New Year! :-)
v3.23.0 - The DLS Write Update
Actually it's 3.23.2 because I made two quick patches... but don't tell anyone!
Full Changelog: v3.22.0...70b6d62
Additions
DLS Writing support
- save a .sf2 soundfont as .dls!
- converts both generators and modulators as accurately as possible
- limited due to lack of layers and sources in DLS
Key modifier manager
- make a specific key play with a given instrument!
- especially useful with drums: mix rock snares, analog hi-hats etc.
- brand new GUI just for that too
Synthesizer functions
- adjust chorus and reverb levels of the synthesizer (or set to 0 to disable them) in real time
- the synthesizer can now be disposed of using
.destroy()method
Changes
Better DLS support
- fixed DLS attenuation modulators
- added support for A-law wave samples
- fixed DLS tuning
- DLS generators are now globalized if possible
- fixed effects modulators being added when they shouldn't be
- fixed envelope delay not being converted
- fixed DLS loop points
- added support for scale tuning equivalent for DLS
- minimum hi-hat time is now back to 0.07 seconds as it was before and sounded nicer
Fixes
- fixed volEnvDecay minimum value
- fixed low-pass filter clicks
- fixed light mode after the new patches
- fixed adding MSB instead of LSB when using midi editor on XG midis
- fixed filter being quieter when it is disabled
- fixed sequencer ignoring reset all controllers when seeking
- fixed inconsistent formatting
- fixed MIDI ports getting assigned to different tracks
- fixed cc reset affecting locked controllers in the event system
- fixed global zones having their ranges ignored
yay
v3.22.0 - The Language Update
This update fixes some bugs and enchances effects along with two new languages!
Full Changelog: v3.21.0...50eeb15
Additions
- French translation by @davy7125
- Brazilian/Portuguese translation by @lucmsilva651
- Added a way to prevent auto playback (suggested by @macca007x)
- Added a way to prevent resuming on seek (suggested by @macca007x)
- Brand-new effects configuration window
- New reverb and chorus effects
- New credits window for demo songs
- New demo example
Changes
- Tweaked the filterFc modulator
- Reverb is now mono (suggested by @mrbumpy409)
- Removed OggVorbisEncoder (sold separately)
- Wiki updates
- QoL preset selector tweak
- Updated locale guide
- Major rework of the chorus and sample modulators
Fixes
- Fixed MIDI Tuning Standard (reported by @paulikaro)
- Fixed bipolar modulators
- Fixed CC 10 panning being too extreme (reported by @mrbumpy409)
- Fixed preset selector crashing in RMI sometimes
- Fixed bank select not being sent properly
- Fixed override presets remaining when locked
- Fixed some system exclusives
- Fixed some CC changes not being reported in the event handler (reported by @twiggsApproved)
- Fixed chorus and reverb not being copied over in synthesizer snapshot
- Fixed reverb not being affected by the overall synth gain
v3.21.0 - The Sound Engine Update
Full Changelog: v3.20.22...9366f3d
This update fixes a bunch of bugs with the synthesis engine. Huge shoutout to @mrbumpy409 for finding and reporting most of these!
Additions
- Added the DMOD chunk support according to my proposal
- Added the ability to drop files into the app
- Added the Brightness controller to the synthesizer controller window.
- Added Cubic Interpolation (enabled by default)
- Added a brand new preset selector with a search function
- Added more DLS INFO defaults
- Added a new DLS to SF2 conversion website
Changes
- Updated GeneralUserGS to v2.0.0 (shoutout to @mrbumpy409 for creating it too!)
- "Disable and lock vibrato" now disables all GS NRPN parameters
- The default chorus and reverb modulators now use transform of 750 rather than 200
- The DLS pop-up now shows up only once
- Reformatted and cleaned up the codebase
- Sequencer now recognizes the "program name" meta message
- GS reset now actually resets the synthesizer
- Added support for more system exclusives
- Volume envelope is now separate from the initial attenuation generator
- Sample offsets can now be modulated (reported by @mrbumpy409)
- Lowered the default voice cap from 450 to 350
- Added a new default modulator: CC 71 to filter reasonance (documented in the MIDI implementation)
- Some controllers now have new reset values (documented in the MIDI implementation)
Bugfixes
- Fixed WAV export normalization not working
- Fixed sample fine-tune being ignored during DLS conversion
- Fixed DLS presets not being sorted internally
- Fixed duplicate preset names in soundfonts being handled incorrectly
- Fixed modulation envelope release time usingvolume envelope's release time
- Fixed sustained looped voices never ending
- Fixed Sequencer playing back via Web MIDI API not sending the correct messages
- Fixed DLS file type in HTML input
- Fixed multiline copyright detection
- Fixed clicking in volume envelope attack phase
- Fixed generators not being limited at the modulator level
- Fixed voices ending too early (reported by @mrbumpy409)
- Fixed looping mode 3 starting playback too early (reported by @mrbumpy409)
- Fixed DLS loop point offsets
v3.20.22 - The Something Update v2
Full Changelog: v3.20.12...766242d
Additions
- Added loop amount when rendering audio to a WAV file
- Added writing Cue Points as loop markers to a WAV file
Fixes
- Removed negative attenuation, which previously fixed other bugs related to attenuation
- Fixed initial attenuation calculation, for real!!!!!!!
- Internal Worklet Voice rewrite to use classes, should improve performance
- Fixed crash in Firefox due to a bug in the browser
- Removed delay when sample size is set to 1024
- Fix audio normalization
- Fix clicks in filter
- Fix clicks in volume envelope
- Fix vibrato disabling error
- Other bug fixes