Table of Contents

Class AudioStreamGenerator

Namespace
Godot
Assembly
GodotSharp.dll

AudioStreamGenerator is a type of audio stream that does not play back sounds on its own; instead, it expects a script to generate audio data for it. See also AudioStreamGeneratorPlayback.

Here's a sample on how to use it to generate a sine wave:

[Export] public AudioStreamPlayer Player { get; set; }

private AudioStreamGeneratorPlayback _playback; // Will hold the AudioStreamGeneratorPlayback. private float _sampleHz; private float _pulseHz = 440.0f; // The frequency of the sound wave. private double phase = 0.0;

public override void _Ready() { if (Player.Stream is AudioStreamGenerator generator) // Type as a generator to access MixRate. { _sampleHz = generator.MixRate; Player.Play(); _playback = (AudioStreamGeneratorPlayback)Player.GetStreamPlayback(); FillBuffer(); } }

public void FillBuffer() { float increment = _pulseHz / _sampleHz; int framesAvailable = _playback.GetFramesAvailable();

  for (int i = 0; i < framesAvailable; i++)
  {
      _playback.PushFrame(Vector2.One * (float)Mathf.Sin(phase * Mathf.Tau));
      phase = Mathf.PosMod(phase + increment, 1.0);
  }

}

In the example above, the "AudioStreamPlayer" node must use an AudioStreamGenerator as its stream. The fill_buffer function provides audio data for approximating a sine wave.

See also AudioEffectSpectrumAnalyzer for performing real-time audio spectrum analysis.

Note: Due to performance constraints, this class is best used from C# or from a compiled language via GDExtension. If you still want to use this class from GDScript, consider using a lower MixRate such as 11,025 Hz or 22,050 Hz.

public class AudioStreamGenerator : AudioStream, IDisposable
Inheritance
AudioStreamGenerator
Implements
Inherited Members

Constructors

AudioStreamGenerator()

public AudioStreamGenerator()

Properties

BufferLength

The length of the buffer to generate (in seconds). Lower values result in less latency, but require the script to generate audio data faster, resulting in increased CPU usage and more risk for audio cracking if the CPU can't keep up.

public float BufferLength { get; set; }

Property Value

float

MixRate

The sample rate to use (in Hz). Higher values are more demanding for the CPU to generate, but result in better quality.

In games, common sample rates in use are 11025, 16000, 22050, 32000, 44100, and 48000.

According to the Nyquist-Shannon sampling theorem, there is no quality difference to human hearing when going past 40,000 Hz (since most humans can only hear up to ~20,000 Hz, often less). If you are generating lower-pitched sounds such as voices, lower sample rates such as 32000 or 22050 may be usable with no loss in quality.

Note: AudioStreamGenerator is not automatically resampling input data, to produce expected result MixRateMode should match the sampling rate of input data.

Note: If you are using AudioEffectCapture as the source of your data, set MixRateMode to Input or Output to automatically match current AudioServer mixing rate.

public float MixRate { get; set; }

Property Value

float

MixRateMode

Mixing rate mode. If set to Custom, MixRate is used, otherwise current AudioServer mixing rate is used.

public AudioStreamGenerator.AudioStreamGeneratorMixRate MixRateMode { get; set; }

Property Value

AudioStreamGenerator.AudioStreamGeneratorMixRate

Methods

HasGodotClassMethod(in godot_string_name)

Check if the type contains a method with the given name. This method is used by Godot to check if a method exists before invoking it. Do not call or override this method.

protected override bool HasGodotClassMethod(in godot_string_name method)

Parameters

method godot_string_name

Name of the method to check for.

Returns

bool

HasGodotClassSignal(in godot_string_name)

Check if the type contains a signal with the given name. This method is used by Godot to check if a signal exists before raising it. Do not call or override this method.

protected override bool HasGodotClassSignal(in godot_string_name signal)

Parameters

signal godot_string_name

Name of the signal to check for.

Returns

bool

InvokeGodotClassMethod(in godot_string_name, NativeVariantPtrArgs, out godot_variant)

Invokes the method with the given name, using the given arguments. This method is used by Godot to invoke methods from the engine side. Do not call or override this method.

protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret)

Parameters

method godot_string_name

Name of the method to invoke.

args NativeVariantPtrArgs

Arguments to use with the invoked method.

ret godot_variant

Value returned by the invoked method.

Returns

bool