跳到正文

Playback API ​

playback 系列 API 参考。

本页是下列命名空间的主文档。方法名、参数键与返回字段均与运行时实现保持一致。

播放位置与时钟 ​

  • 延迟补偿与阶梯推进:playback.getPosition、playback:timeHighRes 与 playback:stateChanged 报告的播放位置均已扣除输出缓冲与 DSP 延迟,同步歌词或音视频时无需重复扣减。底层音频引擎的读数呈阶梯式更新(通常每 10–30 ms 前进一步),此更新步长不同于 playback:timeHighRes 约每 100 ms 派发一次的广播频率。
  • 采样基准与时间外推:hostTime 记录宿主读取位置的系统时间(Unix 毫秒,与前端 Date.now() 同源)。两次采样之间可通过 hostTime 线性外推估算位置,但无法消除起播、跳转、恢复播放或交叉渐变时的瞬态停滞与跳变;视频同步推荐使用 SDK 的 MediaElementFollower。
  • 时间事件判据:playback:time 仅提供粗粒度的显示用位置(约每秒一次),不包含采样时间戳。playback:seeked.position 与 playback.setPosition 返回的 actualPosition 为设定的跳转目标;定位后立即采样得到的 newPosition 仍可能是旧位置。

playback ​

playback.getCurrentTrack ​

报告当前载入(播放中或暂停)的曲目。恒成功,有没有曲目看 found。

无参数。

返回值

字段类型说明
foundboolean是否有曲目载入。
trackTrack载入的曲目;found 为 false 时没有这个键。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.getCurrentTrack');

playback.getCurrentTrackIndex ​

定位当前播放曲目在所在播放列表中的索引位置。仅当曲目自播放列表项起播时可用;自其他来源起播的曲目无索引位置(即使存在播放中列表)。当播放行从源列表中移除(或源列表本身被删除)后,曲目虽继续播放但索引位置丢失;停止状态下亦无索引。

参数类型必填说明
includeTrackInfoboolean否true 时附带该位置的曲目行。默认 false。

返回值

字段类型说明
foundboolean正在播放的曲目是否有播放列表位置。
playlistinteger | null播放列表序号;没有位置时为 null。
playlistGuidstring | null该播放列表的 GUID,写法与 playlistGuid 接受的一致;没有位置时为 null。
indexinteger | null在该播放列表中的行号;没有位置时为 null。
trackTrack该位置的曲目;只在 includeTrackInfo 为真且该行仍存在时给出。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const res = await fb2k.invoke('playback.getCurrentTrackIndex');
if (res.success === false) throw new Error(res.error);
const { playlist, index } = res;

playback.getPlaybackOrder ​

报告当前播放顺序,同时给出序号与名称。

无参数。

返回值

字段类型说明
orderinteger当前顺序的序号,0 到 6。
orderName"default" | "repeat-playlist" | "repeat-track" | "random" | "shuffle-tracks" | "shuffle-albums" | "shuffle-folders"当前顺序的名称。
name"default" | "repeat-playlist" | "repeat-track" | "random" | "shuffle-tracks" | "shuffle-albums" | "shuffle-folders"与 orderName 相同。
orderIndexinteger与 order 相同。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.getPlaybackOrder');

playback.getPlayingPlaylist ​

报告最近一次起播所在的播放列表。foobar2000 在停止后仍保留这个指针,所以播放过的实例在停止态也会报告。

无参数。

返回值

字段类型说明
foundboolean是否有已知的正在播放的列表。
playlistinteger | null播放列表序号;没有时为 null。
playlistGuidstring | null该播放列表的 GUID,写法与 playlistGuid 接受的一致;没有时为 null。
namestring该播放列表的名称;没有时没有这个键。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.getPlayingPlaylist');

playback.getPosition ​

报告播放位置,以及所在曲目的时长与身份。没有曲目在播放时全部为零或空。

无参数。

返回值

字段类型说明
positionnumber距曲目开头的可听位置,单位秒,已扣除输出缓冲与 DSP 延迟,不要再次扣减。宿主读数呈阶梯变化,通常每 10–30 ms 更新一次;起播、定位、恢复播放后及交叉渐变期间可能短暂停滞或跳变,不是采样级精确时钟。
durationnumber曲目时长,单位秒;没有曲目在播放或时长未知时为 0。
subsonginteger曲目的子曲目标识;整个文件为 0。
pathstringfoobar2000 存储形式的路径,不带子曲目后缀;没有曲目在播放时为空。
hostTimenumber读 position 时宿主的系统时间,Unix 纪元毫秒,带小数,与 Date.now() 是同一个时钟。播放且未暂停时,position + (Date.now() - hostTime) / 1000 可估出当前位置。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.getPosition');

playback.getState ​

报告播放状态以及当前曲目允许的操作。

无参数。

返回值

字段类型说明
state"stopped" | "playing" | "paused"播放状态。
canSeekboolean当前曲目能否定位;停止态与不支持定位的流为 false。
canPauseboolean当前曲目能否暂停;恒为 true。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.getState');

playback.getStopAfterCurrent ​

报告是否在当前曲目结束后停止。

无参数。

返回值

字段类型说明
enabledboolean是否在当前曲目结束后停止。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.getStopAfterCurrent');

playback.getVolume ​

以宿主用的两种刻度报告输出音量,以及是否静音。

无参数。

返回值

字段类型说明
volumenumber音量百分比,0 到 100,由分贝值换算;静音时为 0。
volumeDbnumber音量分贝值,-100(静音)到 0(最大)。
mutedboolean是否静音;音量为 0 也算静音。
isMutedboolean与 muted 相同。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.getVolume');

playback.mute ​

静音或取消静音;目标状态已生效时静默忽略。解除静音恢复先前的音量。

参数类型必填说明
mutedboolean否true 静音,false 取消静音。默认 true。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('playback.mute', { muted: true });

playback.next ​

按当前播放顺序跳到下一首。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.next');

playback.pause ​

暂停播放;停止状态下静默忽略。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.pause');

playback.play ​

开始播放;暂停中则继续。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.play');

playback.playOrPause ​

与 playPause 相同。

无参数。

返回值

字段类型说明
isPlayingboolean切换后是否在播放。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.playOrPause');

playback.playPath ​

追加单个文件至活动播放列表并立即播放;无活动列表时自动创建。支持以 |subsong:N 后缀指定子曲目序号。若活动列表已锁定,以 LOCKED 失败且不修改列表或起播。路径未通过媒体根安全检查时以 PERMISSION_DENIED 失败;若宿主无法解析为有效曲目,以 NOT_FOUND 失败(附带 path 与 subsong)。

参数类型必填说明
pathstring是文件路径,可带 |subsong:N 后缀。不能为空。

返回值

字段类型说明
tracksAddedinteger加入播放列表的行数;为 1。
pathstring去掉子曲目后缀的文件路径。
subsonginteger实际播放曲目的子曲目标识:用 |subsong:N 请求的就是它,即便 foobar2000 没把它列为文件的子曲目;不带后缀时是文件的第一个。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('playback.playPath', { path: 'C:\\Music\\song.flac' });

支持以 path|subsong:N 格式指定 CUE 关联文件中的具体子曲目。后端将自动解析文件路径与子曲目序号后起播。

playback.playPaths ​

批量添加文件至活动播放列表并起播其中一首。非字符串或未通过媒体根检查的项被跳过并计入 skippedPaths(仅成功响应包含此项);全部项被跳过时以 INVALID_PARAMS 失败。其余路径按字面添加为曲目(不展开目录或播放列表文件,亦不校验文件是否存在)。若无法生成任何曲目以 NOT_FOUND 失败。活动列表锁定则以 LOCKED 失败,不执行任何清空、添加或播放。

参数类型必填说明
pathsstring[]是文件路径,每条可带 |subsong:N 后缀。不能为空。
startIndexinteger否从加入的第几首起播,按解析成功的曲目计数;超出范围时从第一首起播。不小于 0。默认 0。
replaceboolean否true 先清空活动播放列表再加入;false 追加。默认 false。

返回值

字段类型说明
tracksAddedinteger加入播放列表的曲目数。
startedAtinteger回显传入的 startIndex;即使索引超出范围且实际从首曲起播,仍回显原始传入值。
skippedPathsinteger调用前被路径安全检查丢弃的路径数;只在至少丢弃一条时出现。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('playback.playPaths', { paths: ['C:\\Music\\a.flac', 'C:\\Music\\b.flac'] });

playback.playPause ​

在播放与暂停之间切换;停止状态下开始播放。报告切换后的状态。

无参数。

返回值

字段类型说明
isPlayingboolean切换后是否在播放。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.playPause');

playback.previous ​

按当前播放顺序跳到上一首。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.previous');

playback.random ​

从活动播放列表里随机起播一首。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.random');

playback.setPlaybackOrder ​

按序号或名称选择播放顺序;两者必须恰好给一个。报告设置之后生效的顺序。

参数类型必填说明
orderinteger否按序号选择,0 到 6,顺序同 PlaybackOrderName。取值 0 到 6(含端点)。
name"default" | "repeat-playlist" | "repeat-track" | "random" | "shuffle-tracks" | "shuffle-albums" | "shuffle-folders"否按名称选择。

返回值

字段类型说明
orderinteger调用后生效的顺序序号。
orderName"default" | "repeat-playlist" | "repeat-track" | "random" | "shuffle-tracks" | "shuffle-albums" | "shuffle-folders"调用后生效的顺序名称。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

order(索引)与 name(名称)参数二者必选其一。有效模式包括:0(default)、1(repeat-playlist)、2(repeat-track)、3(random)、4(shuffle-tracks)、5(shuffle-albums)、6(shuffle-folders)。索引越界、名称无效、同时传入或均未传入时,调用以 INVALID_PARAMS 失败且维持当前播放顺序。返回值中的 order 与 name 反映操作执行后生效的实际播放顺序。

js
await fb2k.invoke('playback.setPlaybackOrder', { name: 'random' });

playback.setPosition ​

在当前播放或暂停的曲目内定位。目标位置自动钳位至曲目有效区间:负值重置至起点,超出时长时钳位至结尾前临界点以避免切歌;未知时长的曲目不设上限。没有正在播放的曲目时以 NO_ACTIVE_ITEM 失败,不能定位的曲目(如大多数网络流)以 NOT_SUPPORTED 失败

参数类型必填说明
positionnumber是目标位置,单位秒。

返回值

字段类型说明
requestedPositionnumber原始请求的目标位置(钳位前)
actualPositionnumber钳位至曲目有效区间后实际应用的目标位置
oldPositionnumber定位前读到的位置,单位秒,与 playback.getPosition 一样已补偿输出延迟。
newPositionnumber定位后立即读到的位置,单位秒,与 playback.getPosition 一样已补偿输出延迟;引擎可能尚未稳定,因此仍可能是旧位置。
hostTimenumber读 newPosition 时宿主的系统时间,Unix 纪元毫秒,带小数,与 Date.now() 是同一个时钟。
durationnumber曲目时长,单位秒;时长未知时为 0 或更小。
subsonginteger曲目的子曲目标识。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('playback.setPosition', { position: 42.5 });

playback.setStopAfterCurrent ​

设置或取消在当前曲目结束后停止。

参数类型必填说明
enabledboolean是true 表示当前曲目结束后停止。

返回值

字段类型说明
enabledboolean现在生效的值。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('playback.setStopAfterCurrent', { enabled: true });

playback.setVolume ​

按百分比设置输出音量。有效范围 0..100,超出自动钳位;0 表示静音

参数类型必填说明
volumenumber是音量百分比;有效范围 0..100,超出自动钳位

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
await fb2k.invoke('playback.setVolume', { volume: 80 });

playback.stop ​

停止播放。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.stop');

playback.toggleMute ​

翻转静音状态并报告新状态。

无参数。

返回值

字段类型说明
mutedboolean翻转后是否静音。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.toggleMute');

playback.toggleStopAfterCurrent ​

翻转「当前曲目后停止」并报告新值。

无参数。

返回值

字段类型说明
enabledboolean翻转后的值。

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.toggleStopAfterCurrent');

playback.volumeDown ​

按宿主的步长调低音量:一分贝,落在整数分贝上。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.volumeDown');

playback.volumeUp ​

按宿主的步长调高音量:一分贝,落在整数分贝上。

无参数。

返回值

成功时 success 为 true;失败时返回 { success: false, error, code },code 见错误码。

js
const result = await fb2k.invoke('playback.volumeUp');

相关事件 ​

  • playback:stopAfterCurrentChanged:单曲播放结束停止选项变更事件,payload 为 { enabled },字段名与 API 返回值一致。
  • 完整的播放事件清单与参数定义参见全局事件参考。