Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

AudioStreamGenerator

Hereda: AudioStream < Resource < RefCounted < Object

Una transmisión de audio con utilidades para la generación de sonido procedimental.

Descripción

AudioStreamGenerator es un tipo de flujo de audio que no reproduce sonidos por sí mismo; en su lugar, espera que un script le genere datos de audio. Véase también AudioStreamGeneratorPlayback.

Aquí hay un ejemplo de cómo usarlo para generar una onda sinusoidal:

var playback # Contendrá el AudioStreamGeneratorPlayback.
@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate
var pulse_hz = 440.0 # La frecuencia de la onda de sonido.
var phase = 0.0

func _ready():
    $AudioStreamPlayer.play()
    playback = $AudioStreamPlayer.get_stream_playback()
    fill_buffer()

func fill_buffer():
    var increment = pulse_hz / sample_hz
    var frames_available = playback.get_frames_available()

    for i in range(frames_available):
        playback.push_frame(Vector2.ONE * sin(phase * TAU))
        phase = fmod(phase + increment, 1.0)

En el ejemplo anterior, el nodo "AudioStreamPlayer" debe usar un AudioStreamGenerator como su flujo. La función fill_buffer proporciona datos de audio para aproximar una onda sinusoidal.

Véase también AudioEffectSpectrumAnalyzer para realizar análisis de espectro de audio en tiempo real.

Nota: Debido a limitaciones de rendimiento, esta clase se usa mejor desde C# o desde un lenguaje compilado mediante GDExtension. Si aún deseas usar esta clase desde GDScript, considera usar un mix_rate más bajo, como 11,025 Hz o 22,050 Hz.

Tutoriales

Propiedades

float

buffer_length

0.5

float

mix_rate

44100.0

AudioStreamGeneratorMixRate

mix_rate_mode

2


Enumeraciones

enum AudioStreamGeneratorMixRate: 🔗

AudioStreamGeneratorMixRate MIX_RATE_OUTPUT = 0

Frecuencia de mezcla de salida actual de AudioServer.

AudioStreamGeneratorMixRate MIX_RATE_INPUT = 1

Frecuencia de mezcla de entrada actual de AudioServer.

AudioStreamGeneratorMixRate MIX_RATE_CUSTOM = 2

Tasa de mezcla personalizada, especificada por mix_rate.

AudioStreamGeneratorMixRate MIX_RATE_MAX = 3

Valor máximo para la enumeración del modo de velocidad de mezcla.


Descripciones de Propiedades

float buffer_length = 0.5 🔗

  • void set_buffer_length(value: float)

  • float get_buffer_length()

La duración del búfer a generar (en segundos). Valores más bajos resultan en menor latencia, pero requieren que el script genere los datos de audio más rápido, lo que aumenta el uso de la CPU y el riesgo de interrupciones en el audio (cracking) si la CPU no puede mantener el ritmo.


float mix_rate = 44100.0 🔗

  • void set_mix_rate(value: float)

  • float get_mix_rate()

La frecuencia de muestreo a utilizar (en Hz). Los valores más altos son más exigentes para la CPU al generarlos, pero dan como resultado una mejor calidad.

En los juegos, las frecuencias de muestreo habituales son 11025, 16000, 22050, 32000, 44100 y 48000.

Según el teorema de muestreo de Nyquist-Shannon, no hay diferencia de calidad para el oído humano al superar los 40.000 Hz (ya que la mayoría de los humanos solo pueden oír hasta ~20.000 Hz, a menudo menos). Si estás generando sonidos de tono más bajo, como voces, se pueden utilizar frecuencias de muestreo menores, como 32000 o 22050, sin pérdida de calidad.

Nota: AudioStreamGenerator no remuestrea automáticamente los datos de entrada; para obtener el resultado esperado, mix_rate_mode debe coincidir con la frecuencia de muestreo de los datos de entrada.

Nota: Si utilizas AudioEffectCapture como fuente de tus datos, establece mix_rate_mode en MIX_RATE_INPUT o MIX_RATE_OUTPUT para que coincida automáticamente con la frecuencia de mezcla actual del AudioServer.


AudioStreamGeneratorMixRate mix_rate_mode = 2 🔗

Modo de frecuencia de mezcla. Si se establece en MIX_RATE_CUSTOM, se utiliza mix_rate; de lo contrario, se utiliza la frecuencia de mezcla actual de AudioServer.