Skip to content

SDK 事件系统

订阅事件

javascript
// 订阅事件,返回取消订阅函数
const unsubscribe = fb.on('playback:trackChanged', (track) => {
    console.log('Now playing:', track.title);
});

// 取消订阅
unsubscribe();

一次性事件

javascript
fb.once('playback:trackChanged', (track) => {
    console.log('First track:', track.title);
});

取消订阅

javascript
// 方式一:使用返回的 unsubscribe 函数(推荐)
const unsub = fb.on('playback:time', handler);
unsub();

// 方式二:手动 off
fb.on('playback:time', handler);
fb.off('playback:time', handler);

播放事件

事件名触发时机数据
playback:trackChanged曲目切换
playback:stateChanged播放状态变化{state, position, duration} (state: "playing" / "paused" / "stopped")
playback:paused播放/暂停切换
playback:stopped播放停止{reason} ("user" / "eof" / "starting_another" / "shutting_down")
playback:starting播放即将开始{command, paused} (command: "play" / "next" / "previous" / "random")
playback:seeked播放位置跳转
playback:volumeChanged音量变化
playback:time播放时间更新(~1秒/次,整数秒)
playback:timeHighRes高精度时间更新(~100ms,小数秒,C++ 定时器轮询真实位置)
playback:orderChanged播放顺序变化
playback:queueChanged播放队列变化{origin} ("user_added" / "user_removed" / "playback_advance")
playback:edited当前曲目元数据被编辑
playback:dynamicInfo动态信息变化(网络流)
playback:dynamicInfoTrack动态曲目信息变化
playback:itemPlayed曲目播放完成{title, artist, album, duration, path, ...} (完整 track info)
playback:stopAfterCurrentChanged"当前曲目后停止"状态变化
playback:followCursorChanged"播放跟随光标"变化
playback:cursorFollowChanged"光标跟随播放"变化

播放列表事件

事件名触发时机数据
playlist:activated活动播放列表切换
playlist:created播放列表创建
playlist:removed播放列表删除
playlist:renamed播放列表重命名
playlist:reordered播放列表顺序变化
playlist:lockChanged锁定状态变化
playlist:itemsAdded曲目添加
playlist:itemsRemoved曲目移除
playlist:itemsReordered曲目重新排序
playlist:itemsReplaced曲目替换
playlist:selectionChanged选中项变化
playlist:focusChanged焦点曲目变化
playlist:defaultFormatChanged默认格式变化-
playlist:addComplete异步添加完成(广播)

媒体库 / 元数据事件

事件名触发时机数据
library:itemsAdded媒体库新增项目
library:itemsRemoved媒体库移除项目
library:itemsModified媒体库项目修改
library:initialized媒体库初始化完成
metadb:changed元数据变化
selection:changed全局选择变化(50ms 节流)

音频事件

事件名触发时机数据
audio:spectrum频谱数据更新(需订阅)
audio:stream音频流数据更新(需调用 subscribeStream 订阅)音频流数据
audio:dspPresetChangedDSP 预设变化-
audio:outputDeviceChanged输出设备变化-
audio:replaygainModeChangedReplayGain 模式变化
audio:fullWaveformReady完整波形生成完成
audio:fullWaveformFailed完整波形生成失败

窗口 / 面板 / UI 事件

事件名触发时机数据
window:alwaysOnTopChanged置顶状态变化
window:stateChanged窗口状态变化规范字段 {isMaximized, isMinimized}(运行时暂兼容 maximized / minimized)
window:popupOpened弹出窗口打开
window:popupClosed弹出窗口关闭
window:beforeClose窗口关闭前确认
window:message跨窗口消息接收
window:behaviorChanged弹窗行为策略变更
window:minimizeSuppressed抑制最小化(Win+D 策略)
window:backdropStateChanged主窗口 / popup 的 DWM 激活/失焦策略生效
panel:initialized面板初始化完成
panel:focus面板获得焦点-
panel:blur面板失去焦点-
panel:visibilityChangedDUI 面板可见性变化
panel:configChanged面板配置变化
ui:coloursChanged颜色主题变化-
ui:fontChanged字体变化-
ui:menuItemClicked菜单项点击
ui:toast通知消息
system:themeChanged系统主题变化

其他事件

事件名触发时机数据
app:beforeQuitfoobar2000 即将退出-
keyboard:hotkey键盘快捷键

跨窗口通信事件

事件名触发时机数据
port:connected命名通道连接
port:disconnected命名通道断开
port:message收到跨窗口消息
state:changed共享状态变更
state:deleted共享状态删除

插件事件

事件名触发时机数据
plugin:registered外部插件注册
plugin:unregistered外部插件注销
api:registered外部 API 注册
api:unregistered外部 API 注销
http:response异步 HTTP 请求完成
jitQueue:needNext后端请求下一首{currentTrackId, reason} (reason: "trackChange" / "prefetch")
jitQueue:trackChanged播放曲目变化
jitQueue:listExhausted缓冲区耗尽
jitQueue:error错误

所有事件同时派发为 fb2k:* DOM 事件(CustomEvent)。

完整事件参考及字段说明见 事件系统参考。 SMP 事件名映射见 SMP 兼容层