Javascript AudioContext:振荡器-知道何时播放所有声音

Javascript AudioContext:振荡器-知道何时播放所有声音,javascript,audiocontext,Javascript,Audiocontext,我正在使用javascript api(miniMusic)。我能够创建一个音乐,然后导出javascript代码。我也能运行它 我希望能够知道我的音乐何时结束,这样我就可以再次播放并控制它 with(new AudioContext) for(i in D=[12,,,13,,,18,,,,,,12,,,13,,,18,,,,,,12,,,13,,,18,,,15,,,12,,,8,,,12,,,13]) { with(createOscillator()) if(D[i]) {

我正在使用javascript api(miniMusic)。我能够创建一个音乐,然后导出javascript代码。我也能运行它

我希望能够知道我的音乐何时结束,这样我就可以再次播放并控制它

with(new AudioContext)
for(i in D=[12,,,13,,,18,,,,,,12,,,13,,,18,,,,,,12,,,13,,,18,,,15,,,12,,,8,,,12,,,13]) {
   with(createOscillator())
   if(D[i]) {
      connect(destination) 
      frequency.value=800*1.06**(13-D[i]),
      type='square',
      start(i*.1),
      stop(i*.1+.1)
   }
}
// -> onEnd = function (...) {}
循环会立即运行,因此我无法使用索引来定位音乐播放的音符。 有人能帮我吗?

振荡器有一个函数,当音调结束时调用该函数,但是您链接的api为每个音符创建了一个新的振荡器,您可以计算播放的音符数,然后在音符数等于乐曲中的音符数时循环

范例

with(新的音频上下文)
对于(D中的i=[12,13,18,12,13,18,12,13,18,12,13,18,15,12,8,12,13]){
使用(create振荡器())
if(D[i]){
onended=函数(){
log(“音符已停止播放”);
}
连接(目的地)
频率值=800*1.06**(13-D[i]),
类型='square',
启动(i*.1),
停止(i*.1+1)
}
}