You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Processing音频问题:如何实现条件触发时音频仅播放一次

解决Processing音频重复播放导致崩溃的问题

嘿,欢迎第一次在Stack Overflow提问!我来帮你搞定这个音频重复触发的问题~

你的核心问题是:因为waist.angle每帧都在更新,当前代码会每帧都调用一次play(),哪怕音频已经在播放了。这种频繁的重复播放请求会快速消耗音频资源,最终导致程序崩溃。

解决思路很简单:跟踪当前正在播放的音频状态,只在状态发生变化时才切换音频,而不是每帧都执行停止和播放操作。

具体实现步骤

  1. 首先在全局范围(或者setup()里)声明一个变量,用来记录当前活跃的音频:
String currentActiveAudio = ""; // 初始为空,表示没有音频在播放
  1. 修改你的条件判断逻辑,加入状态检查:只有当需要播放的音频和当前活跃的音频不一致时,才执行停止其他音频+播放目标音频的操作,同时更新状态变量:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:16:59