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

为什么我的microbit调用startMelody函数仅能播放2至3个节拍?

micro:bit 自定义旋律无法完整播放修复方案

问题根因

你遇到的播放中断问题核心是两个原因:一是部分音符格式不符合MakeCode音乐API的解析规则,只要有一个音符解析失败,后续所有旋律都会被截断;二是startMelody是异步播放接口,没有加等待逻辑的话,程序运行到末尾就会终止播放进程。

修复后的可运行代码

let amongUs = ['c3:0.5', 'd#3:0.5', 'f3:0.5', 'f#3:0.5', 'f3:0.5',
 'd#3:0.5', 'c3:1.5', 'a#3:0.25', 'd3:0.25', 'c3:1', 'r:1',
  'c2:0.5', 'g2:0.5']

music.startMelody(amongUs, false)
// 等待整首旋律播放完成,避免程序提前终止
music.melodyPlayedUntil(amongUs.length)

同类场景通用修复规则

  • 严格遵守音符格式要求:
    • 统一使用升号#表示半音,不要使用eb、bb这类降号写法,降号可以转换为对应前一个音的升号(比如eb3对应d#3、bb3对应a#3),避免API识别失败
    • 时长必须补全前导0,0.5不能简写为.5,休止符统一按r:[时长]格式书写
  • 必须添加播放等待逻辑:
    异步调用startMelody后,添加music.melodyPlayedUntil(旋律数组.length)代码,等待旋律全部播放完成后再执行后续逻辑,避免播放被强制中断
  • 显式指定BPM:
    播放前调用music.setTempo(你需要的BPM数值),避免默认BPM和预期不符,导致你误判播放进度
  • 快速定位错误音符:
    如果修改后还是播放不全,可以把旋律数组拆分为2-3个音符的小段逐一测试,快速定位到格式错误的音符位置

内容的提问来源于stack exchange,提问作者Ametrine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:15:03