混合器 API#

FmodAudioBus#

继承自: RefCounted

表示一个用于混音的音频总线,支持效果处理

描述#

FmodAudioBus 表示 FMOD 音频系统中的音频混音总线。每个总线都有自己的 FmodChannelGroup 用于音频路由,并且可以应用多个 FmodAudioEffect

总线由 FmodAudioBusLayout 管理的层级结构组织。主总线是该层级的根,所有其他总线最终通过它进行路由

使用总线可以:

  • 将音频组织成逻辑分类(音乐、音效、对话等)

  • 对一组声音应用效果

  • 控制整个音频类别的音量和路由

  • 实现混音的独奏/静音功能

属性#

类型

名称

初始值

说明

bool

bypass

false

是否绕过总线上的效果链

bool

mute

false

用户设置的静音状态

bool

solo

false

是否启用独奏状态

float

volume

0.0

总线音量,单位为分贝

方法#

void init_bus(name: String, parent: FmodChannelGroup = null)#

使用指定名称和可选父通道组初始化总线

如果名称为 "Master",会直接使用 FMOD 主通道组作为总线;否则会创建新的 FmodChannelGroup 并连接到父通道组

void set_parent(parent: FmodChannelGroup)#

设置此总线输出到的父通道组

如果未提供父通道组,则连接到 FMOD 主通道组

FmodChannelGroup get_bus() const#

返回此总线用于音频路由的 FmodChannelGroup

如果总线尚未初始化,则返回 null

FmodChannelGroup get_parent() const#

返回此总线输出到的父 FmodChannelGroup

对于主总线返回 null

String get_bus_name() const#

返回此音频总线的名称

void add_effect(effect: FmodAudioEffect, index: int = 0)#

向此总线添加一个音频效果,并将效果应用到内部通道组

当前实现会将效果追加到效果列表中;如果总线已启用 bypass,添加后会立即同步旁路状态

void remove_effect(index: int)#

从此总线中移除指定索引处的音频效果

移除时会先将效果从内部通道组上解除

FmodAudioEffect get_effect(index: int) const#

返回效果链中指定索引处的 FmodAudioEffect

如果索引超出范围,则返回 null

void set_volume_db(volume_db: float)#

设置总线音量,单位为分贝

float get_volume_db() const#

返回总线音量,单位为分贝

如果总线尚未初始化,则返回 0.0

void set_solo(solo: bool)#

设置总线的独奏状态

独奏状态需要由 FmodAudioBusLayout 统一计算并应用到各总线的静音状态

bool is_solo() const#

如果此总线处于独奏状态,则返回 true

void set_mute(mute: bool)#

设置用户静音状态

此方法只记录用户设置,实际 FMOD 静音状态由 apply_mute() 应用

bool is_mute() const#

如果此总线被用户设置为静音,则返回 true

void apply_mute(mute: bool)#

根据用户静音状态和布局中的独奏状态,将最终静音状态应用到内部通道组

当任意总线处于独奏状态时,未独奏的总线会被静音

void set_bypass(bypass: bool)#

设置总线的效果旁路状态

此方法只记录旁路状态,调用 sync_bypass() 后才会同步到现有效果

bool is_bypass() const#

如果此总线启用了效果旁路,则返回 true

void sync_bypass()#

将此总线的旁路状态同步到内部通道组上的所有 DSP

这用于在更改 bypass 或新增效果后确保效果链状态一致

FmodAudioBusLayout#

继承自: Resource

管理音频总线的布局和层级

描述#

FmodAudioBusLayout 管理 FMOD 音频系统中音频总线的完整层级结构。它维护了 FmodAudioBus 实例及其相互关系的集合

该布局会自动与 Godot 的 AudioServer 总线布局同步,实现与 Godot 内置音频系统的集成

主要特性:

  • 总线层级管理(主总线及子总线)

  • 每个总线的音量、独奏、静音和旁路状态控制

  • 每个总线的效果链管理

  • 与 Godot AudioServer 的同步

方法#

void create_audio_bus(name: String, parent: FmodAudioBus = null)#

使用指定名称和可选父级创建新的音频总线

总线名称必须唯一。 Master 总线由布局自动确保存在,不应手动移除

FmodAudioBus get_audio_bus(name: String) const#

返回具有指定名称的 FmodAudioBus

如果不存在具有该名称的总线,则返回 null

bool has_audio_bus(name: String) const#

如果布局中存在具有指定名称的总线,则返回 true

void remove_audio_bus(name: String)#

从布局中移除指定名称的音频总线

警告

Master 总线无法被移除

void set_bus_volume(name: String, volume_db: float)#

设置指定总线的音量,单位为分贝

float get_bus_volume(name: String) const#

返回指定总线的音量,单位为分贝

如果总线不存在或无效,则返回 0.0

void set_bus_solo(name: String, solo: bool)#

设置指定总线的独奏状态,并更新所有总线的最终静音状态

bool bus_is_solo(name: String) const#

如果指定总线处于独奏状态,则返回 true

void set_bus_mute(name: String, mute: bool)#

设置指定总线的用户静音状态,并更新所有总线的最终静音状态

bool bus_is_mute(name: String) const#

如果指定总线被用户设置为静音,则返回 true

void set_bus_bypass(name: String, bypass: bool)#

设置指定总线的效果旁路状态,并立即同步到总线上的 DSP

bool bus_is_bypass(name: String) const#

如果指定总线启用了效果旁路,则返回 true

void add_bus_effect(bus_name: String, effect: FmodAudioEffect, index: int = 0)#

向指定总线添加 FmodAudioEffect

效果会应用到该总线的内部通道组

void remove_bus_effect(bus_name: String, index: int)#

从指定总线中移除指定索引处的音频效果

FmodAudioEffect get_bus_effect(bus_name: String, index: int) const#

返回指定总线上的指定索引处的 FmodAudioEffect

如果总线或效果不存在,则返回 null

void sync_from_audio_server()#

将此布局与 Godot AudioServer 的当前总线布局同步

同步会保留或创建 Master 总线,重建其他总线,连接父子关系,并同步音量、静音、独奏、旁路状态和支持的 Godot 音频效果