qq_37667331 2023-03-16 10:15 采纳率: 100%
浏览 11
已结题

怎样清空Three中已添加过的声音

怎样清空Three中已添加过的声音

我在页面中多次执行这个方法,就会有多个声音播放,怎样清空Three中已添加过的声音?希望可以通过邮件告诉我,谢谢。937681195@qq.com


 function onlySound() {
        const listener = new THREE.AudioListener();
        // 创建一个全局 audio 源
        const sound = new THREE.Audio(listener);
        // 加载一个 sound 并将其设置为 Audio 对象的缓冲区
        const audioLoader = new THREE.AudioLoader();
        audioLoader.load(mp3, function (buffer) {
            sound.setBuffer(buffer);
            sound.setLoop(true);
            sound.setVolume(0.5);
            sound.play();
        });
    }
  • 写回答

2条回答 默认 最新

  • 「已注销」 2023-03-16 10:41
    关注

    参考GPT和自己的思路:

    您可以通过调用 stop() 方法来停止正在播放的声音,并调用 disconnect() 方法来断开与音频源的连接,从而清空Three中已添加过的声音。可以按照以下步骤实现:

    1. 在函数 onlySound() 中,将 sound 对象声明成全局变量,以便之后可以访问。
    2. 在调用 onlySound() 函数之前,定义一个新的函数,例如 stopSound(),在其中调用 sound.stop()sound.disconnect() 方法来停止并断开音频源。
    3. 每次调用 onlySound() 函数之前,调用 stopSound() 函数来清空之前添加的声音。

    下面是示例代码:

    var sound; // 全局变量
    
    function onlySound() {
      const listener = new THREE.AudioListener();
      sound = new THREE.Audio(listener);
      const audioLoader = new THREE.AudioLoader();
      audioLoader.load(mp3, function (buffer) {
        sound.setBuffer(buffer);
        sound.setLoop(true);
        sound.setVolume(0.5);
        sound.play();
      });
    }
    
    function stopSound() {
      if (sound) {
        sound.stop();
        sound.disconnect();
      }
    }
    

    您可以在需要清空声音时调用 stopSound() 函数,如下所示:

    stopSound(); // 清空已添加的声音
    onlySound(); // 添加新的声音
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月3日
  • 已采纳回答 3月26日
  • 创建了问题 3月16日

悬赏问题

  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失