Skip to content

音频 API

This content is not available in your language yet.

音频系统通过 executePluginCommand('audio', ...) 进行控制。引擎提供了灵活的音频实例管理,每个音频由一个唯一的 name 标识。

import { executePluginCommand } from '@momoyu-ink/kit';
// 加载音频
executePluginCommand('audio', {
subCommand: 'load',
name: 'bgm',
src: 'audio/bgm/theme.opus',
settings: { loop: true, volume: 0.8 },
});
// 播放
executePluginCommand('audio', {
subCommand: 'play',
name: 'bgm',
fadeTime: 600,
});
// 停止并释放
executePluginCommand('audio', {
subCommand: 'release',
name: 'bgm',
fadeTime: 1000,
});

加载音频文件并创建一个音频实例。如果同名实例已存在,会先释放旧实例。

executePluginCommand('audio', {
subCommand: 'load',
name: 'bgm', // 实例名(唯一标识)
src: 'audio/bgm/theme.opus', // 文件路径
settings: { // 可选:初始设置
loop: true,
volume: 0.8,
},
});
参数类型说明
namestring音频实例名称
srcstring音频文件路径(相对于 assets/
settingsAudioSettings可选,初始设置
字段类型默认值说明
volumenumber1音量(0~1)
loopbooleanfalse是否循环
loopRegion[number, number]循环区间(秒),-1 表示到末尾
playbackRatenumber1播放速率
panningnumber0声像(-1 左 ~ 0 中 ~ 1 右)
startPositionnumber0起始播放位置(秒)
reversebooleanfalse是否倒放
delayTimenumber延迟播放时长(毫秒)
fadeTimenumber渐入时长(毫秒)
autoPlaybooleanfalse加载后自动播放
executePluginCommand('audio', {
subCommand: 'play',
name: 'bgm',
fadeTime: 600, // 可选:渐入时长(毫秒)
});
参数类型说明
namestring实例名称
fadeTimenumber可选,渐入时长(毫秒)
waitForEndboolean可选。为 true 时,命令会返回一个在自然播放结束后 resolve 的 Promise

如果传入 waitForEnd: trueplay 不只是“开始播放”,还可以被 await

await executePluginCommand('audio', {
subCommand: 'play',
name: 'voice_alice',
waitForEnd: true,
});
// 这里说明音频已经自然播放完毕

这对自动播放、语音同步,或任何“播完再继续”的逻辑都很有用。标准框架当前就使用这个能力让 VoiceActor 在 auto 模式下等待语音自然结束后再结算 auto ticket。

停止播放但保留实例,可以再次 play

executePluginCommand('audio', {
subCommand: 'stop',
name: 'bgm',
fadeTime: 600,
});

暂停播放,保留播放位置。

executePluginCommand('audio', {
subCommand: 'pause',
name: 'bgm',
fadeTime: 300,
});

从暂停位置恢复播放。

executePluginCommand('audio', {
subCommand: 'resume',
name: 'bgm',
fadeTime: 300,
});

停止播放并释放音频实例及其占用的资源。

executePluginCommand('audio', {
subCommand: 'release',
name: 'bgm',
fadeTime: 1000, // 可选:渐出时长
});
executePluginCommand('audio', {
subCommand: 'setVolume',
name: 'bgm',
volume: 0.5, // 0~1
fadeTime: 300, // 可选:渐变时长
});
参数类型说明
namestring实例名称
volumenumber目标音量(0~1)
fadeTimenumber可选,渐变时长
executePluginCommand('audio', {
subCommand: 'seekTo',
name: 'bgm',
time: 30.0, // 秒
});
executePluginCommand('audio', {
subCommand: 'seekBy',
name: 'bgm',
time: -5.0, // 后退 5 秒
});
executePluginCommand('audio', {
subCommand: 'setPlaybackRate',
name: 'bgm',
rate: 1.5, // 1.5 倍速
});

设置音频的循环起止点(单位:秒),音乐播放到 end 时会跳回 start

executePluginCommand('audio', {
subCommand: 'setLoopRegion',
name: 'bgm',
start: 10.0, // 循环起点(秒)
end: 120.0, // 循环终点(秒)
});

控制音频的左右声道平衡。

executePluginCommand('audio', {
subCommand: 'setPanning',
name: 'bgm',
panning: -0.5, // -1(全左)~ 0(居中)~ 1(全右)
});

标准框架将音频用途抽象为四个通道,但底层都是同一套 API:

通道实例命名规则说明
BGM'bgm'单实例,循环播放,由 BGMActor 管理
SFX'sfx_{seq}'每次播放创建独立实例,由 SfxActor 管理
Voice'voice''voice_{name}'按角色分通道,由 VoiceActor 管理
Sound自定义 channel命名通道,由 SoundActor 管理

你可以根据需要使用任意命名策略来管理音频实例。