You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中播放下一个base64音频前停止所有正在播放音频的方法

解决方案

核心思路是将播放的音频实例存储在全局作用域中,每次调用播放函数前先终止之前的实例即可,修改后的代码如下:

// 全局存储当前正在播放的音频实例,可自定义变量名避免和其他脚本冲突
window.currentShinyAudio = null;

shinyjs.soundmaker = function() {
  // 先终止之前正在播放的音频
  if (window.currentShinyAudio) {
    window.currentShinyAudio.pause();
    // 重置播放进度为0,下次从头播放
    window.currentShinyAudio.currentTime = 0;
    window.currentShinyAudio = null;
  }
  // 新建音频实例并播放
  window.currentShinyAudio = new Audio("data:audio/wav;base64,blablablabla");
  // 可选:添加错误捕获避免播放失败报错
  window.currentShinyAudio.play().catch(err => {
    console.warn("音频播放失败:", err);
  });
}

额外优化建议

  • 如果需要动态传入不同的base64音频内容,可以给函数添加参数,R端调用时直接传入对应字符串即可,无需写死在JS代码中:
shinyjs.soundmaker = function(audioBase64) {
  // 前面的终止逻辑不变
  if (window.currentShinyAudio) {
    window.currentShinyAudio.pause();
    window.currentShinyAudio.currentTime = 0;
    window.currentShinyAudio = null;
  }
  window.currentShinyAudio = new Audio(audioBase64);
  window.currentShinyAudio.play();
}

R端调用示例:shinyjs::soundmaker("你的base64音频字符串")

  • 如果需要多组音频独立控制(比如通知音、警告音分开终止),只需要新建不同的全局存储变量,对应不同的播放函数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:45:09