Releases: ossia/score
v3.1.5
New features and stuff
-
A library of example files is being developed. Check it out here: https://github.com/ossia/score-examples
-
Multiple new processes are now part of the release!
- Granola: a granulator developed by @bltzr, based on Rama Gottfried’s
granubuf
object for Max / PureData. Works very well with a graphics tablet! - Calibrator: calibrates an input signal of unknown bounds to make sure that we get meaningful values, e.g. when a sensor does not have a precise well-known range.
- Pattern combiner: combines the values of multiple addresses described by an OSC pattern match, e.g. to take their average, etc. Described in detail in an upcoming blog post.
- Pattern applier: takes a list and applies it to multiple addresses described by an OSC pattern match. Described in detail in an upcoming blog post.
- Sweeper: forwards the input value to the addresses defined by an OSC pattern match one-by-one with a configurable time interval. e.g. This can send its input to address foo:/bar.1 for 100 milliseconds, then to foo:/bar.2, then foo:/bar.3, etc. and circle back to foo:/bar.1. Described in detail in an upcoming blog post.
- Entropy: computes the entropy of an input signal. Ported from Essentia.
- Gradient scrub: allows to manually scrub between two colours.
- Patternal: will play a rhythmic pattern passed in input. Described in detail in an upcoming blog post.
- Melodial: will play a melodic pattern passed in input. Described in detail in an upcoming blog post.
- Tweener: tween a value between an unknown input and output.
- Granola: a granulator developed by @bltzr, based on Rama Gottfried’s
-
NDI support has been merged in the releases, and supports NDI 5. Note that you must install the NDI libraries yourself on your computer and define the environment variable
NDI_RUNTIME_DIR_V5
to the path of the libraries for it to work. For instance, on Linux, it can be something like:export NDI_RUNTIME_DIR_V5=/opt/ndi/lib/x86_64-linux-gnu
The folder should contains files such as
libndi.so
(Linux),libndi.dylib
(Mac) orNDI.dll
(Windows).
- Work-in-progress on a find-and-replace dialog, accessible through the magnifying glass in the object inspector search field. Thanks @RobinMontferme for your hard work on this!
Bugfixes
- Fix UYVY422 video shader (mostly used by NDI)
- Fix the broken Lygia include path so that one can use @patriciogonzalesvivo's Lygia again. Two examples of usage are provided in the mentioned examples.
- Fix that geometry would not update when multiple meshes were following each other into the same process over time
- Fix that the RPi build was broken due to a LLVM issue when using the Mesa graphics driver (which uses another version of LLVM causing incompatibilities)
- Fix that addresses with pattern match characters did not get saved
- Fix a thread safety error when creating intervals while the score is playing
- Fix group selection issues in scenario (triggers and conditions were not always selected)
- Fix various division-by-zero issues which could lead to crashes when rescaling a scenario to a size of zero
- Many fixes to the supported attributes, e.g. unit, domain, critical, vecf domains, when declaring devices in QML (thanks @bltzr for all the testing !)
v3.1.4
Breaking changes
- The CHAR type has been removed as we could not find any one using it. It is instead replaced by a much more useful feature in the back-end which will be developed over the next few versions: a MAP type which will allow more advanced communication from / to JS scripts and groups of OSC addresses.
New features
- JS: support for using external libraries as JS modules. For now one has been added to the user library: total-serialism. Two examples have been implemented:
euclidean-melody
andclaves
to show how to use the library to generate randomized musical patterns. Further versions will provide examples that can convert that into MIDI to feed software synths - JS: add support for onValueChanged callbacks on inlets
- JS: add Impulse / Button widget types
- Explorer: Make device disconnected state more visible (#1433).
- UI: add a proper int spinbox widget
- UI: allow to copy the path of an object for remote control (right-click on an object name in the object tree view at the top right)
- JS console / scripting: add a
prompt
function to show an interactive UI prompt to the user. See the script below for an example. - JS console / scripting: allow to create WS and Serial devices from code directly. This has been used to create an script that would automatically create a WS device that matches a specific JSON format (https://github.com/ossia/score-user-library/blob/master/Scripts/ImportWebsocket.mjs).
- JS console / scripting: add a deviceToJson function which converts a given device to json which can be useful for saving presets
- Serial protocol: add the ability to coalesce messages in order to not spam slow serial ports too much. Docs will be updated soon: https://ossia.io/score-docs/devices/serial-device.html
- Serial protocol: add the ability to return data through byte arrays in order to send raw binary data for protocols that need it.
New features (plug-in API)
- Allow to define processes with groups of ports to simplify creating new processes with the same kind of ports duplicated many times (EQ strips, etc)
- Write many plug-in API tests, for instance to make sure that any kind of data can safely be passed between processes
- Add support for more texture formats in Avendish GPU nodes
- Add support for plug-ins that may need to access the ossia device tree to send custom OSC messages directly
Bugfixes
- Fix the default LFO range so that it always gives the full range when connected to another process
- Fix file watcher sometimes stopping working
- JS: many small bugfixes & perf optimizations for sending / receiving messages
- UI: fix bugs with processes that have file choosers in the inspector
- UI: fix bad library path used on start screen for th examples button
- ArtNet: allow more fixture formats to be supported.
- Fix WASM build due to SIMD issues
- Fix that closing scores with processes using compute shaders would crash
- Fix that image node would not work on some OpenGL driver due to using a reserved name for a variable in GLSL 4.5
- VST3: fix that MIDI output did not work. Note that right now only note-on / note-off messages are supported.
- Remote Control: allow simpler websocket message format for triggering parts of the score remotely
- Rework include paths handling. Not finished yet.
- Fix the LFO phase change.
- Fix invalid scaling for double slider
- Usual fixes for build platforms, Xcode 14, Qt 6.4, etc
- Execution: Fix that position changes were not processed when there was no other process than a tempo process in an interval
- Execution: code optimizations
v3.1.3
Come chat with us on Discord!
Mostly small bugfixes that came up after 3.1.2 here.
New features
- [js] Add a compute method for off-exec-thread computations ; add a layoutTextLines operation which allows to break a text so that it fits a rect (roughly!)
- [search] WIP on searching addresses within processes and ports in the search text box
- [expressions] Add a 'contains' operator to check whether an array contains a value, or a string contains a substring
Bugfixes
- [avnd] Fix midi scroller bugs
- [scenario] Fix some drag and drop cases (dropping .layer files was broken)
- [gfx] Add missing headers for make install (should fix some issues with building templates / addons / jit stuff)
- [lv2] Fix memory leak in C API (yay) for ui detection
- [gfx] Fix that some shader pairs would fail at linking for isf. This makes a lot more shaders work
- [search] Optimize searching for addresses in state
- [search] Fix that search idget does not do anything in debug mode
- [ui] Fix that the ports would sometimes not show up at the right place
- [camera] Set mode to stretch until we add a way to configure it
v3.1.2
Come chat with us on Discord!
New features
- For developers, a script to setup easily a dev build has been added; documentation has been updated: https://ossia.io/score-docs/development/build/hacking.html
- DMX: Add support for sending DMX to Enttec DMX USB PRO (or anything compatible over a serial port).
- Various new experimental MIDI processes & features:
- MIDI File Reader: loads a midi file and reads a track in its output. Will live-reload the MIDI when it changes. Unlike the existing piano roll which only outputs note ons / note offs, this will also output CCs, etc.
- MIDI Filter: given a MIDI stream, extracts a specific CC / after touch / etc... message
- MIDI Scaler: given a MIDI stream, will apply Scala SCL/KBM scales to the notes and output an array with their frequency. This leverages the very nice library provided by the Surge synthesizer team (https://surge-synth-team.org/tuning-library/)
- MIDI Scroller: loads a MIDI file and allows to "scroll" through the running notes, disregarding entirely the timing of the score.
New internal API features for plug-in developers
- Range slider port / widget (thanks @bltzr !)
- File chooser port / widget (thanks @RobinMontferme !)
Bugfixes
- Sweeping checks across the entire code base to make sure that memory allocations do not take place in the real-time thread, some have been fixed this way.
This should lead to better performance on every platform and less chances of audio cracks. On the other hand note that these changes incur some additional memory cost. - Force XWayland on Linux as the Wayland integration seems to still not work (https://bugreports.qt.io/browse/QTBUG-105921)
- Fix that dropping a file in a lineedit would add a file:/// (thanks @rblard!)
- LV2: fixes and improvements to plug-ins using the Worker API
- LV2/VST/VST3: refactor the way plug-in windows are handled in a single place.
- MIDI: improve midi file loading
- JIT: for developer builds, fix that it did not work with libstdc++.
- PureData: fix invalid names being checked for MIDI CC input (#1426)
- Video: fixes to playback speed, fix rewinding non-HAP content
- Execution: fix that play-from-here would not work correctly if an interval was of duration 0 somewhere before the play point.
- Selection: selecting a state that follows a zero-duration interval will now select it to enable the whole thing to be deleted (as it is often not what one wants)
- Fix build with freenect2 for kinect support. It's not enabled in releases yet though but will soon be.
- Various CI fixes
- Startup time improvements by refactoring the way settings are loaded.
v3.1.1
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.
v3.1.0
Availability on the Microsoft Store!
The new release is available on the Microsoft Store for Windows 10 users, as a paid version, in order to ensure long-term sustainability of the development.
New features
- The user library (and other libraries) can now be updated through the package manager, and are checked on startup :-)
- Important! Note that the package folders will be removed before updating, so make sure that you do not save things inside existing packages (e.g. Documents/ossia/score/packages/default and other package subfolders)
- Update rubberband to 3.0.0, which adds support for the new HQ timestretch modes for sound files
- Many small UI / UX improvements: automatic selection of things when doing a learn on an address dialog or looking on the library, etc.
- Add onConnected / onDisconnected callbacks on QML WebSocket protocol. Fixes #1141
Changes
- The mouse cursor is now disabled on gfx windows
Bugfixes & improvements
- Icon for network settings (thanks @aklevy !)
- Improved icons for sync (thanks @aklevy !)
- Fix source code typos (thanks @luzpaz !)
- Fix issue where closing the script editor window wouldn't allow the process button to be clicked correctly (thanks @RobinMontferme !)
- Fix a rare crash when closing score while a shader preview is open
- Windows bug bash: many windows-specific bug and stability fixes, plus many general small bugfixes
- Update Spout, Wiiuse to the latest version
- Fix that libbluetooth development packages had to be installed on Linux for Wiimote support
- Fix that some dialogs occasionnaly did not show up at the right position on the screen but at e.g. the top left corner
- Disable right-click text in Device Explorer when no document is open. Fixes #1312
- Smooth: fix that loading of old version (pre-3.0.12) were broken)
- Work in progress for loading score v2 scores
- Fix percentage increase in the package manager
- Replace gsl::span by tcb::span to improve compatibility with llfio.. yay..
- (Linux) Workaround a potential issue with GTK-based audio plug-ins
- VST3: implement all note off / all sound off command
- VST: send all note off / all sound off on all channels
- Fix that keyboard shortcut for play global (shift+space) did not work
- Allow to drag (e.g. a preset, file, etc.) over the library tabs to change the tab
This list of changes was auto generated.
v3.0.12
Non-code-related
We opened a Discord server! Join us here: https://discord.gg/8Hzm4UduaS
New features
- WIP preset support for loading plug-in provided programs, from the small "preset" button on the plug-in node ui. Works for VST2 and JSFX so far. VST3 is work-in-progress.
- Add CI support for Ubuntu Jammy (22.04)
- Add new icons for network-related things (thanks @aklevy !)
- WIP on a new library scanning engine which is much faster, based on LLFIO
- Allow to create a process in the middle of a cable (double-click the process name in the library)
- Smooth object: implement a continuous mode to smooth and make infrequent inputs continuous
- UI: allow keyboard navigation between ports, cables, and processes with up / left / down / right
Bugfixes
- Fix that score would not run anymore on macOS 10.13 / 10.14 (due to chriskohlhoff/asio#1090)
- Fix various UI bugs with the gradient process
- Fix a crash when closing a document (it seems that it happened mainly on Windows)
- Fix that some invalid expressions would crash the math expression engine (and thus score), e.g. "x.["
- Improve support for "impulse" buttons in plug-ins
- Ignore spaces at the beginning and end of filenames
- Many, many CI fixes and updates
- Fix starting position of nodes created from a preset
- Improve file loading for avnd plug-ins, add support for midifile and raw file ports
- Add spin boxes to more sliders (thanks @RobinMontferme !)
- Math expression: fix a small bug in the default audio filter
- Updated Faust to the latest version
- Updated YSFX to the latest version
- WASM: fix support for sharedarraybuffer on https://ossia.io/score-web
- Wacom tablet input: Fix tablet input tilt (thanks @hamoid !)
v3.0.11
New features
-
Added tablet input support to Window device (thanks @hamoid for the idea !) ; pressure, rotation, tilt, z-axis are supported.
- See https://twitter.com/jcelerie/status/1536453369077936128 with a demo with the upcoming granular synth.
-
Experimental and preliminary: add the Network plug-in to the releases. This adds collaborative edition and execution features :-)
- Video example: sharing data over the network with two scores https://vimeo.com/717058479
- Video example: collaborative edition https://vimeo.com/690619179
- There is no documentation yet but one can refer to chap. 9 of the thesis: https://scholar.google.fr/citations?view_op=view_citation&hl=fr&user=v1_52IMAAAAJ&citation_for_view=v1_52IMAAAAJ:4TOpqqG69KYC - there have been some changes since then but the general idea is there.
-
Restrict speed slider to positive values as some processes don't support backwards speed correctly... patches welcome 🍡
-
Allow to add processes to the score by double-clicking them in the preset list
-
Breaking change: LFO's random is now seeded from an outside source [ #1412 ] versus all the LFOs using the same random seed until now.
-
Experimental: add the ability to set a start time point from which transport will always start, by clicking in the top bar.
- When this is set, pause / play will restart from that point as it is mainly to simplify working on a score
Bugfix release
- Fix cracks and noises with the gain process
- Port the WASM build to Qt 6.4: it now supports drag'n'drop !
- Fix some issues found through scrubbing with ASAN, UBSAN and libstdc++'s debug mode
- JSFX controls will now correctly map parameters according to their range
- Fix a potential crash when deleting a GFX object
- Video: do not try to display invalid frames
- ExprTK: fix that varying number of channels as audio input would not work
- Fixes for building with Qt 6.4 and LLVM 15
- Fix that the dataspaces were not respected in control surface (thanks @capital-G for the report!)
- Fix that moving nodes while dezoomed was not applied at the right scale
- JS: implement state.timings() method to get accurate timings. See the updated sine.qml in the library
- Do not redraw waveforms if the pixel zone is too small
- Fix wrong inversion of viewport that had occured by mistake in 3.0.10
v3.0.10
New features
- GFX: the render size can now be configured in the window device tree. If any of the
rendersize
coordinates is 0, the size of the window will be used instead. - JSFX: add support for showing feedback for control changes, for e.g. analysis objects.
- Avnd: support for mapping functions to enable log-like knobs & things like that, as well as for multichannel FFT
- Avnd: QPainterAdapter improvements from @ErkEntonio
Bugfixes
- Fix issue with Faust processes possibly giving loud pops
- Fix that the GUI would refresh much more than necessary, using a lot of CPU
- Many small performance fixes and improvements to the audio engine
- Dead code removal
- Fix a potential crash when closing a document
- Fix sample rate not always being updated with soundfiles when changing the global audio sample rate
- Expressions: fix that some where missing the
fs
variable to access the current sample rate - VST: accept inputs of any type by using convert instead of only handling floats
- Do not try to load sound files that are directories or not readable
- Mapper: make callbacks unique to fix a crash
- Fix various issues related to objects not being able to be removed
- WASM: disable GL as it caused a black screen
- Control surface: Implement adding nodes during execution
v3.0.9
New features
-
Avendish plug-ins: support for FFT input ports
https://twitter.com/jcelerie/status/1517818996661399552 -
Avendish plug-ins: support for soundfile input ports ; @bltzr is using it to cook an upcoming granulator =)
https://twitter.com/jcelerie/status/1516785899413151749 -
Virtual MIDI devices on platform which support it (thanks @RobinMontferme !)
-
Allow GPU nodes to have control outputs, which enables nice things like performing a
computation on the GPU with a compute shader, and getting back the data on the audio processing path:
an example has been done with YoloV5 for object recognition on the GPU: https://vimeo.com/711256381
This object is not yet part of the release but will likely happen soon along with other fun GPU stuff :-) -
Allow to register JS scripts (using the same API than the console) that will show up as actions in the menu:
https://vimeo.com/711841390
Here is an example of such a script which allows to randomize a process: https://github.com/ossia/score-user-library/blob/master/Scripts/Randomize.mjs -
Console: add Score.selectedObject() and Score.selectedObjects() methods to get the current selection in scripts
-
Faust will look for libraries in /packages//library/<faust .lib files here>
This allows to support new Faust add-ons: for instance, the package manager will allow to download https://github.com/alainbonardi/abclib,
a library for sound spatialization and mixed music Faust objects developed by @alainbonardi (thanks !) -
A few new presets in the user library - auto-update isn't implemented yet so do not forget to update ! https://github.com/ossia/score-user-library
-
Add the ability to save presets by click-drag-drop from a little preset's folder icon to the system & project library panes
-
Math expressions: added a new
noise(input, octaves, persistence)
function which provides @Reputeless's Perlin noise implementation
Bugfixes
- Fix VST3 resizing
- Fix VSTs showing duplicated if /usr/lib is a symlink to /usr/lib64 on Linux
- Fix a potential crash when closing a score while inside a nested scenario
- Change Faust to use double-precision processing like everything else
- Performance improvements: use boost::container::vector in more places to reduce the initialization cost
- Allow using alloca in JIT process on Windows
- Fix mapping of data copied through value ports
- Fix for ISF shaders that assumed that they were being rendered on a quad (score used to render them on a single triangle).
This only applies for shaders without any vertex shader defined. - Fix that dropping an invalid video file would crash
- Automation fix for int addresses
- Fixes for Qt 6 support (not finished yet)
- Fixes for GCC 12 (WARNING: it is not supported yet due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105683)
- Fix crash when adding an Images process
- Value display: fit in rect for long values
- Fix that smoothing did not work for some inputs
- Fix an issue when dragging the mouse on the step sequencer's right
Various
- Big variant refactor, to use mpark::variant everywhere as std::variant is problematic on macOS
- Internal libpd / Puredata implementation updated to 0.52-2 ; in particular opening and closing Pd UIs seem to work better.
- CI updated to macOS Monterey
- CI for Qt 6 on macOS with Homebrew