A-Frame - 使用自定义('a-sound')音源播放/暂停声音

时间:2018-01-06 17:29:15

标签: javascript audio aframe

编辑2:这是工作代码。非常感谢Piotr的帮助,如果没有你们,我不可能毫不费力地做到这一点。

sceneEl.querySelector('a-sound').setAttribute('sound', {src:url3}); 
      let playing = false;
      var el = document.querySelector('a-box');
      let audioEl = document.querySelector("a-sound");
      var audio = audioEl.components.sound;
      el.addEventListener('click', () => {
      if (!playing) {
      audio.playSound();
      } else {
      audio.stopSound();
      }
      playing = !playing;
      })


      } );
      request.send( null );
      }
      });

编辑:我从动态URL(在我的JSON文件中)播放声音,但我似乎无法使事件监听器功能正确(在点击时播放/暂停)。

sceneEl.querySelector('a-sound').setAttribute('sound', {src:url3}); 
      let audioEl = document.querySelector("a-sound");
      let audio = audioEl.components.sound;
      sceneEl.querySelector('a-box').addEventListener('click', function () {
      if(!playing) {
          audio.play();
       } else {
          audio.pause();
          audio.currentTime = 0;
       }
       playing = !playing;
       });   
    } );
      request.send( null );
      }
      });

原文:我在A-Frame中使用this组件,但我希望从('a-sound')实体中的src播放声音,而不是从资产链接播放声音。原因是因为我从JSON数组动态加载声音文件,因此它们不存在于任何资产列表中。我已经加载了所有文件但是无法将此组件挂钩到我加载的sceneEl.querySelector('a-sound').setAttribute('sound', {src:url3});代码中。我认为它只是一个小的语法问题,但我不是百分百肯定。有人可以看一下这一分钟,告诉我它是否可行?这是代码(与querySelector中的(a-sound)除外的链接相同。

       AFRAME.registerComponent('audiohandler', {
       init:function() {
       let playing = false;
       let audio = document.querySelector('a-sound');
       this.el.addEventListener('click', () => {
       if(!playing) {
          audio.play();
       } else {
          audio.pause();
          audio.currentTime = 0;
       }
       playing = !playing;
       });
       }
       })
    </script> 

1 个答案:

答案 0 :(得分:1)

使用<a-sound>你必须处理不同的事情。

播放/停止声音应在sound component内完成。您需要通过yourEntityName.components.sound访问它并使用playSound()stopSound()方法。

glitch上查看。我通过setAttribute()设置了来源,并制作播放/停止按钮。

<小时/> 我的<a-sound>几何图形为按钮,但您可以创建一个<a-sound>实体,并按照以下方式使用它:

let audioEl = document.querySelector("a-sound");
audioEl.setAttribute("src", "sourceURL");

let audio = audioEl.components.sound;
// play = audio.playSound();
// stop = audio.stopSound():

此外,节点未完全加载存在许多问题。看看这个例子:

<a-entity component></a-entity>
<a-sound></a-sound>

如果组件尝试获取对document.querySelector("a-sound").components.sound的引用,则可能未定义。如果是这样,您应该尝试等到它发出loaded信号。