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

Javascript A-Frame-使用自定义(';A-sound';)源播放/暂停声音,javascript,audio,aframe,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 a

编辑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文件中)播放了声音,但我似乎无法正确使用事件侦听器功能(用于在单击时播放/暂停)

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

       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> 
AFRAME.registerComponent('audiohandler'{
init:function(){
让玩=假;
让audio=document.querySelector('a-sound');
this.el.addEventListener('click',()=>{
如果(!玩){
音频播放();
}否则{
audio.pause();
audio.currentTime=0;
}
玩=!玩;
});
}
})
使用
。您需要通过
yourEntityName.components.sound
访问它,并使用
playSound()
stopSound()
方法

在我的电脑上查看它。我通过
setAttribute()
设置源代码,并按下播放/停止按钮。
我的
有一个作为按钮的几何体,但您可以创建一个
实体,并像这样使用它:

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的引用,它可能未定义。如果是这样,您应该尝试等待,直到它发出
加载的
信号。

谢谢您的提示。我已经应用了一些代码,我可以通过该音频从动态源播放声音。playSound();命令,但单击功能似乎不起作用。您可以检查我编辑的帖子,看看是否发现了问题吗?请尝试document.querySelector,而不是sceneEl.querySelector。sceneEl在任何地方都没有定义。此外,您的场景中是否只有on框?是的,我现在只有一个框。我在组件的前面定义了sceneEl。document.querySelector似乎也不起作用。如果将其设置为“自动播放”,则会起作用,这样我就知道URL部分正在工作。有什么想法吗?它与我的类似吗?当您在
audiohandler
中执行
init()
时,可能声音节点未完全加载。请尝试将
作为第一个实体(解决方法不好,但如果有效,您可以尝试侦听加载的
事件,然后设置任何其他侦听器)@DarioSilva我已更新了侦听以加载a音
<a-entity component></a-entity>
<a-sound></a-sound>