GDSiON 0.7-beta5
With Glasan FX finally out I was able to dedicate a little bit of time to fix some long-standing issues and suspicious code snippets. And to finally add testing to CI (including proper MML parsing tests)!
So let's see, what's been cooking.
Breaking changes
As always, I try to avoid unnecessary API changes. But as I work on certain improvements and try to figure out the implementation that I have inherited, some breaking changes become a necessity.
SiONDriver.play_sound
is nowsample_on
to follow the convention established by other similar methods, likenote_on
, and make it less ambiguous next to theplay
method. This shouldn't affect anyone in practice, as I don't believe using samples is fully possible via the API right now.- Several internal classes that have to be registered with Godot, are now unexposed. This shouldn't affect anyone, because these types were otherwise unusable via the API (no methods would return or accept them). The only reason they have been exposed originally is me missing some configuration options. These types can still be exposed in the future, if there is a need for them in userland.
Other notable changes
-
New
SiONDriver.note_on_with_bend
method allows to play a note with pitch bending. Alongside this change the immediate mode pitch bending was actually fixed, since the original implementation had some issues. -
Some issues around effect parameters have been fixed. See #23.
-
Edge cases in the SSG envelope control implementation have also been fixed.
-
The
SiOPMOperatorParams
class is now properly exposed with all of its properties being available in the API and documented. This should allow to fully configure voices via code instead of doing it via MML. -
The example app now uses natural decay for all synthesized instruments in the piano roll mode. That means that the instruments which can be sustained will now play the sound for as long as you hold down the keyboard key. At the same time, other instruments will now die off naturally after you pressed the button, instead of having an abrupt, timed cutoff.
This is a beta release to invite more people to test it. Even with that caveat, GDSiON 0.7-beta5 can be used in production, and indeed is used to power Bosca Ceoil Blue, a beginner-friendly music making app, and Glasan-FX, a simple sound effects tool. After some time passes, and some stability fixes are made, this release will be promoted to a stable one.
Note
Version 0.7
signifies the next iteration of the synthesizer, fixing and cleaning up the previously available version 0.6.6
for the Flash platform. Please note that in the interest of making a good and easy to use library we leave some room for breaking changes until the project reaches 1.0
. These changes will be communicated in future release notes and will be based on the necessity to address feedback and real life use cases.
Built from commit b037d0f05e2cf0feaad5f1e743bd4a3c95f7b41a. If you experience issues, please report them as soon as you can.
Downloads
- Download for Linux
- Download for macOS
- Download for Windows
- Download for Web (requires Godot 4.3-beta1 or later)
- Download for Android
These archives contain GDSiON binaries for both debug and release exports.
Installation
- Extract the contents of the archive to your project's root folder.
- Make sure that you now have a
bin
folder (i.e.res://bin
), and that it containslibgdsion.gdextension
and some other files starting withlibgdsion
. - Restart the editor.
You must download a build for each platform you plan on exporting to. The libgdsion.gdextension
is the same in every download and can be safely overwritten when extracting multiple archives.
Example project
The example project showcases one of many applications of the synthesizer library in an interactive way. It's the best way to start experimenting with GDSiON!
- Download for Linux (x86_64)
- Download for macOS (Universal)
- Download for Windows (x86_64)
- Download for Windows (x86_32)
- Download project source
The example project source archive contains GDSiON binaries for all platforms. It may be required for you to open the project twice to import everything correctly.