AudioStreamGenerator¶
继承: AudioStream < Resource < RefCounted < Object
带有程序声音生成实用程序的音频流。
描述¶
AudioStreamGenerator是一种音频流,它不会自行播放声音,而是需要一个脚本为其生成音频数据。另请参阅AudioStreamGeneratorPlayback。
以下是使用它生成正弦波的示例:
var playback # 将执行 AudioStreamGeneratorPlayback。
@onready var sample_hz = $AudioStreamPlayer.stream.mix_rate
var pulse_hz = 440.0 # 声波的频率。
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; // 将执行 AudioStreamGeneratorPlayback.
private float _sampleHz;
private float _pulseHz = 440.0f; // 声波的频率。
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);
}
}
在上述示例中,“AudioStreamPlayer”节点必须使用AudioStreamGenerator作为其流。fill_buffer函数提供音频数据来近似正弦波。另请参阅AudioEffectSpectrumAnalyzer进行实时音频频谱分析。注意:由于性能限制,该类最好从C#或通过S3Extension从编译语言使用。如果您仍然想从S3Script使用此类,请考虑使用较低的mix_rate,例如11,025 Hz或22,050 Hz。
属性¶
|
||
|
||
|
枚举¶
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
混合速率模式枚举的最大值。
属性说明¶
要生成的缓冲区长度(以秒为单位)。较低的值会导致较少的延迟,但需要脚本更快地生成音频数据,从而导致CPU使用率增加,如果CPU跟不上,音频破解的风险也会增加。
要使用的采样率(以Hz为单位)。更高的值对CPU生成的要求更高,但会带来更好的质量。
在应用中,使用的常见采样率是11025、16000、22050、32000、44100和48000。
根据Nyquist-Shannon采样定理,当超过40,000 Hz时,人类的听力没有质量差异(因为大多数人只能听到约20,000 Hz,通常更少)。如果您正在生成低音调的声音,例如声音,较低的采样率,例如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混音速率。