Processing音频问题:如何实现条件触发时音频仅播放一次
解决Processing音频重复播放导致崩溃的问题
嘿,欢迎第一次在Stack Overflow提问!我来帮你搞定这个音频重复触发的问题~
你的核心问题是:因为waist.angle每帧都在更新,当前代码会每帧都调用一次play(),哪怕音频已经在播放了。这种频繁的重复播放请求会快速消耗音频资源,最终导致程序崩溃。
解决思路很简单:跟踪当前正在播放的音频状态,只在状态发生变化时才切换音频,而不是每帧都执行停止和播放操作。
具体实现步骤
- 首先在全局范围(或者
setup()里)声明一个变量,用来记录当前活跃的音频:
String currentActiveAudio = ""; // 初始为空,表示没有音频在播放
- 修改你的条件判断逻辑,加入状态检查:只有当需要播放的音频和当前活跃的音频不一致时,才执行停止其他音频+播放目标音频的操作,同时更新状态变量:
if (waist != null) { if (waist.angle < 195) { text("waist too high", waist.getCenter().x, waist.getCenter().y); // 只有当前不是播放high时才切换 if (!currentActiveAudio.equals("high")) { low.stop(); correct.stop(); high.play(); // 如果需要循环播放可以换成high.loop() currentActiveAudio = "high"; } } else if (waist.angle > 205) { text("waist too low", waist.getCenter().x, waist.getCenter().y); if (!currentActiveAudio.equals("low")) { high.stop(); correct.stop(); low.play(); // 循环播放用low.loop() currentActiveAudio = "low"; } } else { text("you're doing well", waist.getCenter().x, waist.getCenter().y); if (!currentActiveAudio.equals("correct")) { high.stop(); low.stop(); correct.play(); // 循环播放用correct.loop() currentActiveAudio = "correct"; } } }
额外提示
如果你的音频是短提示音,希望在状态持续期间一直播放(比如用户姿势不对时持续提示),可以把play()换成loop(),这样音频会循环播放,直到状态切换时被stop()终止,体验会更连贯。
这样修改后,程序只会在姿势状态改变时才切换音频,不会每帧重复触发播放请求,也就不会出现资源耗尽导致的崩溃啦~
内容的提问来源于stack exchange,提问作者Doctor Pepper
相关产品推荐
相关产品推荐

