You need to enable JavaScript to run this app. pixi-sound.js 如何实现音频跳转至指定播放时间点的技术问题
优惠活动
大模型
产品
解决方案
定价
更多

pixi-sound.js 如何实现音频跳转至指定播放时间点的技术问题

pixi-sound 实现音频播放位置跳转的解决方案

核心操作逻辑

pixi-sound 已经内置了专门的跳转接口,不需要手动修改内部的currentTime、progress这类属性——这类值大多是内部实时计算的只读派生状态,直接赋值不会触发放音节点的重建逻辑,自然达不到跳转效果。
正确的跳转方式是直接调用声音实例上的seek()方法,传入目标位置的秒数即可:

// 推荐通过官方API获取声音实例,而非直接读取内部_sounds字典,避免依赖版本迭代的内部结构
const track = PIXI.sound.find('track01');
// 跳转到音频第1分30秒(即90秒)的位置
track.seek(90);
// 不传参数时,seek会返回当前的播放位置(单位:秒)
const currentPos = track.seek;

为什么之前的操作不生效

你之前接触到的几个currentTime值本质完全不同,没法用来触发跳转:

  • sound.media.context.audioContext.currentTime 是AudioContext全局的累计运行时钟,从音频上下文初始化启动后就持续递增,和单个音轨的播放进度没有绑定关系,修改这个值不会影响任何单个音频的播放位置。
  • 声音实例上挂载的currentTime、progress 是pixi-sound 内部根据播放节点的启动时间动态计算出来的展示值,没有设置监听赋值的逻辑,直接修改不会触发实际播放流程的调整。
  • 对于走WebAudio解码模式的音频,pixi-sound 内部的实际播放节点(BufferSource)是动态创建、销毁的,跳转操作本质是停止当前运行的播放节点,再从目标位置重新创建新的播放节点,这套逻辑全部封装在seek()方法内部,手动改属性根本触发不了这套流程。

常见使用注意事项

  • seek() 方法的参数单位为秒,传入值需要控制在音频总时长范围内,总时长可通过soundInstance.duration 属性读取。
  • 如果音频还处于加载、解码阶段,直接调用seek会失效,需要等待音频加载完成后再执行操作,可通过监听实例的load事件保证时机正确:
    track.on('load', () => {
      track.seek(90);
    })
    
  • 如果跳转前音频处于暂停状态,执行seek后音频会保持原有暂停状态,需要手动调用track.play() 触发继续播放。

内容的提问来源于stack exchange,提问作者Oroonoko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 07:57:03