With a month-worth of improvements and extensions made to the synthesizer, we're ready for the next beta!
First of all, this is the first release that is build with Godot 4.3 stable (and its corresponding godot-cpp
branch). This shouldn't affect the compatibility of the synthesizer library, but it's nice to be based on a stable version with more fixes and improvements included upstream!
Breaking changes
A number of necessary changes were made to the API to improve the language of the library and clarify some classes and members.
-
Setting the operator count to 5 on channels used to enable the analog-like mode (with the actual operator count being set to 2). This release separates these two settings, and adds further validation to the parameters for related methods. If you want to configure a channel to use the analog-like mode, set the operator count to 2, and use the new
analog_like
property (or its setterset_analog_like()
) to enable the mode explicitly. -
Some module types have been renamed for clarity:
MODULE_CUSTOM
->MODULE_SCC
MODULE_ANY_PG
->MODULE_GENERIC_PG
-
The pulse generator type enum has been expanded with defined, named values for all MA-3 pulse/waveform types. The new values cover the same range as before, they are basically just named now. For consistency, though, the old
PULSE_MA3_WAVE
has been renamed toPULSE_MA3_SINE
. -
In the
SiONVoicePresetUtil
thegenerate_voices()
method is now static and should be used in place of thenew()
constructor. This was done to allow using the class more efficiently, as previously calling the constructor would generate all types of voices anyway, meaning that subsequent calls togenerate_voice()
would simply do double work. Godot doesn't allow parameters in class constructors, so a static factory method is the best option here. -
Calling
SiONDriver.stop()
now clears the internal data object. This is a behavior change from the original SiON, but the old logic seems like an oversight to begin with. If we don't do that, calling play() without any parameters after calling it with an MML string plays the compiled MML song over again. This doesn't really make practical sense, as we need to be able to actually stop the driver fully somehow. You can also clear the data explicitly using the new method,clear_data()
.
Other major changes
-
Fix a large number of MML parsing issues using a set of MML songs composed specifically for the old SiON library. GDSiON is even more robust than its predecessor, since one of the songs would crash the old Flash implementation, and is parsed successfully (albeit with a handful of reported errors) by our C++ library.
-
Related to the above, sequences and sequence groups have been exposed to the API, with related changes in
MMLData
/SiONData
. This allows constructing sequences from scripting, and reading the parse results from processing of MML strings. -
The MML parser has been reworked to report about invalid data values in voice definitions. Previously the invalid values would be silently wrapped/clamped to fit a valid range, which isn't great as far as informing users goes. Some value ranges for various voice types have been adjusted to their actual valid ranges.
-
The example app has been greatly expanded, featuring a whole new tab with a bunch of MML songs, composed for the old SiON library (mentioned above). Due to somewhat questionable copyright status of some of these compositions, they aren't shipped with the app itself, but instead are downloaded from a secondary repo here on GitHub. These songs were made, at some point, by the SiON community and provide a great range of examples for the synth's capabilities!
There is also now a small test suite that can be used to check for regressions. Right now it is not enabled on the CI, but can be run manually on the developer machine. From the tests
folder run godot --script ./run.gd --headless --verbose
. Some steps may take a while to complete.
Note that MML parsing test is currently not validated, but gives a printout of statuses and parsing errors. The reason for this is that we cannot catch engine errors from scripting to both check them and silence them, and that means negative tests aren't possible. We're using some pre-made songs of various origins for testing, and they do contain mistakes which are perfect for negative tests, but, alas, aren't thus verifiable.
This is a beta release to invite more people to test it. Even with that caveat, GDSiON 0.7-beta4 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 4f1a390ed55f0dc281974460583bfd1ff983c996. 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.