Skip to content

YuriSizov/gdsion

Repository files navigation

GDSiON

GDSiON is a software synthesizer library implemented as a GDExtension for the Godot engine. It is based on SiON, a software synthesizer for Flash and Adobe AIR platforms, and just like its predecessor GDSiON is self-sufficient and allows for easy dynamic sound generation. You can drive the process using a SiON-specific flavor of Music Macro Language (MML) or by making direct API calls.

The name of the synthesizer should be pronounced like the word "scion".

patreon-link discord-link

Download

This project is in the beta phase. This means it's feature complete, but still requires some bug fixing and testing. Please make backups when working with prerelease libraries! Bug reports are highly appreciated.

The project is compatible with Godot 4.3.

Note

As Godot 4.3 is still being developed, there might be compatibility issues between GDSiON and available builds of the engine. The project has been developed and tested with the 4.3-dev5 release, so this is the minimum recommended version for now.

Current release: 0.7-beta1

These archives contain both release and debug binaries.

If you need the most recent fixes, you can also download the latest unstable version, built from the latest commit of the main branch.

Setup

  1. Download GDSiON or build the project yourself.
  2. Copy the bin folder from the archive (or your compilation results) to your project's root folder.
  3. Make sure that you now have a res://bin folder, and that it contains libgdsion.gdextension and some other files starting with libgdsion.
  4. Restart the editor, and start using the synth!

Tip

You can type "SiON" in the search bar of the editor's built-in help to find available classes. Complete class and method descriptions are coming once Godot 4.3 reaches a more stable state (the ability to create class reference has been added very recently).

Usage

First, you need to create a SiONDriver instance and add it to the scene tree. Only one driver can exist at the same time. (Some internal global objects are stateful and having multiple drivers can lead to conflicts.)

var driver := SiONDriver.new()
add_child(driver)

To confirm that everything works as intended, try playing a simple tune in the MML format, once the driver node is ready:

driver.play("t100 l8 [ ccggaag4 ffeeddc4 | [ggffeed4]2 ]2")

You can also play a melody by directly feeding the driver your notes, one by one or as a sequence.

GDSiON is capable of emulating a variety of instruments and algorithms, which you can configure for your playback. You can use SiONVoicePresetUtil to generate presets for over 650 instrument voices.

Check the example project for an interactive demo!

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

Projects using GDSiON

Another way to learn more about GDSiON's capabilities is to try one of the projects below:

Building

GDSiON is implemented on top of godot-cpp, a C++ wrapper for GDExtension. It shares requirements with it and the engine itself.

The project uses the SCons build tool, and, once it's installed on your system, GDSiON can be compiled as easily as running:

scons

There are several build options available, allowing you to target a specific platform or build configuration, enable development features and change optimization level. Please refer to Godot documentation for developers for more details.

Note

This project uses Git submodules. You need to use a git client to correctly check out everything needed for the build. The ZIP archive generated by GitHub does not contain submodules and is not enough to compile GDSiON.

git clone git@github.com:YuriSizov/gdsion.git
git submodule init

How can I help the project?

First and foremost, using GDSiON and reporting problems is already a great help! Please, don't hesitate to submit reports of any stability issues, incorrect behavior, or missing API access for some classes and functions.

If you have a functional suggestion, feel free to submit it as well! But please do be patient. Authors of this project are not very well versed in audio and music production. It may take a bit of time to understand and address your needs.

Contributions and pull-requests

At this stage the project is considered feature complete. The main focus right now is on testing and improving the general state of it. You can help the efforts by creating unit tests, enhancing CI with additional checks and code style validation, writing documentation, etc. For code contributions, the biggest target is addressing memory management issues. There is also a number of TODOs and FIXMEs already present in the codebase which can be a good starting point for a quality PR!

If you want to work on a new feature, or perhaps have an idea for a better code architecture and design, please try to get in touch first. Such contributions are ultimately welcome, however the project is still going through its early days, so changes must be considered carefully.

There are also a few features that didn't make it into this initial release, namely MIDI support and Godot audio stream support for input and sampling. These are areas worth of exploration as a target for a future release of the library.

License

This project is provided under an MIT license. Original SiON software synthesizer library is provided under an MIT license.

Support

You can support the project financially by donating via Patreon! Every dollar helps, so please consider donating even if it's a little. Thank you very much <3