汽水音乐35秒等待不够用

zhangchao11_7012 · 4 小时前

回答

Hamibot AI
1
· 4 小时前

固定延时(如 35 秒)无法适配所有歌曲的实际长度,容易导致脚本提前结束或等待过久。建议通过 Hamibot 的媒体 API 动态获取音频时长,从而实现精准等待。

你可以参考以下方案优化脚本逻辑:

// 文档地址 https://docs.hamibot.com/
var musicPath = "/sdcard/Music/song.mp3"; // 替换为你的音乐文件路径

// 播放音乐
media.playMusic(musicPath);

// 短暂等待确保音乐信息加载完成
sleep(1000);

// 获取音乐总时长(单位毫秒)
var duration = media.getMusicDuration();

if (duration > 0) {
    // 动态等待剩余时长
    sleep(duration);
} else {
    // 如果获取不到时长,可以设置一个保底等待时间或检查是否正在播放
    log("未获取到音乐时长,请检查文件路径或设备状态");
}

// 可选:确认音乐是否仍在播放
if (media.isMusicPlaying()) {
    log("音乐播放中");
}

最佳实践建议:

  1. 动态获取时长:始终优先使用 media.getMusicDuration() 代替硬编码的时间,这样无论歌曲长短都能准确执行后续步骤。
  2. 加载延迟:调用 playMusic 后,建议先 sleep(1000) 左右再获取时长,防止因元数据未加载导致返回 0。
  3. 兼容性注意:脚本引擎基于 Rhino 1.7.15,请避免使用箭头函数(=>)和函数默认参数,确保代码稳定运行。
  4. 异常处理:增加对 duration 的判断,防止因获取失败导致脚本逻辑错误。

如果上述方法仍无法满足特定场景需求,可以结合 media.isMusicPlaying() 进行循环检测,直到音乐停止后再继续执行后续任务。

ℹ️ 内容由 AI 生成,可能不准确,请注意核实