Skip to content

Releases: YuriSizov/gdsion

GDSiON 0.7-beta6

02 Dec 16:04
Compare
Choose a tag to compare

This is a relatively small release aiming to fix a crash related to the stereo chorus effect. I did, however, decide to include a couple of additional improvements which were on my TODO list. The names of the voices generated by the preset util have been cleaned up and standardized a bit. And there is also an API change with minor compatibility breakage:

Breaking changes

  • SiONDriver.play has been split into two methods — the original one that now expects you to pass at least some data for it to play, and the new one, called SiONDriver.stream, which simply initiates streaming. This is done for semantic clarity, as the driver technically doesn't have a "playing" state, it can be streaming, compiling, or rendering. The play method is initiating streaming behind the scenes, but it doesn't put the driver into a different state. We could technically talk about the driver "playing" whatever data was given to it, but that's a different concept which we currently do not track.

Accompanying this change two new methods are introduced, SiONDriver.is_streaming and SiONDriver.is_paused. They report on the corresponding states of the driver. This is the main reason for the split and "rename", so it's clear what constitutes "streaming" and why it's not called "playing".

Do note that while SiONDriver.play can no longer be called without any arguments, you should still be able to call it with a null passed as its first argument, which would be equivalent to calling the new stream method. So only empty calls to play() need to be substituted with stream() after upgrading to beta 6.


This is a beta release to invite more people to test it. Even with that caveat, GDSiON 0.7 betas can be used in production, and indeed are 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 bd0eed8b886ff0566e8f13e02079a7767a7bfbc1. 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.

Latest Unstable release (main)

02 Dec 15:08
Compare
Choose a tag to compare
Pre-release

This is an automatically updated build of GDSiON. This version provides all the latest fixes and features, but it lacks wider testing and you may experience instability. Please always make sure to use backups!

GDSiON Latest

Built from the top of the main branch. If you experience issues, please report them as soon as you can.

Downloads

These archives contain both release and debug binaries.

Download Example Project:

The example project source archive contains GDSiON binaries for all platforms. May require you to open the project twice to import everything correctly.

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.

GDSiON 0.7-beta5

13 Nov 18:33
Compare
Choose a tag to compare

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 now sample_on to follow the convention established by other similar methods, like note_on, and make it less ambiguous next to the play 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

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.

GDSiON 0.7-beta4

29 Oct 12:56
Compare
Choose a tag to compare

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.

GDSiON 0.7-beta3

09 Jul 13:42
Compare
Choose a tag to compare

Just a small update, bumping the version of godot-cpp used by GDSiON. This resolves some memory access issues reported by the address sanitizer.


This is a beta release to invite more people to test it. Even with that caveat, GDSiON 0.7-beta3 can be used in production, and indeed is used to power Bosca Ceoil Blue, a beginner-friendly music making app. 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 e5a6e491811745568d8188b3f13db985a509334f. 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.

GDSiON 0.7-beta2

05 Jul 11:24
Compare
Choose a tag to compare

After a number of fixes and improvements, it is time for another beta!

Breaking changes

This release includes two breaking changes to improve usability and consistency of the API.

  • SiONVoice::get_mml had its chip type argument swapped from a string to an enumeration. This enumeration is, naturally, exposed to scripting. Having a string was an awkward choice from the beginning, but this is what the original SiON did. My assumption is that this allowed for more custom chip types to be created, but that's something we don't really support right now, and it's something that can be tricky to define via the scripting API.

  • Alongside exposing the above enumerations, a clean up was performed on existing module type, pitch table type, and pulse generation type enumerations. They should be named clearly and consistently now, with some names adjusted further to better convey their meaning.

Other major changes

  • The extension is now fully documented! You can read about every part of the exposed API in the Godot editor's built-in help menu. Some descriptions are minimal and can likely be extended with more details and examples, but it should already feel more friendly to get started using GDSiON.

  • More methods and properties exposed to the scripting API across the board, including compilation and rendering features of SiONDriver. These complete existing playback/streaming features, and come with support for queuing and executing in bulk. The API has changed slightly since ActionScript days, and we rely more on signals now. Check the docs for details on everything that has been exposed!

  • A giant pass on every GDSiON type has been done to improve memory safety and seal the leaks, and the extension is much more stable now. Note that to achieve this some exposed types have been changed to extend RefCounted instead of Object, which changes their inheritance chains. This is a minor compatibility breaking change, but should go unnoticed by most users.


This is a beta release to invite more people to test it. Even with that caveat, GDSiON 0.7-beta2 can be used in production, and indeed is used to power Bosca Ceoil Blue, a beginner-friendly music making app. 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 b56ec7a13c04417f395d6289a69129d7e8917c2e. 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.

GDSiON 0.7-beta1

07 Jun 10:44
Compare
Choose a tag to compare

Let's do this for real this time!

The first official release of GDSiON, compatible with all major platforms, is out!

GDSiON is a software synthesizer library for the Godot game engine. It's relatively small and self-sufficient, which doesn't stop it from being able to emulate sounds of hundreds of instruments, MIDI-compatible or otherwise. You can use it interactively by triggering notes or sequences of notes based on user interaction or a metronome. And you can also feed it an MML notation of a melody (with GDSiON-specific extended flavor).

The system behind the shallow API surface of this synthesizer is extensive. This library was originally made for Flash/Adobe AIR more than 10 years ago. On that platform a lot of internals were immediately accessible for developers to use and exploit. With a GDExtension we take a different approach, and only a subset of functions is currently exposed. Please be encouraged to share your feedback so we can expose more of the features in a nice and sensible manner, well integrated with Godot and ready for your use cases.

The complete documentation is coming and will be available before the final stable release. For now, please refer to the "Getting started" section of the project's README. And also try the example project linked below!


This is a beta release to invite more people to test it. Even with that caveat, GDSiON 0.7-beta1 can be used in production, and indeed is used to power Bosca Ceoil Blue, a beginner-friendly music making app. After some time passes, and some stability fixes are made, this release will be promoted to a stable one.

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 f7d19bbd55ea37722129f033cf7c83cf097b596b. 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.

GDSiON 0.7-beta0

03 Jun 19:40
Compare
Choose a tag to compare
GDSiON 0.7-beta0 Pre-release
Pre-release

First fixed release of the synthesizer is here!

At this point I'm considering the library to be feature complete, and switching gears to stabilizing it, which means it's now in the beta. There are still a couple of things missing from the original SiON, but those will have to wait for a future version where I can test and implement them properly.

This build is designated beta 0 because I'm testing the whole "tag a commit to build a release" workflow, and I still need to sort out notarization on macOS (but it's coming!). That aside, this version is ready for testing and use, and it's the one that powers Bosca Ceoil Blue! Does this mean that a Bosca beta release is also coming soon?.. 👀

Built from commit ed3db5f9ec5de153c2a9d542a6cf5652fa43b2f5. 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.