This page contains changelogs for all release versions of Surge XT. For the latest developments, we are keeping a separate nightlies changelog, which will be merged to this page upon release.
Changelogs for versions prior to Surge XT 1.0 release can be found here.
Changes in Surge XT 1.3.4
Surge XT 1.3.4 contains bugfixes, a few expanded features, and some infrastructure changes as we head towards 1.4 and Shortcircuit XT. 1.3.3 was released the same day as 1.3.4, and had a single bug which led us to immediately fix and re-release.
DSP
- Updated Wavetable and Window oscillators to correctly work with full-range 16 bit WT files
- This means that all the factory wavetable files from Bitwig Studio are loadable in Surge XT
- Updated the .wt format documentation to clarify some issues with 15-bit vs 16-bit range
Open Sound Control
- Surge XT Effects plugin now supports OSC
- Refactoring for the core OSC message types
- Resetting tuning via OSC will now refresh the Tuning Editor
- Fixed a bug when parsing some modulation mappings sent via OSC
Command Line and Python Interface
- Implemented handling of input and output audio busses
- CLI can now run without checking
stdin
to quit, for daemon-style operation - Correctly handle tempo stored in patches and update PPQ position in the Python evaluator
- Python bindings can handle input and output audio streams
Smaller Changes and Fixes
- Updated all LFO and Step Seq presets, activating the LFO EG where it was disabled
- Renamed the SILM (extended ring modulation) modes
- Added cycle length (in seconds) display to the LFO Rate tooltip
- Renamed Extend Range option for Pitch Bend Up/Down parameters to âUse Decimal Valuesâ
- Fixed some inconsistent parameter defintions and formatting for FM2 and the Frequency Shifter effect
- Cleaned up the voice state when leaving latch mode, fixing a bug when moving from Latch mode to mono modes.
Infrastructure
- Added warning flags for newer clang versions
- Upgraded SIMDE to version 0.8.2; SIMDE will now be used for any non-x86 platform
- Rebased our JUCE fork to JUCE 7.0.12
Changes in Surge XT 1.3.2
Surge XT 1.3.2 contains mostly small bugfixes, a couple more medium sized ones, and further expansion of the OSC protocol support.
Open Sound Control
- Implemented full support for parameter Extend Range, Deform, Absolute etc. modifiers
- Parameter changes caused by VST3 automation are now echoed to OSC output
- Added
/wavetable
address, allowing wavetable loading and querying - Added
/patch/load_user
and/patch/save_user
addresses, allowing access to the user patch area - Added MIDI-style controllers (
/pbend
,/cc
,/chan_at
,/poly_at
) - Tuning scale and/or keyboard mapping is now echoed to OSC output after GUI changes
/doc/param/...
parameter documentation messages are now sent along with response to/q/
queries- When deactivating an effect, correct scene and effect index values are now sent to the output when echoing
- Correctly capitalized the TouchOSC menu entry
Plugin
- For certain Windows configurations, Surge XT would not operate with the FPU flags set properly, leading to bad performance in some cases
- VST3 context menus are now looking cleaner in FL Studio (section headers) and Reaper (disabled entry with parameter name at the bottom is removed, since we already mention our parameter names at the top of the menu)
- âTuning applied atâŚâ setting is now stored to the plugin state
MIDI
- Added an option to âSoft takeover MIDI learned parametersâ in Menu -> MIDI Settings
Effects
- BBD Ensemble and Tape effects now correctly respond to sample rate changes in a single session
- Added output reconstruction filter to the BBD Ensemble effect
Modulation
- When Scene LFOs were modulating effect parameters, LFO output index was ignored, which means Formula modulator did not work correctly across its multiple outputs
- Added âFreeze release at sustain levelâ option to Amp and Filter EGs, allowing more intricate shaping of release stage by using MSEGs and so on
Tuning
- Fixed an issue where when Surge XT acted as an MTS-ESP source, the UI needed to be open to send tuning updates
- Resolved conflict between MTS/ESP tuning and âUse MIDI channel for octave shiftâ mode
- The radial stretch option in the Tuning Editor now has a minumum repetition interval of 100 cents, avoiding a stuck scale situation
Patch Browser
- Fixed a scanning error when patch directories contained symbolic links
- Fixed incorrect naming of category subfolders for categoties that contain more than 256 patches
- Fixed a crash if the userâs Documents folder was read-only upon saving a patch
- Improved patch search by using a broader query to find more patches, including categories
Accessibility
- Enter key now works properly with number field widgets (Pitch Bend, Keytrack Root, etc.)
- Per-step value type-ins in the Step Sequencer now properly return keyboard focus to the modified step after the edit
UI/UX
- Fixed a crash that was caused when changing the LFO from Formula mode (with the editor and the debugger opened) to MSEG mode
- Windows users with a corrupted and non-resolvable
%DOCUMENTS
path will now get clearer error messages and a more usable synth - Improved error handling for unopenable patches and other path-related errors
- Tempo value is now saved to the patch (useful in standalone mode only)
- Scene Mode context menu entries now follows the order of modes listed on the GUI
- Per-step value type-ins in the Step Sequencer can now accept fractional input (1/12âŚ)
- Fixed an issue where in modulation armed mode, edits of parameters which are not modulatable would not be properly added to the undo stack
- Implemented proper mousewheel support for the Multiswitch widget in the skin engine
- Fixed some edge cases when displaying modulation amounts, related to second/milisecond unit switching
Command Line Interface
- Improved message logging
- Cleaner shutdown procedure on macOS
- Minor tweaks to the verbiage used throughout the CLI
Infrastructure
- Links to OBS builds are now official surge-synth-team URLs rather than private ones from @baconpaul
- Linux path resolution is now updated to allow the same portable mode facilities as on Windows, if desired
- Adjusted some compiler flags anticipating a move to C++20 in the near future
- Added a CMake option to turn off
-Werror
- Added a build time option to expose factory presets as JUCE presets
- Added Melatoning inspector, a tool allowing easy UI debugging for developers
Content
- Fixed the Init FM2 template patch, it had waveshapers and filters deactivated by mistake
Changes in Surge XT 1.3.1
Surge XT 1.3.1 contains bugfixes to the 1.3.0 release and a continued expansion of our OSC protocol support. It also provides a broader set of choices for Linux users who want to download a binary, as opposed to self-build.
Open Sound Control
- Consolidated all OSC settings into a single settings dialog
- Added an option to set the IP address for OSC output
- Added a set of messages for getting and setting modulation values
- Improved and expanded outbound messages allowing Surge XT to work with TouchOSC
- TouchOSC template is linked from the help [?] menu in the new OSC settings dialog
- Fixed a bug where modifying mixer solo and mute over OSC would update the engine, but not the GUI
Plugin
- Upgraded to CLAP to 1.2.0
- Implemented the CLAP
preset-discovery
andpreset-load
extensions- This means DAWs like Bitwig Studio and MultitrackStudio have access to the entire set of factory, 3rd party, and user presets in the DAW and can create a track with a preset loaded
- Restored our build pipeline to Ubuntu 18.04 and gcc 9 with a Docker image, lowering the
libc
requirement - Applied fixes to allow the LV2 to build in CI pipeline, although we still have better behavior in most settings with CLAP or VST3 plugins, LV2 is now back in the binary bundle again
- Added a suite of OBS builds for various Linux distributions - this means we have nightly and release builds for Linux aarch64, ready for your ARM devices!
DSP
- Ensemble effect clock rate lower bound clamped to avoid underflows (sound disappearing). This will result in existing patches responding differently under modulation of this parameter
- Feedback summation in the Ensemble effect was incorrect, so it is fixed now. This can also result in existing patches sounding slightly differently (for the better, we would say)
- Fixed Sine oscillator modulation of Feedback parameter crossing zero created clicks in the output
- Retriggering Amp and Filter EGs with modulators now properly obeys the Envelope Retrigger Behavior option in monophonic modes (Retrigger from zero vs Continue from current level)
- Fixed occasional crashes in Twist oscillator related to parameter uni/bipolarity
- Clamped lowest frequency for Twist oscillator to 2 Hz in order to prevent CPU overloads
- Clamped String oscillator tuning to the length of delay line, avoiding problems with very low frequencies
- Fixed a bug where MIDI All Notes Off message would occasionally miss a note
UI/UX
- Improved patch comment tooltip display (in some cases text would be cut off)
- Favorite and Find button in the Patch Browser are now accessible and can be focused via keyboard
- Ctrl+click or Ctrl+Shift+F10 in the Patch Browser will open the menu listing only user patches
- Text input fields in Patch Store dialog, Tuning Editor and OSC Settings dialog will not keep showing the text selection range after losing focus anymore
- Switched time-based display units to milliseconds when below one second
- Corrected left/right mouse click behavior of the Tune button in Status section
- Created an undo entry for parameter value typeins
- Tuning Editor keyboard can now play notes when clicked
- Fixed an off-by-one error which made the Rotation page in Tuning Editor show the wrong tone by one key
- Changing an effect type clears modulation again (this was a regression introduced in Surge XT 1.1)
- Undo changing an effect type will now restore modulation as well
- Swapping or moving an effect will now preserve modulation mutes
- Fixed MSEG editor not drawing vertical lines when time was below 0.1 phase units
- Fixed a crash in MSEG editor after a certain scenario when deleting nodes left the loop in invalid state
- Formula editor now asks if you really want to close it when clicking the X button in the title bar (previously this only worked when pressing Escape key)
- Formula editor debugger now shows realtime parameter updates
- Filter Analysis window no longer focuses Filter 1 tab button upon opening
- Alert dialogs now respond to Enter and Escape keys immediately, without tabbing into the dialog
Infrastructure
- Windows installer now shows a Surge-themed banner instead of the generic default one
- Updated
clang-format
to version 17 in CI - Fixed a build problem with gcc7
- Added a CMake bypass for the Linux 32-bit early-fail warning
- Added Bluetooth permission text to the standalone, fixing a crash on macOS 13 in some cases
- Integrated the Superparasites firmware for Clouds/Nimbus (but not implemented yet)
- Added guards for LV2 headless builds
- Be a bit more pedantic/explicit about the in-place constructor strategy with
SurgeVoice
, squashing a debug-only memory leak in some MSVC debug settings, but also making the code a bit more correct - CLI with OSC running will now quit properly on Linux
Code Refactoring and Quality
- Split
SurgeGUIEditor
menu make/show methods to a separate file - Fixed MSVC
stdext::checked_array_iterator
warnings - Improved the time taken to rebuild the SQLite patch database used for rapid searches
- Added a modulation edit begin/end gesture to the modulation change listener
- Allowed tests to build if Lua is not available
- Updated code headers to reflect the year 2024 in the copyright
Content
- New patches from John Valentine
- Template patches now all have balanced output level to -15 dB RMS
- Restored some missing Formula modulator tutorials mistakenly excluded from 1.3.0 release
Changes in Surge XT 1.3.0
We released Surge XT 1.3.0 on December 8, 2023. This release contains a wide variety of performance-focused enhancements, new effects, expanded DSP, and many bug fixes and small improvements.
You can now gain complete control of the synth using OSC, use MIDI Program Changes to load patches, and have access to a command-line only version of the synth for embedded and headless applications. The new effect, Bonsai, is an exciting tape and saturation model. Expanded ring modulation options in the mixer allow for a myriad of growls, squeals, boosts, and signal combinations. The expanded Tuning Editor gives a variety of realtime visualizations for your scales and tunings. Plus, we have added some new patches and modulator presets. And these are just the headlines! More detailed changelog is as follows.
Open Sound Control
- Added a complete Open Sound Control implementation. For more information, see âOSC Settings > Show OSC SpecificationâŚâ in the main menu
MIDI
- Added support for MIDI Program Change messages
- The user patches folder can now contain a
MIDI Programs
- Patches at the root of
MIDI Programs
folder will form Bank Select 0, if present - Subfolders inside
MIDI Programs
folder will form Bank Select 1 ⌠127, if present - In each bank, patches are sorted in alphabetic order
- Only the first 128 patches will be available from every folder
- The user patches folder can now contain a
- Added support for discerning MIDI channel when MIDI learning parameters
- Disallowed MIDI learn on reserved MIDI CCs (like Bank Select, Data Entry, RPN/NRPN, All Sound Off, etc.)
- Fixed a bug where when Dual scene mode with MPE enabled, Play Mode set to Latch and âUse MIDI Channels 2 and 3 to Play Scenes Individuallyâ option disabled would trigger voices on the unlatched scene
Command Line Interface
- Implemented a pure CLI version of Surge XT for headless (no GUI) operation
- This is available as
surge-xt-cli
on Linux,cli
executable in the standalone bundle on Mac, and as a separate install for Windows users - Combined with OSC and MIDI Program Change support, this allows a variety of new and useful embedded and headless implementations
Effects
- Bonsai is a really organic sounding distortion effect, combining a highly non-linear bass boost with an emphasis-filtered waveshaper and noise AM. It excels at a wide range of very beefy gnarly sounds, but can sound very good at subtle settings too
- Audio In is the same functionality as the Audio In oscillator type, simply allowing you to insert audio into the signal path downstream from filters and waveshapers
- Y and Z filters are freshly added members of the Airwindows effect now
- Ring Modulator effect now also has audio input available as carrier
- Added extendability to Delay effectâs Feedback and Crossfeed parameters (making them bipolar), and Mod Depth parameter (increasing it from 2 semitones to an octave)
- Fixed a bug where Tape effectâs Drive parameter Precision options and Delay effectâs Feedback Limiting options (in right-click context menu) didnât load correctly
DSP
- Ring Modulator channels in the Mixer now have a large number of alternate combinator modes (Complex XOR and Scale-Invariant Linear Modulation)
- FM3 oscillatorâs M3 Frequency parameter is now extendable down to 0.5 Hz
- Fixed a bug where oscillator initialization ignored the octave setting, which caused a very small initial glide in String and Modern oscillator
- Added a âVintage FMâ feedback mode for Sine, FM2, and FM3 oscillator, which uses the average of last two samples to calculate feedback (like on the very first FM synthesizers)
- Doubled the delay buffer of comb filter (now itâs 4096 samples), allowing lower frequencies to sound proper at high sample rates
- This is a CMake option so self-builders can revert to how it was before, if Surge XT needs to run in a more memory constrained scenario
- Fixed a half-sample initial phase offset error in Modern oscillator when retriggering from zero
- Added an option to mute an entire scene via right-click context menu on Scene Volume parameter
- This is useful for sending scene A audio into B, but note that it also bypasses scene insert effects!
Modulation
- Added various useful math functions (parity, signum, sign, rescaleâŚ) and a slew limiter to the Formula modulator prelude
- Added an alias for
intphase
state variable in the Formula modulator,cycle
- Removed Formula modulator subscriptions for timing and LFO state, they are now always available
- Removed Formula modulator subscription for voice parameters, they are now always available in voice LFOs and never available in scene LFOs
- Reverb 1 Size parameter can now be modulated without resetting the feedback network - sounds kinda odd but also fun!
Tuning
- Added two new visualizations to Tuning Editor
- True Keys mode shows actual keys depressed and the interval between them in cents
- Radial mode is now renamed to Polar, containing Radial and Angular modes
- In MTS-ESP mode, the Tuning Editor will now also become a tuning analyzer, showing the new True Keys mode against MTS-ESP sources
- Removed the option âUse MTS-ESP if availableâ, it was redundant
- Added the capability to remember if Surge XT is disconnected as client from MTS-ESP
- Fixed misleading tuning-related typeins in âApply Tuning After Modulationâ mode, now errors are presented accurately
- When âUse MIDI Channels 2 and 3 to Play Scenes Individuallyâ is disabled, we can now use MIDI channels for octave shift tuning information coming from MTS-ESP
- Fixed a bug where sustain pedal did not work correctly in âUse MIDI Channel for Octave Shiftâ mode
Accessibility
- Enter key on a step sequencer parameters starts the edit gesture, matching other accessible sliders
- Alert dialogs now properly receive keyboard focus for screenreader users
- Effect parameters now speak the name of the parameter group they belong, which is helpful in effects like Audio In or EQ, which have multiple similarly named parameters in different groups
Shift+F10
closes open menus as well as opening them, which works around some DAWs (like Reaper) stealing Esc key in order to close the plugin window- Removed an unused button from Keyboard Shortcuts Editor which confused some screenreaders
UI/UX
- Added multiple virtual keyboard layouts (QWERTZ, AZERTY, Dvorak, etc.) to Keyboard Shortcut Editor
- Added an action to load a random patch (not bound to a key by default)
- Restricted wavetable loading dialog to .wav and .wt extensions only
- Mouse dragging in the Filter Analysis overlay now modify the Cutoff and Resonance parameters, and also send VST automation events
- Adjusted the width of typeins when they show an error
- Fixed a bug where buttons in the Oscilloscope overlay and a few other places used incorrect hover off color
- Fixed an error where MSEG Y position tooltips would not update or would show when not appropriate
- Fixed a problem with the use of bold fonts in menus which mis-render menu headers in some macOS situations
- Home and End keys no longer malfunction in the Comment field when saving patches
- Releasing mouse on horizontal slider no longer places cursor over adjacent slider
- Updated the look and feel of all alert and notification dialogs to match the skin used, as opposed to default JUCE visual style
- Oscillator display now uses the half rate filter to show the waveform, which shows a more accurate waveform in some cases
- When using the option âAdd sub-menus for modulation menu itemsâ, custom menu icons will not be shown now
Plugin
- Implemented CLAP parameter menus
- Added initial implementation of CLAP remote control pages extension
- CLAP polyphonic modulation now also works per-channel and per-key, whereas previously it just worked per note
- Better defense against some filesystem errors which could cause the AU to fail loading in Logic
- Reenabled VST3 parameter menus in Reason, now that the underlying bug is fixed on Reasonâs end. Thanks to the Reason team for their beta program access, which helped us find this bug!
Surge XT Effects
- Standalone now works with mono in, stereo out Bluetooth configurations
- Changed startup path to improve portability
- Documents directory is not created anymore if not needed, improving portability
Other Changes and Bug Fixes
- Allowed clients of Surge XT to reset extra content path (used by VCV Rack modules)
- Updated the Character filter to allow inclusion in VCV Rack as a standalone
- Fixed a bug where standalone would not properly use the tempo specified in the Virtual Keyboard section
- Swapping effects via drag and drop now participates in undo
- Swapping macro modulators via drag and drop now participates in undo
- âContinue from Current Levelâ Play Mode option now participates in undo and scene copy/paste
- Fixed several cases where the MSEG could generate or persist
NaN
values in the editor - Updated the lifecycle of JUCE look and feel, avoiding a font-related crash in some rare cases
- Updated the handling of filesystem errors more robustly and improved error reporting at startup, avoiding a crash in some rare cases
- Loading skins from ZIP files now appropriately ignores the
_MACOSX
folder
Code Refactoring and Quality
- A large number of effort went to moving code from Surge XT repository into libraries shared between Surge and Shortcircuit, including:
- Moving many effects to
sst-effects
library - Moving fundamental operators to
sst-basic-blocks
library - Each of these moves included code improvements of various forms
- Moving many effects to
- With JUCE 7, removed the moribund per-type class extensions
- Added uniform file comments and header guards across the entire codebase
- Centralized our locale-based formatting using the
libfmt
locale - Removed some uses of
shared_ptr<T[]>
which donât work in the VCV Rack build environment - Made sure we properly obey
__restrict
ongcc
- Consistently use
uses_wavetable
for all queries about wavetable usage - Fixed an assumption about parameter layout in
FXStorage
- Fixed a collection of typos across the code comments
- Refactored the modulator name API to be available to more code paths
Infrastructure
- Upgraded to JUCE 7.0.5 (plus a couple of accesibility patches)
- Removed the LV2 from the binary distribution
- Fixed descriptions in Linux installers to indicate LV2 is not there anymore and include CLAP in the binary
- Tweaked our CI strategy to improve time from commit to nightly
- Include the mistakenly unincluded for gcc13
- Surge XT builds on 64-bit Raspberry Pi OS, but not 32-bit - fail the 32-bit Raspberry Pi build earlier
- Expanded documentation about polyphonic modulation, Raspberry Pi, and others
- Moved to
catch
version 3 - Enabled CTest
- Improved unit test runtimes
- Moved minimum CMake version to 2.1
- Moved macOS notarization from
altool
tonotarytoool
- Consistently build for macOS 10.9 across all submodules
- Fixed compilation on macOS Clang 15
- Added an API to end notes just based on note ID
- Added a test suite which compiles after
surge-xt
as opposed to aftersurge-common
, which was needed for OSC unit tests - Removed more inappropriate legacy SSE includes, allowing portability to more architectures via
simde
Content
- Updated 3 LinnStrument patches from Winds category
- Updated and added new John Valentine patches
- Updated and added new Kinsey Dulcet patches
- Added A.Liv patches
- Added Landosonic patches
- Added NES Triangle wavetable
- Added two new init patches to the factory templates, aimed at duophonic and paraphonic synthesis
- Added another Formula Tutorial, focusing on duophony
- Added a few Formula modulator presets
Changes in Surge XT 1.2.3
We released Surge XT 1.2.3 on May 5, 2023. This release contains our last binary distribution of the LV2 format - moving forward, users who want to use the LV2 plugin will need to build it from the source.
This is a hotfix release which takes care of the following issue:
UI/UX
- Fixed a crash when selecting âContinue from current levelâ option in Play Mode right-click context menu
Changes in Surge XT 1.2.2
We released Surge XT 1.2.2 on May 1, 2023. This is a hotfix release which takes care of the following issues:
Plugins
- Fixed LV2 plugin not being deployed in previous release
UI/UX
- Audio input latency warning will now only show when Audio In oscillator type is selected
Changes in Surge XT 1.2.1
We released Surge XT 1.2.1 on April 29, 2023. This is a hotfix release which takes care of the following issues:
Patch Browser
- Fixed a race condition in patch database. Renaming a patch could cause a race condition (especially on Linux systems) which would result in showing a large number of database lock errors
Tuning
- Pitch slider set to 0 in Absolute mode now tunes correctly with Scala tuning files loaded
Modulation
- Fixed pitch bend becoming stuck when toggling MPE mode during held bent note
- Made sure Portamento set to 0 is strictly 0 in all modes
UI/UX
- Audio input latency warning is now moved to the oscillator display instead of a dialog
- Clearing FX slot or chains will now disable bypass if a slot or slots were bypassed
- Dragging a node in MSEG shows a value tooltip
- Fixed font difference after typing in a value in Tempo field of virtual keyboard
- Fixed a problem where Oscilloscope improperly grabbed keyboard focus
- Allowed envelope retrigger options for Latch play mode
- Fixed a problem whereby the Tempo field in standalone didnât work in some cases
Content
- Added CC0 license to the Init Square template patch
Changes in Surge XT 1.2.0
We released Surge XT 1.2.0 on April 10, 2023. As well as several new major features in tuning, visualization and accessibility, this release brings several new developers contributing substantial changes to the project!
Oscilloscope
- Surge XT now has a built-in oscilloscope and spectrograph, based on s(m)exoscope from Smartelectronix!
- Oscilloscope can be opened through right-click menu of the top-right output level meter, or through the main menu, Workflow submenu, or by pressing Alt+O (or Option+O on Mac)
Tuning
- Surge XT can now act as MTS-ESP provider (server), allowing the Surge XT Tuning Editor to provide tuning for all supporting clients in a session
- Remediated yet more edge cases in our internal tuning, including keyboard mapping larger than a scale
Accessibility
- We have added Accesibility submenu to the main menu
- This menu contains âSet all recommended accessible featuresâ option which basically turns on all the good stuff that a screen reader user would require
- Modulation Editor focus is improved when adding a modulation
- Quantized slider movements (Control+drag) now work with keyboard bindings (Control+up/down arrow) symmetrically
- There is now an option to export the current patch as text (opens in Web browser) for sharing and quicker patch inspection
- Improved the Alias oscillatorâs additive editor for screen readers by making it consistent with other controls and overlays
- Patch Selector will now select the submenu for the category of a given patch by default
- Improved name invalidation when arrowing through discrete menu parameters
- Step Sequencer steps now have manual value typeins on right mouse click context menu
- Added a keybinding (Alt+0 by default) to announce which tabs are currently selected across Surgeâs user interface, and which patch is loaded
- Fixed an issue where Alt+, and Alt+. bindings could get stuck in the Patch Selector
Plugin
- Allowed a more flexible set of I/O mappings, which fixed an interaction between a JUCE, Ardour and Surge XT which could silence VST3 plugin in some situations
- Skipped VST3 context menu extensions in Reason, where they seem a bit dicey still
- Added parameter name invalidation on patch change to refresh automation displays
- Correctly implemented CLAP_NOTE_CHOKE
- Corrected a problem with the virtual keyboard in the CLAP version of the plugin
- Added appropriate buffering for the audio input for hosts where block size is not a multiple of Surge XTâs internal process block size. This stops input buffer corruption with non-fixed sized blocks in FL Studio, at the cost of input buffer latency of 32 samples
- Added a single entry point for note-matches-channel-key-voice-id, allowing the rare case of per-channel polyphonic modulation in CLAP to work
Surge XT Effects
- Implemented handling of block sizes that are not multiples of 32 samples more elegantly
- Default settings for Reverb and Delay effects are more usable
- Parameters for Airwindows effects will now be properly shown even if no audio engine is running
UI/UX
- Filter analyzer now lets you modify the cutoff and resonance simultaneously by simply dragging across the plot, XY pad style
- Output level meter can now show CPU usage optionally (right-click the level meter to show context menu with options)
- Alt+click on an FX slot will now clear it
- Typeins for certain continuously togglable parameters (like Freeze in Nimbus or Knock in Spring Reverb) now work
- Added a license field to the Save Patch dialog
- Added an action to initialize patch (not bound to a key by default)
- Modulation List now has a button to copy all assignmets to clipboard
- Several virtual keyboard actions are now in the Keyboard Shortcut Editor (octave up/down, velocity up/down 10%)
- Modal overlays will now have a semi-transparent background (it was solid color before)
- Fixed jog order for wavetables to match display order in all cases
- Visual display of modulation state is now going to be correct after using Paste scene option
- LFO display will now be repainted when automation changes LFO parameters
- Filter analysis overlay will now be repainted when automation changes filter parameters
DSP
- Noise generator can now be dropped to mono in all stereo filter configurations (right click the Noise Color slider)
- More work done to support process block sizes that are lower than 32 samples - especially fixing a zippering issue in block-wise interpolators used in the mixer
- Nimbus resampler now works at very high sample rates (or low block sizes)
- Added clamps to all Twist oscillator parameters, which means modulation can no longer make it fail to produce sounds
- Added a clamp to Airwindows FX type parameter in order to fix an occasional crash
Modulation
- Modulation now works on Unison Detune parameter of Ring Modulator effect
- Added an option to scale additional LFO outputs by Amplitude parameter (found in Switch to⌠submenu in modbutton context menu)
- Fixed step sequencer fast drags and out of bounds drags when holding Control
- Fixed a bug where a constant MSEG segment with an AEG or FEG trigger would send the trigger on every block, instead of just the first one
MIDI
- Added an option to ignore MIDI Program Change messages
- Clamped MIDI CC/pitch bend smoothers to avoid an infrequent extreme instability under some very rapid (computer-generated) changes
Other Changes and Bug Fixes
- Internal dialog titlebar buttons are consistent on macOS (left-aligned instead of right-aligned)
- Fixed incorrect deserialization of âPrecise tuningâ setting for comb filters
- Overlay tearout state is now separately stored for standalone and plugin versions
- Fixed a minor UI issue where setting up modulation for LFO parameters would blink when pressing the down arrow on the modbutton and switching LFOs
- Fixed a problem which left extra uninitialized padding at the end of streamed oneshot wavetables (this was not audible, it just looked incorrect)
- Truncated wavetables no longer add noise to the final imported wavetable
- Single cycle wavetables had a clamping error which could trigger an assertion in production builds on Arch Linux and other GCC builds with runtime checks enabled
- Surge XT will now close all open menus when destroying the GUI editor, which means lingering menus longer result in a crash when closing the plugin window
- Fixed a bug where a .modpreset in the root menu of the Modulation Presets area would crash Surge XT
- Show a warning and silence output rather than crash in case when Surge XT is incorrectly handed a mono output buffer (which could happen in some Mac configurations with Bluetooth headphones)
VCV Rack Related Changes (and other non-plugin clients of the code)
- Allowed retriggering from non-zero values for LFO EGs
- Provided a function to give a frame size to an untagged WAV (not exposed in Surge XT interface yet)
- Allowed Treemonster to output the pitch and envelope it detected
- String Oscillator would leak memory if an instance was initialized twice. Surge XT didnât do this, but Rack did
- Added the ability to compile without Airwindows, SQLLite or MTS-ESP
- Updated CMake rules for
simde
and JUCE allowing yet more indirection and choice - Allowed
SurgeStorage
to be more flexibly configured in context other than Surge XT synthesizer, such as VCV Rack and SUrge XT Effects plugin - Added an option to explicitly skip third party wavetable scans
- Corrected the bug in Twist oscillatorâs LPG optionally, activated the fix for VCV Rack use only (for now)
Infrastructure
- Make build on GCC12 and MinGW on Windows
surge-common
can now build for RISC-V and WebAssembly- Continued to modernize the codebase, moving to proper copy and assignment constructors on core classes, rather than
memcpy
- Moved many C-style strings to
std::string
- Build if an external build system adds AVX flags to the build
- Added
pffft
as a submodule - Python binding updates
- Updated to pybind 11
- Exposed
mpeEnabled
andtuningApplicationMode
- Add build wheels for
cibuildwheel
- Made
surgepy
an installable Python package
- Surge XT testrunner will fail quickly and explicitly if resources are not available
- Added an API for
SurgeImageStore
to get aJuceImage
for JUCE-specific uses - Lots of small warning cleanups across the codebase
- Non-parameter sliders can now have tooltips
Content
- Replaced factory templates with explicitly CC0 licensed patches
- Updated the LinnStrument MPE patches
- New third party wavetables from A.Liv
- Fixed Init FM2 and Init Square templates so that they donât have filters bypassed
- Cleaned up Lua syntax in Formula modulator tutorials
Changes in Surge XT 1.1.2
We released Surge XT 1.1.2 on November 1, 2022.
The primary reason for this point release is that it contains a fix for a problem in recent versions of Ableton Live, where Surge XTâs sliders and Liveâs VST3 automation conflict. If you have experienced jumpy or inconsistent sliders in Live, you should update Surge XT!
Additionally, 1.1.2 contains these incremental changes:
Plugins
- Fixed inconsistent and jumpy sliders in Ableton Live, due to inconsistent VST3 value setter messages, which recent versions of Live would send
- CLAP: Correctly labeled a number of parameters which are not polyphonically modulatable as such
- CLAP:
CLAP_NOTE_ON
events with velocity of 0 will now act as note offs - CLAP: Defensively support the CLAP parameter cookie being
nullptr
without crashing
MIDI
- Added an option for using MIDI channels 2 and 3 to play individual scenes, or not (enabled by default)
- Clearing current MIDI mapping will now also clear it from the DAW session state
DSP
- Processing block size is now a compile-time constant which can be a power of 2, but larger than 4 (Surge XT remains at block size of 32 samples)
- Added the Absolute option for Combulator voices 2 and 3, so that their frequencies can be set as absolute values in Hz, unlinked from voice 1
- Modulating global volume will now work (but be careful not to modulate too much!)
UI/UX
- Fixed a crash in the FX grid which occured on some Linux systems
- Muted oscillator waveforms will now appear semi-transparent
- Fixed the always-on-top pin button for the torn out overlays not being visible on macOS
- Waveshaper effect parameter group names clearer
- Added an option to display CPU load as a number in the VU meter (Menu > Value Displays)
- Middle-mouse click on Patch and Category previous/next buttons will load random patch (regression from Surge 1.9)
- Patch comments tooltip will now appear more quickly
- Added a few accessibility labels and annoucnements weâve missed, including the About screen
- Holding Shift when saving a patch will force-overwrite the patch (bypasses the dialog asking if you want to overwrite the patch)
- Shift-clicking in the main frame to open the main menu will now show Developer submenu
- We will now display skinâs category in the About screen, if itâs defined in the skinâs XML file
- Restored the CLAP logo to the About screen of the Surge Dark skin
Content
- Added LinnStrument/MPE optimized patches from Roger Linn and the LinnStrument community
Infrastructure and work to re-introduce Surge XT in VCV Rack
- Fixed a problem where an invalid patch in the user search path could in some cases crash the patch database scanner
- Modified CMake so that Surge XT can be used as a sub-library of another project
- Made
surge-common
buildable without building all of JUCE, instead cherry-picked a few JUCE dependencies - Made
surge-common
build without Lua - Provided a from-disk
windows.wt
loading strategy for VCV Rack - CMake now exports a
compile_commands.json
Changes in Surge XT 1.1.1
We released Surge XT 1.1.1 on August 25, with a collection of small changes and improvements which we found either late in the 1.1.0 cycle or after release. We recommend all users upgrade to 1.1.1.
Regressions from 1.0.1 and Breaking Changes
- Restore the correct operation of the Airwindows AD Clip effect
- Waveshaper effect incorrectly scaled the input level, which means that the simple test of sine -> voice level waveshaper had a different response than sine -> waveshaper effect. Remediated this by correcting the input scale on Waveshaper effect. This may result in increased output level of patches which use the Waveshaper effect
Performance and DSP
- Added a JUCE patch which allows sample-accurate MIDI CC and pitch bend messages in VST3 plugin (especially important with long block sizes)
- Set the velocity of reused voices correctly in monophonic play modes
- When âContinue from current levelâ envelope retrigger option is used with Mono FP play mode, portamento would not reset when a gap between two played notes occured (non-legato)
- Revert a set of integer modulation changes which were nascent in 1.1.0, but which have also caused pops, clicks and incorrect unison settings when changing filter, voice, and oscillator types while there were active voices playing
Accessibility
- The name of the accessible overlay for the FX slots contains the effect type name, as well as the slot name
- Correctly labelled Previous and Next wavetable jog buttons (they were backwards)
- Deactivated additional accessibility announcements (oscillator name, patch name, etcâŚ) by default, since an unknown bug makes them speak for Windows users, even with accessibility features of Windows turned off
- Correctly named the âArm/Disarmâ buttons on the modulator buttons when states change
- Step sequencer announces when the value of a step is on an exact 1/12th for pitch-based sequencing
- The wavetable info (available in wavetable displayâs context menu) is now accessible on Mac
- Changing the LFO type will now send an accessible notification to update the screen reader state
- Effects routing grid now properly handles key presses (Shift+F10), and
UI/UX
- Filter 2 Offset mode, when copied via âCopy sceneâ command, now properly sets up the targetâs Filter 2 cutoff
- The Filter overlay now correctly uses Filter 2 Offset and Resonance Link options when drawing the frequency response curve
- Any keystrokes pressed while the Patch Browser is scanning content are now handled by the browser itself, avoiding accidental forwarding of keystrokes to the DAW
- Added a new option to the Patch Browser context menu: âReveal in Finder / Show in Explorerâ, for quick drag and drop sharing!
- We will now correctly set default zoom to 100% when no default zoom is set
- Mousewheel on all the various previous/next jog buttons will now scroll through the relevant data (regression from Surge 1.9)
- Since we now have action history (undo/redo), we will not prompt the user by default when loading a patch while the current patch is dirty
- Right mouse click on the Wavetable menu will now wavetalbes for just the currently selected folder
- When loading a patch, Surge will try to locate the loaded wavetables in the wavetable menu, enabling previous/next jogging, correct checkmark display, etc.
- Virtual keyboard velocity now always spans 1 ⌠127 when clicked via mouse
- Added a new keyboard shortcut (default Alt/Opt+A) to arm and unarm modulators, which also deprecates the Workflow > Tab Key Arms Mmodulators option (so we wonât be showing it anymore)
- Renamed legacy filter subtypes more logically to Standard/Driven/Clean (instead of Clean/Driven/Smooth)
- Paste with Modulation option is now undoable
CLAP Support
- CMake install rules for Linux will now install CLAP flavors, even if you donât use .deb or RPM
- Mac installer will now have CLAP selected by default; also, all options are now alphabetized
- paramsFlush() implementation for CLAP is now safe to call when processing is happening, even though this probably shouldnât happen
Infrastructure and Miscellaneous
- Moved build infrastructure to Ubuntu 20 LTS, since Azure is deprecating Ubuntu 18
- Replaced
static const auto one = _mm_set1_ps(1.0)
with justconst auto one =
to avoid a static lock (thanks to The Audio Programmer Discord community for catching this!) - Moved
HalfRateFilter
tosst-filters
library; it is shared between Shortcircuit and Surge - Spupress mousewheel gestures during mouse drags to avoid nested begin/end edits with Mac trackpads
- Changed Mac signing in order to allow Formula modulator to work in standalone on macOS 10.14
- Mac installer wonât allow installing to a non-system drive now
- Fixed a crash when closing the plugin window in REAPER while the Patch Browser menu was open
- Reviewed various other timers and delayed objects in order to avoid crashes similar to the above one
- Correctly read XDG defaults so that XDG data for DOCUMENTS_HOME correctly follows the specification on Linux
- Fixed a problem where Surge would enter an infinite loop when the stored key mappings would advertise a keymapping for an unknown function
Content
- New wavetables from Philippe Favre
- Updated Formula tutorial â09 Example - Crossfading Oscillatorsâ
Changes in Surge XT 1.1.0
We released Surge XT 1.1.0 on August 3, 2022. It adds several big new features, including edit history (undo/redo), support for the new CLAP standard, expanded and improved support for accessible interfaces like screen readers, several new DSP and voice management features, and much more.
Action History
- Surge XT now supports undo and redo for all actions (even loading patches!) - use either the common Ctrl+Z/Y keyboard shortcuts, or buttons on the GUI
- If a patch has been modified, it will be marked as dirty and an asterisk will be appended to the patch name
- By default, attempting to load a different patch will prompt the user to confirm the loading action in order not to lose your patch modifications
- This can be disabled in Menu > Workflow
CLAP Support
- CLAP is a new standard for host-plugin interoperability developed by a group of open source and commercial developers. Surge XT is an early adopter and a test case for CLAP. You can read more about CLAP at https://cleveraudio.org/
- Surge XT implements - exclusively in the CLAP version - the non-destructive modulation (both monophonic and polyphonic!) and note expressions!
Patch Navigation
- Patches without categories are displayed in their own category in the Patch Browser
- Favorites are now also displayed in the Patch Browser, in User Patches section
- Much improved Find Patch feature!
- Search results will now stay open by default after loading a patch, so you can quickly navigate through this list
- Ctrl+click or Ctrl+Enter will load the patch and close the search results
- There is now an option in Menu > Workflow to bring back the old Surge XT 1.0 behavior, if you so wish
- Magnifier button now acts properly as an on/off toggle button
- Your last search term is remembered after leaving the Find Patch mode
- Search results will now open immediately when entering the Find Patch mode, instead of only when you start typing
Accessibility
- Our screen reader community gave us amazing feedback on Surge XT 1.0.1, leading to several changes, improvements and bugfixes
- Using the announcement API, we read several actions, including patch and favorites changes
- Fixed several components (oscillator copy/paste, scene copy/paste) which used mouse position improperly to find the source and target
- Overlay buttons (Tuning, Mod List, MSEG Editor, Formula Editor, etc.) respond properly to Enter, Shift+F10, and so on
- Step sequencer rotate buttons are now exposed, and order of step and trigger parameters improved
- Mod List parameter names and accesibility works well
- Discrete parameters represented as menu buttons in the UI are now using the combo box element instead of a slider in screen readers
- Effect tab order is now in display order, not internal storage order
- Every text entry field has a correct focus-restoration target when dismissed
- The patch search typeahead supports accesible navigation (fully on macOS and with narration workaround on Windows)
- New Workflow menu options allow you to expand modulation menus to have specific edit/clear/mute submenus, rather than compound multi-click menus
- Introduced a mode where accesible key presses follow the mouse focus, rather than keyboard focus
- Many other small changes and fixes
New Overlays
- Keyboard shortcut editor:
- Allows freely changing or disabling any of the available keyboard shortcut actions offered by Surge XT, in case there is a clash with keyboard shortcuts reserved by your DAW
- Filter Analysis:
- This new overlay will show frequency response curves for Filter 1 and Filter 2, in realtime as you change filter cutoff, resonance and mixer pre-filter gain parameters
DSP Changes
- String oscillator improvements:
- Various Stiffness filter models which provide better tuning at high stiffness values. âKeytracked and pitch compensatedâ model is the new default
- 2x oversampling option, which improves timbral quality for high pitched notes
- Choose between three interpolation modes, which can limit energy loss in exchange for accuracy at high frequencies
- Remember, right-click everything in Surge! These options are in context menus of Exciter Level and Stiffness parameters
- Fixed an issue with Twist oscillatorâs LPG onset, creating occasional glitches in certain oscillator modes
- Initial audio buffer is no longer filled with denormal noise - instead we rely on flush-to-zero (FTZ) flag in our processors
- Sample rate is now a property of individual Surge XT instances, rather than global for all Surge XT instances - allows correct behavior when only certain instances are oversampled in hosts that provide this facility (for example, Reaper)
- Fixed a crash when Reverb 2 was used at a very high sample rate
- Implemented a small fade out when executing All-Sounds-Off
- Reset filters on scene release and All-Sounds-Off - by doing so, we have removed a click on transport start in Logic Pro
- Absolute unison mode now works for Alias and Modern oscillators
- Scene highpass filter now has slopes up to 48 dB/oct (right-click option)
- Output meter falloff is now sample rate independent (previously the meter would have a faster falloff on higher sample rates)
- Fixed a bug where simultaneous chords played on the exact same tick created voices well over the polyphony limit
Play Mode Updates
- Both Poly and Mono modes get expanded envelope and voice triggering modes, accesed from the right mouse click context menu on the Play Mode parameter
- In Poly mode you can choose whether repeated strikes of the same key create a new voice or retrigger the currently playing voice (if there is one)
- In Mono modes, you can select whether the envelopes (AEG and FEG) retrigger from zero, or from their current level if a voice is playing
Effects
- Added multiple clipping options for the feedback path in the Delay effect (right-click the Feedback parameter)
- Added option to extend the Delay Feedback parameter range, allowing negative feedback
- Implemented the Tone filter to the Phaser effect (same as the one from Combulator)
- Added new AirWindows effects: Cabs, Chrome Oxide, Dub Sub, Dub Center, Fire Amp, Glitch Shifter, Nonlinear Space, Pafnuty, Power Sag, Tape Dust, To Vinyl
- Fixed a bug which could make Nimbus occasionally distort, especially in Looped Delay mode (applies to the Surge XT Effects plugin as well)
- Spring Reverbâs Decay parameter and Flangerâs Count parameter now have a more accurate display and value typein behavior
- Dragging an Airwindows effect around the FX routing grid no longer resets its parameters
- Delayâs Feedback parameter can now be extended, allowing negative feedback
Modulation
- All LFOs now have 3 outputs: the signal multiplied by the LFO EG, the raw LFO signal alone, and the LFO EG alone
- LFO attack will now start after setting up voice level modulators - this enables modulating voice LFO amplitude with velocity, which didnât work before
- The range of the fractional part of the LFO phase is supposed to be strictly
[0, 1)
, excluding the maximum, whereas before it could hit exactly 1, which is not supposed to happen - Fixed S&H and Noise LFO types not properly freerunning for Scene LFOs
- Removed a check which improperly changed song position with DAW looping enabled and transport not running, making LFO freerun mode not working properly in some cases
- Fixed cases where deleting nodes in MSEG LFO mode could lead to a broken envelope
- Modulation List can now launch a value edit typein with the pencil icon
- Step Sequencerâs Deform slider now has deform types, which brings Shortcircuitâs LFO Smooth method to Surge
- Adjusted the S&H modulator so that the initial state is random, leading to less uniformity in the first few phases
- Changed the order of voice initiation and LFO EG Attack in Latch mode so a latch more accurately represents the voice
Microtuning
- Tuning Editor now contains the ability to create even division scales and three-note specified KBM files directly
- Fixed a problem where MPE pitch bend in MPE mode with MTS enabled was using the wrong tuning system
- âUse MIDI Channel for Octave Shiftâ tuning mode no longer conflicts with MPE mode
- The Interval Between Notes display now makes it easier to see which interval you are playing
Larger Bugfixes
- We initialized the audio processing state too early, which in some cases could result in the patch resetting when loading the plugin in Logic Pro
- We incorrectly handled patch loading in the startup path of Reaper, meaning loading a Reaper session with disabled Surge track(s) would never load the state correctly, and subsequently resaving without activating the track would save the incorrectly initialized state
Surge XT Effects Plugin
- Complete accessibility review
- Implemented UI resizability through corner drag, menu and keyboard shortcuts
- We now correctly report parameter names to host for the VST3 plugin
- Double-clicking a parameter will now reset it to the default value
- Added an option to run the plugin in zero latency mode - useful if your DAW can guarantee sending fixed block sizes to the plugin
- Fixed Effect type menu not repainting during host automation
- Airwindows Type parameter is now streamed and unstreamed properly, so that projects donât break if we add new Airwindows effects
- Fixed a problem with integer streaming, which means that, going forward, changes in integer param ranges in Surge will not break Surge XT Effects sessions
UI, UX and Skin Engine Changes
- Royal Surge skin has been updated to fully match Surge XT feature set!
- Touchscreen mode improvements, which includes automatically using the Exact mouse sensitivity mode and long press support
- Typein for FM3 oscillatorâs Ratio parameter is correctly read when typing in a modulation amount
- Typing an out of range value for a parameter or modulation amount typein will now report the appropriate minimum or maximum value
- Audio In sliders that are unused will now appear deactivated (semi-transparent)
- Ctrl+click on a currently unselected LFO modbutton will bring that modulator to focus in the lower area (same as clicking the orange arrow, but now you have a larger hitzone to do it)
- More consistent FX slot mouse gestures:
- Double-click on FX slots will now bypass them (previously this was on right-click)
- Right-click now pops up the more usefulFX presets menu
- Single click works as it always did
- The state of âStore Tuning in Patchâ checkbox in the Save Patch dialog is now remembered after cancelling the dialog
- 3D waveform display for Wavetable and Window oscillators - toggled by clicking the oscillator display (or via right-click context menu)
- Context menus will now scale properly on Windows HiDPI displays
- Add contextual help links in severeal places which were missing it
- Context menu colors can now be set in skins
- Added option to use OS dark mode setting for context menu colors, which overrides skin-defined colors
- Skin engine can now override the global font used by Surge XT
- Added skin connectors for placing the new overlay windows (filter and waveshaper analysis)
- The entire Classic skin (including hovers and tempo sync assets) is now contained inside the binary
- Added pitch bend and modulation wheel widgets to the virtual keyboard
- Correctly constrain plugin window drag-to-resize events
- Waveshaper Analysis overlay now uses the actual Drive parameter for a realtime overview
- The Modulation List now has new filtering options - by scene and by target parameterâs control group
- Most tearout windows can now be freely resized
- Double-click on torn out windowâs title bar reverts to the default size
- Improve error message to be clearer in the (very rare) situations where the patch database is locked by two Surge XT instances
- The About-screen-as-skin-layout-grid feature is back! We completely forgot to port it over from Surge 1.9!
- Fixed a bug where the Zoom menu wouldnât allow setting default zoom level, if default zoom level wasnât at all defined
- Wavetable oscillatorâs Morph parameter displayed wrong units in continuous and discrete modes
- Mute and Solo buttons no longer overlap, which created uncertainty in which parameter actually gets clicked
- Pressing the F1 key will now open the relevant part of the manual for currently focused (or hovered) parameter
- Added Sustain button to the virtual keyboard
- Make PNG loading lazy, which resolved sporadic crashes with skins that use PNGs, like Royal Surge
- Improve Alias Harmonics editor mouse handling when mouse cursor is out of editorâs bounds
- Imporved tearout behaviour, adding an Always On Top pin button in the title bar
- Patch comment popup width will dynamically adjust its width to fit longer comments now
- Mousewheel in FX and Oscillator menus properly advances through submenus
Other Changes and Various Fixes
- Polyphonic aftertouch is now properly processed per MIDI channel
- Removed the Activate Scene Outputs option, which is not needed anymore due to JUCEâs plugin wrapper handling
- Favorites can now be exported and imported via .surgefav files (in essence these are CSV files with a new extension)
- Correctly report VST3 bypass parameter and implement it in our JUCE processor
- This should allow FL Studioâs Randomize feature to stop disabling audio, and allow other VST3 hosts to bypass Surge XT as expected
- Modbutton orange arrow state was incorrect on selection (but correct on drag gestures)
- Fixed a bug when dragging FX slots with modulation assigned
- Dropping a modulator on an overlay would modulate the slider underneath the overlay
- Fixed a case where copying a modulation could duplicate a modulation routing
- With the move to VST3 plugin bundle file format, Windows portable installs broke, so now they work again!
- Drag and drop in the presence of overlays could corrupt Z-order of things
- âDownload Additional Contentâ link in the main menu didnât work, so now it works again!
- âAbsoluteâ option was not preserved when copying oscillators, scenes, etc.
- Weâre now sending automation events from several widgets which didnât do that, leading to inconsistent automation in Cubase
- Special characters like
'
no longer break the SQLite search. No little Bobby Tables here! - WAV chunks must have an even number of bytes, so weâve fixed our WAV parser for the case when the size is odd, preventing incorrectly reading the file - which could happen with certain metadata chunks
- Upgraded MTS-ESP library, which allows MTS-ESP to work on Linux
- Tuning Library can now deal with fractions up to 2^64 for numerator and denominator in SCL/KBM files
Infrastructure and Code Changes
- Weâre making a substantial effort to move critical parts of Surge XT into libraries that other projects can use
sst-plugininfra
provides XML, filesystem, user preferences and keyboard shortcut management, CPU information and moresst-cpputils
provides a collection of C++17 extensions we use a lotsst-filters
provides all Surge XT filters in a header-only set of templates - used as a submodule nowsst-waveshapers
provides all Surge XT waveshapers in a header-only set of templates - used as a submodule now
- Test case runtime substantially improved
- Use
std::thread
everywhere for threading - Lots of improvements for the Windows installer
- Reinstated Windows portable mode by checking recursively for SurgeUserData etc. folders
- Use 7Zip for packing Windows ZIP files in the pipeline
- Linux âplugins onlyâ archive is now a .tar.gz
- The
.deb
file now contains icons and an application startup for Linux - Added CMake options to skip ALSA and/or VST3 builds
- Various changes to support JUCE 7 builds (although our production build is still using 6.1.6 until further notice)
- Fixed comments and documentation typos across the codebase
- We now provide a cleaner compile-time error if building on a system other than x86 or ARM
- Added ability to build a slightly reduced
surge-common
without JUCE or Lua (for the upcoming Surge Rack XT project) - Renamed the
surge-py
target tosurgepy
to avoid a-
, which causes load time problems in Python - Made sure to cleanly join the background patch loading thread on exit if it is still running or if another patch load begins
Content
- Updated Slowboat patches
- Updated John Valentine patches
- New wavetables from Quonundrai
- New wavetables from A.Liv and Exocat
Changes in Surge XT 1.0.1
We have the best testers in the world, we really do. Surge XT 1.0 was nearly 1000 GitHub commits, almost every part of the code changed, and our beta testers discovered almost every bug before we released. And we had a lot of them. Those same testers found a few more bugs after we released, though, and a couple of them were serious enough that we decided to collect up the first fortnight of finds and fixes and do a small point release to give us time to get XT 1.1 together.
Larger Bugfixes
- The Formula modulator vector output would crash or go into an infinite loop with 8 or more output values. Fixed to report a single error message when we have more than 8 outputs
- Fixed a crash when using vector modulators to modulate an FX slot and drag and drop to reordering effects
- On macOS, the menu outline box was not painted, making menus visually confusing for many users. Fixed to have parity in how menus look vs Windows and Linux
- Fixed a set of issues with the Windows installer which we found once more people actually ran the installer on various systems
- If two MIDI events had an identical timestamp, the second and all subsequent MIDI events in that block would push to the end of the block causing potential block-length synchronization errors
- The introduction of JUCE created a bypass parameter for VST3 plugins, which in some cases was improperly automated (especially in the FL randomizer). While we wait for a longer term fix, we made Surge XT continue to render when bypassed
- While most of our help links pointed to the XT manual, the actual Menu > Manual link pointed to the old manual!
Smaller issues and regressions from Surge 1.9
- In touchscreen mode, always use Exact mouse sensitivity option
- When modulating FM ratios, use a correct result if a typein retains the âC: â prefix
- User patches without categories will now appear in an uncategorized submenu (instead of not at all)
- ZIP files for Windows builds are now created with 7zip, so that Explorer can now unpack them without any 3rd party unpackers
- Rename the Tutorials skin category properly
- The filter cutoff slider wouldnât visually reset when using the Reset to Keytrack Root option
- MSEG draw mode was incorrectly remembered across different MSEG modulator instances
- Dark skin had a graphical error in filter configuration graphic
- Favorites and Search icons were added to the Dark skin
Added a couple of XT 1.1 features which were harmless to merge
- Improved our testcase runtime
- Removed some OS specific APIs for thread handling now that we are on C++17
- If a multi-channel .wav file is loaded as a wavetable, we will load only the left channel instead of erroring out
- Ctrl-click on a modbutton will now arm a modulator without selecting it
- Bring back certain patches from Luna that were in Surge 1.9
Changes in Surge XT 1.0.0
Our next release of Surge - aptly named Surge XT - made a fundamental architectural break with prior Surge versions (up to 1.9), porting to the JUCE framework and changing the plugin ID, while adding a variety of exciting new features. Hereâs whatâs new!
Plugin Names
- New names are Surge XT and Surge XT Effects
- Similarly, the user data folder is now named Surge XT
- Please consult the manual for a migration guide from Surge 1.9 or earlier (work in progress)
Port to JUCE
- There are innumerable changes, including basically a rewrite of the entire plugin layer and re-implementing all of the widgets and UI components
- Although we donât distribute an LV2 plugin, JUCE-LV2 port project branch allows Linux users to build LV2 if they wish, and it has almost all the features of the VST3 version (excluding the features VST3 supports and LV2 does not)
- Port to JUCE also allows us to provide a standalone version of Surge XT
Patch Navigation
- Implemented a system to mark patches as favorites
- Click the heart button in the Patch Browser to tag a favorite
- Right-click it to see all your favorites in a menu
- Implemented a searchable database for all patches
- Click the magnifier button in the patch browser and type away!
- User can now choose a default patch that will be loaded upon instantiating Surge XT
- Patch comments can span more than a single line now, and they also show up in a tooltip when you hover above the Patch Browser
Modulation
- New Modulation List overlay
- Provides a complete overview of all assigned modulations in the patch
- You can filter the list by source or by target
- You can add new modulation assignments using the Source and Target menus
- You can mute or remove modulations, too
- Modulation assignments in context menus now look nicer and show additional icon-based buttons with options (remove, mute, edit)
- Added Copy and Paste with Modulation options to modbutton context menu
- Formula modulator
- As promised in Surge 1.9!
- Enabled by embedding LuaJIT in Surge
- Formula modulator enables you too many things to list here, so we have added a number of tutorials to showcase at least some of the things that are now possible
- Vectorized/indexed modulators
- Modulators can now provide more than one output simultaneously
- Currently, modulators which employ this feature are Formula, Random and Alternate
- Modbuttons can now be drag-and-dropped everywhere (without holding Control/Command like in Surge 1.9)
- You can now temporarily mute modulations, either via context menu, or via the new Modulation List
- Added a second deform mode for S&H LFO type
- MSEG can now trigger FEG and/or AEG on each node, via context menu options
- LFO Shuffle parameter can now be extended to allow bipolar shuffle (useful for adding swing in the step sequencer)
- MSEG Editor now supports lasso/marquee node selection (Shift+left mouse drag )
- LFO EG can now be deactivated. Right-click any of the DAHDSR sliders
- Scene-level modulation sources can now independently modulate global parameters (any FX parameter, for example). Previously, only Scene A scene-level modulators were applied
- Fixed a bug where Scene LFOs were triggered at the outset, which almost never mattered unless you modulated something latched, like a noisy FX
Accessibility
- JUCE 6.1 added support for accesible interfaces, allowing screen readers and other navigation tools to work
- So we made use of that, resulting in Surge XT sporting a comprehensive accessibility support
- While most things are accessible, there are still some things that could be improved, which will be coming in Surge XT 1.1
Keyboard Shortcuts
- There are numerous new keyboard shortcuts for both the plugin and standalone (optionally enabled in Menu->Workflow)
- When pressing any of the below shortcuts for the first time, Surge will prompt for enabling the option automatically, with option to remember your choice
- Num +/Num - zooms in/out by 10%, Shift+Num +/Num - zooms in/out by 25%, Shift+Num / resets zoom to default
- Up/Down modifies focused parameter value, Home/End modifies the value to minimum/maximum, Del returns to default
- Shift+Left/Right changes to previous or next patch category
- Control/Command+Left/Right loads previous or next patch
- Control/Command+S opens the Save Patch dialog
- Control/Command+F starts patch search typeahead
- Alt+F to toggle setting the patch as favorite
- Alt+E to toggle the appropriate LFO editor overlay (MSEG or Formula)
- Alt+T to toggle the new Tuning Editor overlay
- Alt+M to toggle the new Modulation List overlay
- Alt+D to toggle the debug console
- Alt+K to toggle the new Virtual Keyboard
- Alt/Option+1/2/3 to toggle between the oscillators
- Alt+S to toggle between the scenes
- F1 to open the manual
- F5 to refresh the currently loaded skin
- F12 to show the About screen
Microtuning
- Tuning interface from Tuning Workbench Synth is now implemented in Surge XT!
- Right-click the Tune button and choose Tuning Editor, then explore! Itâs even better than in TWS, containing lots of new views
- Several smaller microtuning changes:
- Voice skip in KBM with âxâ works
- Added channel-per-octave mode for controllers such as Lumatone
- Added extendability to the pitch bend range parameter, which enables fractional pitch bend ranges
- In âApply tuning at MIDI inputâ mode, this results in frequency.cents, while in âApply tuning after modulationâ mode this results in keys.cents
- Pitch-based parameter type-ins allow entering values as fractions (for example, right-click Osc 1 Pitch, Edit Value, then type 9/8, you will get 204 cents)
- There are now options to retain (lock) the current tuning and/or mapping when loading patches. Find them in Menu->Patch Defaults->Tuning on Patch Load
Filter Section
- Added a new Tri-Pole filter type (inspired by Ian Fritzâs Threeler filter)
- Greatly expanded the waveshaper section
- Increased the number of waveshaper types from 5 to 43!
- Harmonic extension, noise, trigonometric wavefolders, classic wavefolders, and much more
- Filters and waveshapers are now deactivatable by double-clicking the filter type icon/waveshaper curve, or a right-click context menu option
Effects
- Surge now has 4 send, scene insert and global insert effect slots!
- Added a new Clear Reverb parameter to Airwindows Infinity effect
- Added a new Spring Reverb effect from Jatin Chowdhury
- Waveshaper is now available in the FX section as well
- Added a new Mid-Side Tool effect, which enables transformations from stereo to mid-side and back, with additional filtering for mid and side
- Added a new Precision option to the Tape effect (right-click any of Hysteresis section parameters) - it also affects CPU usage of the effect!
- SIMD vectorization improvements for the Tape effect
- Added a highpass filter applied to the sides of the signal to the Conditioner effect
- Added Airwindows Mackity, MackEQ and Chamber effects
Functional Differences vs Surge 1.9
- Surge XT modifies where user content is stored
- Surge XT uses a different folder for user content, with the name changed from
(Documents)/Surge
to(Documents)/Surge XT
where(Documents)
is the path to your OS-specific Documents folder - Surge XT forces content type into subfolders -
FX Presets
,Patches
,Wavetables
etc⌠- When you start the plugin for the first time, it will create an empty directory structure for you. You can simply copy your content from your Surge folder to your Surge XT folder
- Note that, just like in Surge, all patches and wavetables need to be categorized. So a patch which was at
Surge/Basses/Plunky.fxp
needs to be moved toSurge XT/Patches/Basses/Plunky.fxp
- Surge XT uses a different folder for user content, with the name changed from
- Fixed a couple of bugs which means Surge XT will behave differently than Surge 1.9 in minor ways:
- Mono FP play mode had a bug where the second to last held key would sometimes not trigger portamento to the last key
- Twist oscillatorâs LPG incorrectly had its delay time sustained by about 4x in non-FM mode. This is now fixed, but patches which use Twistâs LPG will need to be tweaked in order to adjust their delay
- Surge XT Effects plugin now works with block sizes smaller than 32, which also fixes its behavior in FL Studio
Other Changes and Various Fixes
- Window oscillator now has a Continuous Morph option, matching the Wavetable oscillator in behavior
- Fixed gain and clipping math in the Ensemble effect
- Global volume can now be saved and restored in newly created patches
- All Notes Off and All Sounds Off MIDI messages are now properly supported
- Fixed an initialization bug in some of the waveshapers used in Distortion effect, which could result in uninitialized audio and subsequent blowups
- Fixed a bug which could cause Airwindows effects to crash when switching patches quickly
- Fixed a bug where Polyphony set above 61 caused a voice stealing error, if voices went above 64
- Fixed a bug where certain patches using the Window oscillator showed incorrect value for Formant parameter
- Fixed a memory initialiation bug in Surge XT Effects plugin which would sporadically crash the plugin
UI, UX and Skin Engine Changes
- Cleaned up and reorganized the main menu
- Any overlay can now be torn out in a separate window (and reinstated back inside Surge XT window)
- Overlays can now be moved around Surge XTâs window
- By default we no longer bind the TAB key to arm modulations (middle mouse click will still work!). If you want to restore this behavior (which can conflict with focus order and other accesibility features), Menu->Workflow contains an option to do so permanently
- Added an option for appending the original patch authorâs name in parentheses when modifying the patch (defaults to on)
- Skins can now include True Type fonts for skin-specific fonts. See Tutorial 10!
- Skin version 1 is now deprecated and unsupported
- A bunch of new skin color definitions - make sure to visit Menu->Skins->Skin Inspector with Surge Dark skin loaded to learn whatâs new!
- Patch name, Category and Author fields in the Patch Browser will automatically adapt when displaying long patch names in order not to overlap
- Added the Waveshaper Preview overlay (click on the waveshape button below the waveshaper type menu), which shows how would currently selected waveshaper curve affect a fullscale sine wave input
- Added a QWERTY virtual keyboard (on by default in standalone, off by default in plugin)
- Option to toggle the virtual keyboard is in Menu->Workflow
- âAudio Output Unavailableâ message now overrides the output level meter instead of darkening the whole UI
- File open dialogs for patches and tunings now properly remember your last visited folder
- Macros and LFOs (!) can now be renamed by double-clicking on their respective slots (or through a context menu option)
- Double-click on an FX slot in the FX grid will now toggle bypass (right-click still works, but will change functionality in XT 1.1 to show the FX preset menu!)
- Alt/Opt+drag ârubberband editâ of sliders is now also possible on macros
- When using keyboard shortcuts for loading prev/next category or patch, a dialog will pop up asking for confirmation to prevent you from losing the current patch, with option to remember your choice
- Hovering over a slider will now show the parameter value by default - this can be turned off in Menu->Value Displays
- You can now drop a
.surge-skin
folder onto Surge XTâs interface and it will be installed automatically - You can now drop a
.zip
file onto Surge XTâs interface and it will extract patches, FX presets, skins etc⌠into your user area - We now have an online skin library, available from Menu->Skin Library
- Added menu actions to Patch Browser to delete and rename a patch (not applicable to factory patches)
Infrastructural and Code Changes
- Surge XT had a massive investment in our CMake and code layout, with the source being far more organized and our CMake files being way cleaner
- Upgraded to C++17 on all platforms
- Surge XT can now run without the factory directory succesfully
- A number of cleanups in the InnoSetup installer scripts
- Startup files (configuration.xml and windows.wt) are included as binaries in the plugin
- Removed an unused dependency on
libmidifile
- Removed enormous swaths of code which was unused in Surge, thanks to JUCE and other cleanups
- Started using constrained enumerations for user default settings
- Delivered an RPM as well as a DEB on Linux
- Clear CPU info available on the About screen, getting ready for optional AVX enhancements
- Added proper support for Flush-to-Zero CPU flag
- CMake âinstallâ rules are now in place for non-Apple Unixes
- Finally (finally!) removed use of
_aligned_malloc
in favor ofalignas
everywhere - Windows (MSVC) specifies UTF-8 encoding
- Removed old âwideâ getters which were only used by legacy VST3
- Restored Windows MinGW builds
install-resources
targets work with Ninja generator- Removed memory allocation from the audio thread for most oscillator types - implemented pooled allocation for String, and less allocation for Twist
- Cleaned up Airwindows code by removing
processDoubleReplacing
, anti-denormalization and dithering from all effects - Upgraded to the latest Catch2
- Lots of work on expanding the appropriate use of
const
- Moved the FX presets to individual files in the factory data folder, rather than config.xml
- Most of our filesystem code works with
std::filesystem
(or a sub thereof) - On Linux, choose the
ghc
rather than systemstd::filesystem
by default - Cross-compliation works from Linux to Windows and Mac if you want!
- Surge XT is properly signed and notarized on macOS
- Surge XT properly requests microphone access on macOS
Content
- New patches from Altenberg
- New patches from Cybersoda
- New patches from Databroth
- New patches from Jacky Ligon
- New patches from John Valentine
- New patches from Kinsey Dulcet
- New patches from Luna
- New patches from Malfunction
- New patches from Slowboat
- New patches from VincyZed
- New patches from Xenofish
- New FX presets from Arty