FmodAudioEffectCapture#
继承: FmodAudioEffect < Resource < RefCounted < Object
将音频输出捕获到内部环形缓冲区,用于音频可视化、录音或分析。
描述#
捕获流经音频总线的信号,保持总线输出不变。使用 FmodAudioEffect.apply_to() 挂载效果器,再通过 get_buffer() 读取完整的立体声帧。每个 Vector2 的 x 存放左声道采样, y 存放右声道采样。单声道输入会复制到两个声道,多声道输入只保留前两个声道。
环形缓冲区已满时会丢弃新帧,保留尚未读取的旧帧。 clear_buffer() 会清空队列并重置两个计数器。修改 buffer_length 会清空队列,但保留计数器。
extends Node
var _capture: FmodAudioEffectCapture = FmodAudioEffectCapture.new()
func _ready() -> void:
_capture.apply_to(FmodServer.get_main_system().get_master_channel_group())
func _process(_delta: float) -> void:
if _capture.can_get_buffer(256):
var frames: PackedVector2Array = _capture.get_buffer(256)
print(frames[0].x, frames[0].y)
属性#
|
方法#
void |
set_buffer_length(buffer_length: float) |
get_buffer_length() const |
|
can_get_buffer(frames: int) const |
|
void |
|
get_buffer(frames: int) |
|
get_discarded_frames() const |
|
get_frames_available() const |
|
get_pushed_frames() const |
属性说明#
float buffer_length = 1.0
请求的缓冲时长,单位为秒,必须是有限的正数。当前实现按每秒 48,000 帧计算容量,并将容量限制在 512 到 480,000 帧之间。修改该属性会清空队列,保留帧计数器。
方法说明#
void set_buffer_length(buffer_length: float)
设置 buffer_length 并清空音频队列,保留帧计数器。
float get_buffer_length() const
返回 buffer_length ,单位为秒。
bool can_get_buffer(frames: int) const
队列中至少有 frames 个完整音频帧时返回 true 。传入零返回 true ,负数返回 false 。后续读取前,可用帧数仍可能发生变化。
void clear_buffer()
丢弃队列中的所有帧,并将 get_pushed_frames() 和 get_discarded_frames() 计数器归零。
PackedVector2Array get_buffer(frames: int)
从队列中取出最多 frames 个立体声帧,以 PackedVector2Array 返回。每个 Vector2 的 x 和 y 分别存放左右声道采样。可用帧数不足时返回较短的数组;帧数非正或缓冲区为空时返回空数组。读取不会重置计数器。
int get_discarded_frames() const
返回因缓冲区已满而丢弃的新帧数。队列中未读取的帧会保留。读取不会重置此计数器; clear_buffer() 和卸载效果器会将其归零。
int get_frames_available() const
返回队列中完整立体声帧的数量,即可读取的 Vector2 元素数。每帧包含两个声道的采样。
int get_pushed_frames() const
返回音频回调提交的总帧数,包含被丢弃的帧。读取不会重置此计数器; clear_buffer() 和卸载效果器会将其归零。