AudioContext:Oscillator - 知道播放所有声音的时间

时间:2017-09-01 14:55:40

标签: javascript audiocontext

我正在使用this 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 (...) {}

循环立即运行,因此我无法使用索引来查找音乐正在播放的音符。 有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

振荡器有一个onend功能,在音调结束时调用,但你链接的api为每个音符创建一个新的振荡器,你可以计算播放的音符数,然后在音符数量为等于曲调中的音符数。

示例

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]) {
    onended = function() {
      console.log('Note has stopped playing');
    }
    connect(destination)
    frequency.value = 800 * 1.06 ** (13 - D[i]),
      type = 'square',
      start(i * .1),
      stop(i * .1 + .1)
  }
}

希望这有帮助!