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
Успадковує: AudioStream < Resource < RefCounted < Object
Аудіопотік з утилітами для процедурної генерації звуку.
Опис
AudioStreamGenerator – це тип аудіопотоку, який не відтворює звуки самостійно; натомість він очікує, що скрипт згенерує для нього аудіодані. Див. також AudioStreamGeneratorPlayback.
Ось приклад того, як використовувати його для генерації синусоїди:
var playback # Will hold the AudioStreamGeneratorPlayback.
@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate
var pulse_hz = 440.0 # Частота звукової хвилі.
var phase = 0,0
func _ready():
$AudioStreamPlayer.play()
play = $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))
фаза = fmod(фаза + приріст, 1,0)
[Export] public AudioStreamPlayer Player { get; set; }
private AudioStreamGeneratorPlayback _playback; // Will hold the AudioStreamGeneratorPlayback.
private float _sampleHz;
private float _pulseHz = 440.0f; // Частота звукової хвилі.
private double phase = 0,0;
public override void _Ready()
{
if (Player.Stream is AudioStreamGenerator generator) // Введіть як генератор для доступу до 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);
}
}
У наведеному вище прикладі вузол «AudioStreamPlayer» повинен використовувати AudioStreamGenerator як свій потік. Функція fill_buffer надає аудіодані для апроксимації синусоїди.
Дивіться також AudioEffectSpectrumAnalyzer для виконання спектрального аналізу звуку в реальному часі.
Примітка: через обмеження продуктивності цей клас найкраще використовувати з C# або зі скомпільованої мови через GDExtension. Якщо ви все ще хочете використовувати цей клас із GDScript, подумайте про використання нижчої mix_rate, наприклад 11 025 Гц або 22 050 Гц.
Посібники
Властивості
|
||
|
||
|
Переліки
enum AudioStreamGeneratorMixRate: 🔗
AudioStreamGeneratorMixRate MIX_RATE_OUTPUT = 0
Поточна швидкість змішування вихідного сигналу AudioServer.
AudioStreamGeneratorMixRate MIX_RATE_INPUT = 1
Поточна швидкість змішування вхідного сигналу AudioServer.
AudioStreamGeneratorMixRate MIX_RATE_CUSTOM = 2
Спеціальна швидкість змішування, визначена mix_rate.
AudioStreamGeneratorMixRate MIX_RATE_MAX = 3
Максимальне значення для режиму швидкості змішування enum.
Описи властивостей
Довжина буфера для генерації (у секундах). Менші значення призводять до меншої затримки, але вимагають, щоб скрипт генерував аудіодані швидше, що призвело до збільшення використання ЦП і більшого ризику зламу звуку, якщо ЦП не встигає.
Частота дискретизації для використання (у Гц). Вищі значення вимагають від процесора генерувати більше, але це призводить до кращої якості.
В іграх стандартні частоти дискретизації: 11025, 16000, 22050, 32000, 44100 і 48000.
Згідно з теоремою про вибірку Найквіста-Шеннона, якість людського слуху не змінюється при перевищенні 40 000 Гц (оскільки більшість людей чують лише до ~20 000 Гц, часто менше). Якщо ви створюєте низькі звуки, як-от голоси, можна використовувати нижчу частоту дискретизації, наприклад 32000 або 22050 без втрати якості.
Примітка: AudioStreamGenerator не виконує автоматичну повторну дискретизацію вхідних даних, щоб отримати очікуваний результат, mix_rate_mode має відповідати частоті дискретизації вхідних даних.
Примітка: Якщо ви використовуєте AudioEffectCapture як джерело своїх даних, установіть mix_rate_mode на MIX_RATE_INPUT або MIX_RATE_OUTPUT, щоб автоматично відповідати поточній швидкості змішування AudioServer.
AudioStreamGeneratorMixRate mix_rate_mode = 2 🔗
void set_mix_rate_mode(value: AudioStreamGeneratorMixRate)
AudioStreamGeneratorMixRate get_mix_rate_mode()
Швидкісний режим змішування. Якщо встановлено значення MIX_RATE_CUSTOM, використовується mix_rate, інакше використовується поточна швидкість змішування AudioServer.