回答
固定延时(如 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("音乐播放中");
}
最佳实践建议:
- 动态获取时长:始终优先使用
media.getMusicDuration()代替硬编码的时间,这样无论歌曲长短都能准确执行后续步骤。 - 加载延迟:调用
playMusic后,建议先sleep(1000)左右再获取时长,防止因元数据未加载导致返回 0。 - 兼容性注意:脚本引擎基于 Rhino 1.7.15,请避免使用箭头函数(
=>)和函数默认参数,确保代码稳定运行。 - 异常处理:增加对
duration的判断,防止因获取失败导致脚本逻辑错误。
如果上述方法仍无法满足特定场景需求,可以结合 media.isMusicPlaying() 进行循环检测,直到音乐停止后再继续执行后续任务。
ℹ️ 内容由 AI 生成,可能不准确,请注意核实