Skip to content

Add procedural and parametrizable audio support #3394

@reduz

Description

@reduz

Describe the project you are working on

Godot

Describe the problem or limitation you are having in your project

Sound designers in the industry end up having to use tools such as FMOD or Wise, with not really any FOSS alternative. Godot users are forced to use this bit of proprietary software in order to have more advanced audio in their games.

Interactive music is being handled by a separate PR/proposal being worked on, so this focuses entirely on procedural audio.

Describe the feature / enhancement and how it helps to overcome the problem or limitation

This would be a special AudioStream resource in Godot that would make it possible to have procedural/parametrizable audio playback in Godot.

Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams

A new AudioStream class will be added: AudioStreamGraph. When edited, it will look like this:

image

The general idea is that the editor will be divided in two.

  • Audio Graph
  • Stream Positions

In the audio graph, several AudioGraphNodes will exist. Those have input and output Audio connections, as well as Controller connections (as a different type of data port).

The following audio graph nodes will be present:

Basic

  • Output (comes by default)
  • Stream: Allows setting any AudioStream in Godot. When one of these audio graph nodes is present, user will be able to adjust the offset on where it starts playing.
  • Effect: Allows setting any AudioEffect from Godot (from the existing ones), which can change the sound accordingly. Audio effects export parameters, so these parameters will appear as input controller connections.
  • Parameter: A named parameter, this parameter exports a controller output and can be named. This will appear as editable property in the AudioStreamPlayer[2D/3D] nodes. If a parameter is not connected to a controller, a default value can be set in the input port itself, like with Visual Shader and Visual Script.

Generators

These generate audio output:

  • Oscillator: Simple oscillator (sine/saw/etc)
  • Noise: Noise generator (pink/white/blue/etc).

Operators

These combine audio outputs:

  • Mixer: Adds two audio streams
  • Modulator: Multiplies two audio streams
  • Frequency Modulator: Does frequency modulation to two audio streams

And the idea is to have what is common in this type of software for controlling parameters, such as LFO, Envelopes, etc. This is just the general proposal.

If this enhancement will not be used often, can it be worked around with a few lines of script?

Audio is low level.

Is there a reason why this should be core and not an add-on in the asset library?

While this could be an add-on, games often require a mature and maintained solution for this. Given the popularity of tools such as Wise and FMOD, it sounds like it should be better this is core.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions