Come chat with us on Discord!
Important note
Due to necessary evolutions (migration to Qt 6, which is necessary for the ARM Mac support among other things) this will be the last large feature-release to officially support a whole lot of older platforms. Critical patches and bugfixes will still be released over time as part of the 3.1.x branch but don't expect new features if you are on Debian Buster. This is also for sanity reasons: at least 33 commits out of the 81 since the last release were CI fixes to accomodate for older systems, platforms and libraries's deficiencies, which is a ton of time and work not spent on making a better software and fixing actual bugs :-)
Thus, releases starting from 3.2 will use Qt 6. Platforms tested in CI will be:
- macOS 12 (Monterey) or later.
- Windows 10 21H2 or later.
- Ubuntu 22.04 or later (minimum glibc will be increased to 2.34 ; refer to this table to check your distro: https://repology.org/project/glibc/versions . That gives CentOS 9+, Fedora 35+, Debian Bookworm+, and up-to-date Arch Linux, Manjaro, Nix, OpenSUSE Tumbleweed, etc).
- Raspbian 11.
Supported compilers for building score will be:
- GCC 10.2 or later.
- Clang 14 or later.
- MSVC 2022 or later.
Second important note (Linux users)
Due to ongoing issues with Wayland, it is recommended to set the QT_QPA_PLATFORM=xcb
environment variable. It has been applied by default on a further patch.
New features
- Visuals: add support for multi-sample antialiasing, enabled globally in the settings.
- Visuals: support for geometry ports (in magenta). These ports are able to carry 3D geometry mesh information.
A few new demo objects (https://github.com/ossia/score-addon-threedim/tree/main/Threedim) are provided to leverage this:- Visuals/Model Display displays a geometry with an applied texture.
- Visuals/3D/Obj Loader: loads a .obj 3D model
- Visuals/3D/Structure Synth: allows to use Structure Synth (http://structuresynth.sourceforge.net/) expressions for generative 3D models. Note that some expressions can take time to compute - it is done asynchronously and may not appear immediately when editing. Examples have been added to the user library.
- Visuals/3D/Primitives/{Cube,Sphere,etc...}: a set of basic 3D primitives.
Avendish has gained support for declarative geometry ports in order to enable custom geometry processor. Upcoming work will focus on making sure that one can generate and compute 3D geometries through GPU compute shaders, for enabling e.g. massive particle systems.
Note that the objects are still subject to a few interface changes and improvements - in particular the various projection mappings aren't correct yet. Any help is welcome!
out.mp4
- Add an ADSR envelope generator object.
- Add basic set of built-in audio effects: flanger, echo, filters, bitcrusher, compressor, limiter, stereo mixer, convolver. Still subject to changes!
Note that the idea is to encourage people to create or port their own effects: here is for instance the source code for the Bitcrusher which is based on the Gamma library: https://github.com/celtera/avendish/blob/main/examples/Advanced/Utilities/Bitcrush.hpp
- Add a basic built-in synthesizer, Synthimi (https://github.com/ossia/score-addon-synthimi). Still subject to changes!
- Add a port of the Aether reverb to provide a very complete and nice algorithmic reverb. UI is currently bare-bones and will be improved over time.
General fixes and improvements
- Many Faust improvements:
- Tons of bugfixes on Windows where a lot was broken. Now it is on par with macOS and Linux ; automatic testing of LLVM-based Faust DSPs has been implemented to keep better track of what is working and what is not (https://github.com/ossia/faust-tester).
- Automatically match of mono Faust effects with the actual number of inputs, so that it is possible to use e.g. a Faust LPF or distortion to filter a multi-channel intput.
- Add support for some STK physical models which did not work (Piano, Bass, etc) as they required calls to specific C++ functions which weren't yet implemented.
- Add support for Guitarix Faust DSPs, available through the package manager. Note that some of them expect a 96khz samplerate ; a later version will implement automatic resampling to accomodate for this.
- Add free JSFX plugins (available through the package manager)
- Add support for a task pool for processes to use during execution, used for e.g. OBJ loading and Structure Synth currently.
- Add an X, Y, Z spinbox used for 3D processes. UI will be improved over time.
- Add MSVC and MinGW (all versions, 32 / 64 bit with GCC, Clang, MSYS, ucrt) CI
- Many small code quality issues fixed with clang-tidy, more noexcept, etc etc.
- Sanity-check regexes
- Performance and safety improvements on regex matching in libossia (measured to be 10x-20x faster where regex were used compared to the previous implementation based on std::regex, thanks to @hanickdot's https://github.com/hanickadot/compile-time-regular-expressions library). This has also found a couple bugs in regexes!
- Use Clang's thread-safety annotation to fix a few thread-safety bugs in libossia.
- Reduce code size on Linux
- Many CI fixes
Bugfixes
- Implement automatic resizeing for UI widgets in the central view, mainly to allow Micromap to take multiple lines for slightly longer math expressions.
- Many Qt 6 fixes, the port is now considered complete.
- Update to Boost 1.80 and fix issues that cropped up due to previously-incorrect code now flagged at compile-time.
- Library: fix that scanning VSTs would make the process library unuseable until all the VSTs were scanned.
- VST: fix that the VST window was not closing when removing the VST on windows
- Gfx: Fix a crash due to window not being closed before being deleted
- Filesystem browser pane: greatly improve speed when a few hundred thousand files are present in the library. To improve speed further, it is now possible to disable automatic sorting in that case (through right-click).
- WASM: disable cursor hiding there as it would not reappear afterwards.
- LV2: fix crash when saving a project with an LV2 plug-in that could not be loaded.
- UI: Improve various layout and GUI-related things in the central view; fix needless removal / recreation of the objects'UI.