FmodChannelControl

FmodChannelControl#

继承: RefCounted < Object

Channel 和 ChannelGroup 的通用控制基类 (参见 FmodChannel ) (参见 FmodChannelGroup )

FmodChannelControl 封装 FMOD::ChannelControl 的共享能力,为 FmodChannel 和 FmodChannelGroup 提供播放控制、音量、3D 空间化、声像矩阵、滤波、DSP 链和样本精确调度等功能。

描述#

FmodChannelControl 为 FmodChannel 和 FmodChannelGroup 提供播放、音量、空间化、DSP 链和调度操作。通过 FmodSystem 获取已绑定句柄的通道或组;直接实例化基类不会创建 FMOD 句柄。

属性#

方法#

bool

channel_control_is_valid() const

bool

channel_control_is_null() const

bool

is_playing() const

void

stop()

void

set_paused(paused: bool)

bool

get_paused() const

void

set_mode(mode: FmodMode)

FmodMode

get_mode() const

void

set_pitch(pitch: float)

float

get_pitch() const

float

get_audibility() const

void

set_volume_db(volume: float)

float

get_volume_db() const

void

set_volume_ramp(volume_ramp: bool)

bool

get_volume_ramp() const

void

set_mute(mute: bool)

bool

get_mute() const

void

set_3d_attributes(pos: Vector3, vel: Vector3)

Dictionary

get_3d_attributes() const

void

set_3d_cone_orientation(orientation: Vector3)

Vector3

get_3d_cone_orientation() const

void

set_3d_cone_settings(inside_cone_angle: float, outside_cone_angle: float, outside_volume_db: float)

Dictionary

get_3d_cone_settings() const

void

set_3d_custom_rolloff(3d_custom_rolloff: PackedVector3Array)

PackedVector3Array

get_3d_custom_rolloff() const

void

set_3d_distance_filter(custom: bool, custom_level: float, center_freq: float)

Dictionary

get_3d_distance_filter() const

void

set_3d_doppler_level(level: float)

float

get_3d_doppler_level() const

void

set_3d_level(level: float)

float

get_3d_level() const

void

set_3d_min_distance(min_distance: float)

float

get_3d_min_distance() const

void

set_3d_max_distance(max_distance: float)

float

get_3d_max_distance() const

void

set_3d_occlusion(direct_occlusion: float, reverb_occlusion: float)

Dictionary

get_3d_occlusion() const

void

set_3d_spread(angle: float)

float

get_3d_spread() const

void

set_pan(pan: float)

void

set_mix_levels_input(levels: PackedFloat32Array)

void

set_mix_levels_output(front_left: float, front_right: float, center: float, lfe: float, surround_left: float, surround_right: float, back_left: float, back_right: float)

void

set_mix_matrix(matrix: PackedFloat32Array, outchannels: int, inchannels: int, inchannel_hop: int = 0)

Dictionary

get_mix_matrix() const

void

set_reverb_properties(instance: int, wet: float)

float

get_reverb_properties(instance: int) const

void

set_low_pass_gain(gain: float)

float

get_low_pass_gain() const

void

add_dsp(index: int, dsp: FmodDSP)

void

remove_dsp(dsp: FmodDSP)

int

get_num_dsps() const

FmodDSP

get_dsp(index: int) const

void

set_dsp_index(dsp: FmodDSP, index: int)

int

get_dsp_index(dsp: FmodDSP) const

Dictionary

get_dsp_clock() const

void

set_delay(start: int, end: int, stop_channels: bool = true)

Dictionary

get_delay() const

void

add_fade_point(dspclock: int, volume: float)

void

set_fade_point_ramp(dspclock: int, volume: float)

void

remove_fade_points(start: int, end: int)

Dictionary

get_fade_points() const

void

set_callback()

void

clear_callback()


信号#

callback_received(type: int)

收到 FMOD 回调时发出, type 表示回调事件类型。可连接此信号以接收播放结束等通道事件。


属性说明#

bool paused = true

  • void set_paused(paused: bool)

  • bool get_paused() const

为 true 时暂停通道播放。


float pitch = 1.0

  • void set_pitch(pitch: float)

  • float get_pitch() const

相对音高和播放速率


float volume_db = 0.0

  • void set_volume_db(volume: float)

  • float get_volume_db() const

音量,单位为分贝


bool volume_ramp = false

  • void set_volume_ramp(volume_ramp: bool)

  • bool get_volume_ramp() const

音量变化是否使用平滑斜坡


bool mute = false

  • void set_mute(mute: bool)

  • bool get_mute() const

静音状态


PackedVector3Array 3d_custom_rolloff = PackedVector3Array()

自定义 3D 距离衰减曲线

自定义 3D 距离衰减曲线 (参见 PackedVector3Array )


float 3d_doppler_level = 1.0

  • void set_3d_doppler_level(level: float)

  • float get_3d_doppler_level() const

多普勒效果缩放量


float 3d_level = 1.0

  • void set_3d_level(level: float)

  • float get_3d_level() const

Controls 3d level.


float 3d_min_distance = 1.0

  • void set_3d_min_distance(min_distance: float)

  • float get_3d_min_distance() const

3D 距离衰减的最小距离


float 3d_max_distance = 100000.0

  • void set_3d_max_distance(max_distance: float)

  • float get_3d_max_distance() const

3D 距离衰减的最大距离


float 3d_spread = 0.0

  • void set_3d_spread(angle: float)

  • float get_3d_spread() const

Controls 3d spread.


float gain = 1.0

  • void set_low_pass_gain(gain: float)

  • float get_low_pass_gain() const

内置低通/距离滤波使用的干信号增益


方法说明#

bool channel_control_is_valid() const

封装保存了非空 ChannelControl 指针时返回 true 。此方法不会验证底层句柄,也不会检查通道是否仍在播放。


bool channel_control_is_null() const

封装没有 ChannelControl 指针时返回 true 。已经停止的通道仍可能保存非空指针。


bool is_playing() const

返回该 Channel 或 ChannelGroup 当前是否正在播放。


void stop()

停止当前通道,或停止当前组及其嵌套组中的所有通道。停止后的 Channel 句柄失效;ChannelGroup 仍可用于后续播放。


void set_paused(paused: bool)

设置暂停状态。 true 会暂停播放, false 会恢复播放。


bool get_paused() const

返回当前暂停状态。


void set_mode(mode: FmodMode)

设置支持的播放模式标志,包括循环和 2D/3D 空间化。标志见 FmodSystem.FmodMode ;声音创建标志应在创建声音时传入。


FmodMode get_mode() const

返回当前播放模式标志。 (参见 FmodMode )


void set_pitch(pitch: float)

设置相对音高和播放速率。 1.0 为原始音高, 2.0 为两倍速, 0.5 为半速。

  • 1.0 :正常播放速度

  • 小于 1.0:播放变慢、音高降低

  • 大于 1.0:播放变快、音高升高


float get_pitch() const

返回当前相对音高和播放速率。


float get_audibility() const

返回综合音量、静音、3D 衰减和父级混音后的最终可听度。


void set_volume_db(volume: float)

设置音量,单位为分贝。

  • 0.0 dB :单位增益,保持原音量

  • 负值:衰减,降低音量

  • 正值:放大,提高音量

常用范围为 -80 dB 到 +24 dB。


float get_volume_db() const

返回当前音量,单位为分贝。


void set_volume_ramp(volume_ramp: bool)

设置音量变化是否使用 FMOD 的平滑斜坡。启用后可减少突然变更音量时的爆音。


bool get_volume_ramp() const

返回音量变化是否使用平滑斜坡。


void set_mute(mute: bool)

设置静音状态。


bool get_mute() const

返回当前静音状态。


void set_3d_attributes(pos: Vector3, vel: Vector3)

设置 3D 位置和速度,用于平移、距离衰减和多普勒计算。

  • pos :世界空间位置

  • vel :用于计算多普勒效果的速度


Dictionary get_3d_attributes() const

返回 3D 属性字典,包含 pos 和 vel 。

  • pos :当前位置,类型为 Vector3

  • vel :当前速度,类型为 Vector3


void set_3d_cone_orientation(orientation: Vector3)

设置 3D 声音锥体方向,用于方向性遮挡和衰减。

此向量应归一化,并指向音源朝向。


Vector3 get_3d_cone_orientation() const

返回当前 3D 声音锥体方向。


void set_3d_cone_settings(inside_cone_angle: float, outside_cone_angle: float, outside_volume_db: float)

设置方向性 3D 声音锥体的内角、外角和外部音量衰减。

  • inside_cone_angle :保持最大音量的锥角,单位为度,范围为 0 到 360

  • outside_cone_angle :外部锥角,单位为度,范围为 0 到 360

  • outside_volume_db :锥外音量,单位为 dB


Dictionary get_3d_cone_settings() const

返回锥体设置字典,包含 inside_cone_angle 、 outside_cone_angle 和 outside_volume_db 。

  • inside_cone_angle :内部锥角,单位为度

  • outside_cone_angle :外部锥角,单位为度

  • outside_volume_db :锥外音量,单位为 dB


void set_3d_custom_rolloff(3d_custom_rolloff: PackedVector3Array)

设置自定义 3D 距离衰减曲线。通常需要配合 FMOD_MODE_3D_CUSTOMROLLOFF 使用。

每个点使用 Vector3 表示,其中 x 为距离,y 为音量,z 不使用。


PackedVector3Array get_3d_custom_rolloff() const

返回当前自定义 3D 距离衰减曲线。


void set_3d_distance_filter(custom: bool, custom_level: float, center_freq: float)

设置 3D 距离滤波器覆盖值,用于随距离改变低通/高通滤波表现。

  • custom :是否启用自定义滤波设置

  • custom_level :启用自定义设置时的滤波电平

  • center_freq :距离滤波器的中心频率


Dictionary get_3d_distance_filter() const

返回距离滤波器设置字典,包含 custom 、 custom_level 和 center_freq 。

  • custom :是否已启用自定义滤波

  • custom_level :自定义滤波电平

  • center_freq :中心频率


void set_3d_doppler_level(level: float)

设置多普勒效果缩放量。该功能主要用于 Channel。

值越大,速度造成的音高变化越明显。


float get_3d_doppler_level() const

返回多普勒效果缩放量。


void set_3d_level(level: float)

设置 3D 平移与 2D 平移之间的混合比例。

0.0 表示完全使用 2D 声像,1.0 表示完全使用 3D 空间化。


float get_3d_level() const

返回 3D 平移与 2D 平移之间的混合比例。


void set_3d_min_distance(min_distance: float)

设置 3D 距离衰减开始前的最小距离。

该距离以内保持完整音量。


float get_3d_min_distance() const

返回 3D 距离衰减的最小距离。


void set_3d_max_distance(max_distance: float)

设置 3D 距离衰减的最大距离。

超过该距离后,音量保持在最低电平。


float get_3d_max_distance() const

返回 3D 距离衰减的最大距离。


void set_3d_occlusion(direct_occlusion: float, reverb_occlusion: float)

设置直接声和混响路径的遮挡衰减因子,范围通常为 0.0 到 1.0 。

  • direct_occlusion :0.0 为无遮挡,1.0 为完全遮挡

  • reverb_occlusion :0.0 为无遮挡,1.0 为完全遮挡


Dictionary get_3d_occlusion() const

返回遮挡字典,包含 direct_occlusion 和 reverb_occlusion 。

  • direct_occlusion :直达声遮挡,范围为 0.0 到 1.0

  • reverb_occlusion :混响声遮挡,范围为 0.0 到 1.0


void set_3d_spread(angle: float)

设置 3D 声音在扬声器空间中的扩散角度。

值越大,立体声声场中的声音越分散。


float get_3d_spread() const

返回 3D 声音扩散角度。


void set_pan(pan: float)

设置左右声像。 -1.0 为左, 0.0 为中间, 1.0 为右。

  • -1.0 :完全偏左

  • 0.0 :居中(默认值)

  • 1.0 :完全偏右

中间值表示相应的中间声像位置。


void set_mix_levels_input(levels: PackedFloat32Array)

为多声道输入信号的每个输入通道设置电平。该功能主要用于 Channel。

用于逐声道控制音量。


void set_mix_levels_output(front_left: float, front_right: float, center: float, lfe: float, surround_left: float, surround_right: float, back_left: float, back_right: float)

为每个输出扬声器设置音量电平。

用于自定义路由到指定扬声器输出。


void set_mix_matrix(matrix: PackedFloat32Array, outchannels: int, inchannels: int, inchannel_hop: int = 0)

通道数必须在 1 到 32 之间。 inchannel_hop 必须为 0 ,或介于 inchannels 和 32 之间。输入必须包含所有有效元素,最后一行末尾可省略填充。无效尺寸、步长和过短数组会在调用 FMOD 前被拒绝。

设置自定义混音矩阵,将输入通道(列)映射到输出扬声器通道(行)。

矩阵按行优先顺序排列。 inchannel_hop 为 0 时,每行视为包含 inchannels 个元素。


Dictionary get_mix_matrix() const

返回当前混音矩阵字典,包含 matrix (矩阵数据)、 outchannels (输出声道数)、 inchannels (输入声道数)和 inchannel_hop (输入声道步长)。


void set_reverb_properties(instance: int, wet: float)

设置指定全局混响实例的发送电平。


float get_reverb_properties(instance: int) const

返回指定全局混响实例的发送电平。


void set_low_pass_gain(gain: float)

设置内置低通/距离滤波应用时干信号的增益。


float get_low_pass_gain() const

返回内置低通/距离滤波应用时干信号的增益。


void add_dsp(index: int, dsp: FmodDSP)

在 DSP 链指定索引处插入一个 DSP 单元。


void remove_dsp(dsp: FmodDSP)

从 DSP 链中移除指定 DSP 单元。


int get_num_dsps() const

返回 DSP 链中的 DSP 单元数量。


FmodDSP get_dsp(index: int) const

返回 DSP 链中指定索引处的 DSP 单元;索引无效时返回 null 。


void set_dsp_index(dsp: FmodDSP, index: int)

设置指定 DSP 单元在 DSP 链中的索引。


int get_dsp_index(dsp: FmodDSP) const

返回指定 DSP 单元在 DSP 链中的索引。


Dictionary get_dsp_clock() const

返回当前 DSP 时钟信息,通常包含当前时钟和父级时钟。 (参见 Dictionary )

  • "dsp_lock" ( int ):当前通道的 DSP 时钟。

  • "parent_clock" ( int ):父 ChannelGroup 的当前 DSP 时钟。

这些时钟值用于采样级精度的播放调度。


void set_delay(start: int, end: int, stop_channels: bool = true)

设置相对于父 ChannelGroup DSP 时钟的样本精确开始和停止时间。

  • start :开始播放时的 DSP 时钟值,0 表示立即播放。

  • end :停止播放时的 DSP 时钟值,0 表示持续播放到手动停止。

  • stop_channels :为 true 时,到达结束时间即停止通道。


Dictionary get_delay() const

返回样本精确延迟设置,包含开始、结束时钟和停止行为。 (参见 Dictionary )

  • "start" ( int ):开始播放时的 DSP 时钟值。

  • "end" ( int ):停止播放时的 DSP 时钟值。

  • "stop_channels" ( bool ):到达结束时间时是否停止通道。


void add_fade_point(dspclock: int, volume: float)

在指定 DSP 时钟处添加一个音量淡变点。


void set_fade_point_ramp(dspclock: int, volume: float)

添加从当前音量到指定 DSP 时钟音量的淡变斜坡。 (参见 add_fade_point() )


void remove_fade_points(start: int, end: int)

移除两个 DSP 时钟值之间的所有淡变点。


Dictionary get_fade_points() const

返回包含 num_points (int)、 point_dspclocks (PackedInt64Array)和 point_volumes (PackedFloat32Array)的字典。两个数组的相同索引分别给出淡变点的时钟和线性音量;失败时返回空字典。


void set_callback()

安装封装的 FMOD 通道事件回调,通知会延迟到 Godot 执行。 FmodChannel 发出 FmodChannel.ended 等专用信号;基类实现发出 callback_received 。


void clear_callback()

移除 set_callback() 安装的 FMOD 回调,停止该句柄的基类和派生类通道事件通知。