gpt4 book ai didi

audio - 在一个帧中,当新声音开始播放时,如何停止所有声音?

转载 作者:行者123 更新时间:2023-12-02 23:29:37 25 4
gpt4 key购买 nike

当我单击a实体时,它会播放声音,但是在播放时如何使其停止所有其他声音,所以这不是一团乱麻的事情吗?

我已经搜索了这个问题,并尝试添加他们使用的代码,但是它们没有起作用,我已经尝试了5种不同的代码。

我正在像这样运行我的声音:

<audio id="mercury-sound" src="mercury.mp3" preload="auto"></audio>

<script id="mercury" type="text/html">
<a-entity class="mercury"
geometry="primitive: sphere; radius: 0.67"
material="shader: flat; src: ${thumb}"
event-set__mouseenter="_target: #image-mercury; material.src: ${src}; opacity: 1"
event-set__mouseleave="_target: #image-mercury; material.src: ${src}; opacity: 0">
</a-entity>
</script>


<a-entity template="src: #mercury" sound="src: #mercury-sound; on"></a-entity>

我希望它播放声音并在播放时停止所有其他声音。

编辑:如果其他人有此问题,这是修复它的

The template component is creating child nodes, You need to grab let el = e.target.parentNode. Check it out here also i would manage all sound-related logic in js, but thats another topic :) btw where is poor pluto ! – Piotr Adam Milewski

最佳答案

这是使用js的方法。这个想法是:

1)保持带有声音的元素的数组
2)单击一个时-遍历数组并停止声音
3)播放“被点击”的

具有这样的设置:

<a-box sound='#first'></a-box>
<a-box sound='#second'></a-box>
<a-box sound='#third'></a-box>

您可以创建一个脚本,该脚本将:
// grab all elements with the sound component
var soundEls = document.querySelectorAll('[sound]')

// make sure all of those react on a 'click' event
for (var i = 0; i < soundEls.length; i++) {
var item = soundEls[i];
item.addEventListener('click', e => {
let el = e.target

// don't replay an already playing sound
let isPlaying = el.components.sound.isPlaying

// stop all sounds
soundEls.forEach(soundEl => {
soundEl.components.sound.stopSound()
})

// play the clicked sound if isn't already playing
if (!isPlaying)
el.components.sound.playSound()
})
}

通常,我建议使用aframe custom component。但是通过这种方式可能更容易理解。在 this glitch中 checkout 。

关于audio - 在一个帧中,当新声音开始播放时,如何停止所有声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56093267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com