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.
Checking the stable version of the documentation...
AudioStreamGenerator
Eredita: AudioStream < Resource < RefCounted < Object
Un flusso audio con utilità per la generazione del suono procedurale.
Descrizione
AudioStreamGenerator è un tipo di flusso audio che non riproduce suoni da solo; invece, si aspetta che uno script generi dati audio per esso. Vedi anche AudioStreamGeneratorPlayback.
Ecco un esempio su come utilizzarlo per generare un'onda sinusoidale:
var playback # Conterrà l'AudioStreamGeneratorPlayback.
@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate
var pulse_hz = 440.0 # La frequenza dell'onda sonora.
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)
[Export] public AudioStreamPlayer Player { get; set; }
private AudioStreamGeneratorPlayback _playback; // Conterrà l'AudioStreamGeneratorPlayback.
private float _sampleHz;
private float _pulseHz = 440.0f; // La frequenza dell'onda sonora.
private double phase = 0.0;
public override void _Ready()
{
if (Player.Stream is AudioStreamGenerator generator) // Tipo come un generatore per accedere a 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);
}
}
Nell'esempio sopra, il nodo "AudioStreamPlayer" deve usare un AudioStreamGenerator come flusso. La funzione fill_buffer fornisce dati audio per approssimare un'onda sinusoidale.
Vedi anche AudioEffectSpectrumAnalyzer per analizzare uno spettro audio in tempo reale.
Nota: A causa di vincoli di prestazioni, questa classe è meglio utilizzata da C# o da un linguaggio compilato tramite GDExtension. Se si desidera comunque utilizzare questa classe da GDScript, considera l'utilizzo di un mix_rate inferiore, ad esempio 11.025 Hz o 22.050 Hz.
Tutorial
Proprietà
|
||
|
||
|
Enumerazioni
enum AudioStreamGeneratorMixRate: 🔗
AudioStreamGeneratorMixRate MIX_RATE_OUTPUT = 0
Frequenza di mixaggio in uscita dell'AudioServer attuale.
AudioStreamGeneratorMixRate MIX_RATE_INPUT = 1
Frequenza di mixaggio in entrata dell'AudioServer attuale.
AudioStreamGeneratorMixRate MIX_RATE_CUSTOM = 2
Frequenza di mixaggio personalizzata, specificata da mix_rate.
AudioStreamGeneratorMixRate MIX_RATE_MAX = 3
Valore massimo per l'enumerazione della modalità di frequenza di mixaggio.
Descrizioni delle proprietà
La lunghezza del buffer da generare (in secondi). I valori più bassi risultano in meno latenza, ma richiedono che lo script generi i dati audio più velocemente, risultando in maggiore utilizzo CPU e più rischio di audio scoppiettante se la CPU non riesce a tenere il passo.
La frequenza di campionamento da utilizzare (in Hz). I valori elevati richiedono una generazione più impegnativa per la CPU, ma risultano in una qualità migliore.
Nei giochi, le frequenze di campionamento comunemente in uso sono 11025, 16000, 22050, 32000, 44100 e 48000.
Secondo il Teorema del campionamento di Nyquist-Shannon, non vi è alcuna differenza di qualità per l'udito umano quando si superano i 40.000 Hz (poiché la maggior parte degli esseri umani può sentire solo fino a ~ 20.000 Hz, spesso meno). Se stai generando suoni dal tono più basso come le voci, le frequenze di campionamento più basse come 32000 o 22050 potrebbero essere usabili senza perdite di qualità.
Nota: AudioStreamGenerator non ricampiona automaticamente i dati in ingresso, per produrre il risultato previsto mix_rate_mode deve corrispondere alla frequenza di campionamento dei dati in ingresso.
Nota: Se utilizzi AudioEffectCapture come sorgente dei tuoi dati, imposta mix_rate_mode su MIX_RATE_INPUT o MIX_RATE_OUTPUT per corrispondere automaticamente alla frequenza di mixaggio attuale dell'AudioServer.
AudioStreamGeneratorMixRate mix_rate_mode = 2 🔗
void set_mix_rate_mode(value: AudioStreamGeneratorMixRate)
AudioStreamGeneratorMixRate get_mix_rate_mode()
Modalità di mixaggio. Se impostato su MIX_RATE_CUSTOM, viene utilizzato mix_rate, altrimenti viene utilizzato il mixaggio dell'AudioServer attuale.