Skip to content

GDSiON 0.7-beta4

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 29 Oct 12:56
· 2 commits to main since this release

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 setter set_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 to PULSE_MA3_SINE.

  • In the SiONVoicePresetUtil the generate_voices() method is now static and should be used in place of the new() 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 to generate_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

These archives contain GDSiON binaries for both debug and release exports.

Installation

  1. Extract the contents of the archive to your project's root folder.
  2. Make sure that you now have a bin folder (i.e. res://bin), and that it contains libgdsion.gdextension and some other files starting with libgdsion.
  3. 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!

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.