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.

AudioEffectCapture

继承: AudioEffect < Resource < RefCounted < Object

实时公开来自音频总线的音频采样,使其可作为数据进行访问。

描述

将来自所连接音频总线的所有音频帧,也称为“样本”或“音频样本”,复制到其内部环形缓冲区中。该效果不会对音频内容进行任何修改。它可用于存储实时音频数据以供回放,也可用于生成实时音频可视化效果,如示波器显示。

应用程序代码应使用 get_buffer() 从该环形缓冲区中消耗这些音频帧,并根据需要对其进行处理,例如从 AudioStreamMicrophone 捕获数据,实现应用程序定义的效果,或通过网络传输音频。从麦克风捕获音频数据时,样本格式将为立体声 32 位浮点 PCM。

AudioEffectRecord 不同,该效果仅返回原始音频样本,而不是将它们编码到 AudioStream 中。

教程

属性

float

buffer_length

0.1

方法

bool

can_get_buffer(frames: int) const

void

clear_buffer()

PackedVector2Array

get_buffer(frames: int)

int

get_buffer_length_frames() const

int

get_discarded_frames() const

int

get_frames_available() const

int

get_pushed_frames() const


属性说明

float buffer_length = 0.1 🔗

  • void set_buffer_length(value: float)

  • float get_buffer_length()

内部环形缓冲区的长度,单位为秒。数值越大,数据保留的时间就越长,但同时也需要占用更多的内存。该值的范围可以在 0.01 到 10 之间。

注意: 如果(该缓冲区)已经初始化,设置缓冲区长度将不会生效。


方法说明

bool can_get_buffer(frames: int) const 🔗

如果内部环形缓冲区中至少有 frames 个样本可供读取,则返回 true


void clear_buffer() 🔗

清空内部环形缓冲。

注意:捕获时调用这个方法可能造成样本的丢失,导致播放时产生噪音。


PackedVector2Array get_buffer(frames: int) 🔗

从内部环形缓冲区获取后续 frames 个样本。

如果足够的话,则返回一个恰好包含 frames 个样本的 PackedVector2Array;如果可用数据不足,则返回一个空的 PackedVector2Array

样本是有符号浮点 PCM,在 -11 之间。如果想要作为 8 位或 16 位整型样本使用则需要进行缩放。(v = 0x7fff * samples[0].x


int get_buffer_length_frames() const 🔗

返回内部环形缓冲区的总大小,以样本数计。


int get_discarded_frames() const 🔗

返回由于缓冲区满而从音频总线上丢弃的样本的数量。


int get_frames_available() const 🔗

返回可使用 get_buffer() 读取的样本数。


int get_pushed_frames() const 🔗

返回从音频总线插入的样本的数量。