0

我想使用 Aframe 声音组件获得位置音频。但我也希望能够使用音频分析器节点分析所述音频。音频分析器需要指定源,但它似乎只适用于 <audio>元素而不是 Aframe 的内部声音组件。任何人都知道如何引用 component.sound 作为音频分析器的源?

<a-sound id="audio" src="src: url(someAudio.ogg)" autoplay="true" position="0 -0.3 -3"></a-sound>
<a-entity  gltf-model="#somemodel" position="0 -0.3 -3"
audioanalyser="src: #audio"
audioanalyser-volume-scale="multiplier: .048">
</a-entity>
4

2 回答 2

1

我设法解决了这个问题。当您使用“声音”组件将音频附加到实体时,您实际上是在使用音频实体 THREE.Audio(listener)。解决方案是使用 检索附加到实体的“声音”子级getObject3D('sound').children[0]

所以 initContext 函数应该是这样的:

  initContext: function () {
    const data = this.data;
    console.log(this.el)
    console.log(this.el.getObject3D('sound'))
    const sound = this.el.getObject3D('sound').children[0]
    const threeAnalyser = new THREE.AudioAnalyser(sound, data.fftSize)
    const analyser = (this.analyser = threeAnalyser.analyser)
    analyser.smoothingTimeConstant = data.smoothingTimeConstant;

    this.context = this.el.sceneEl.audioListener.context
    this.levels = new Uint8Array(analyser.frequencyBinCount);
    this.waveform = new Uint8Array(analyser.fftSize);

  },

请注意,这会使“src”变得多余。

于 2021-09-21T16:33:52.320 回答
0

与此同时,我发现您可以开始播放源音频组件,但将音量设置得非常低,这样它就不会干扰同时播放的位置声音组件音频。但是我想这不是非常有效或有效,所以我仍在寻找更好的答案。

document.getElementById("audio_1").volume = 0.01;
document.getElementById("audio_1").play();
于 2020-09-14T17:36:47.447 回答