Javascript 简单的振荡器,但在IOS上没有网络音频API声音

Javascript 简单的振荡器,但在IOS上没有网络音频API声音,javascript,web-audio-api,Javascript,Web Audio Api,下面是一个超级简单的例子,我正试图在chrome的iphone上运行。其他类似于此的web音频API示例可以工作,但不是我的:( var audioContext,osc audioContext=new(window.audioContext | | window.webkitadiocontext); osc=audioContext.create振荡器() osc.connect(audioContext.destination) 如果(osc.noteOn)osc.start=osc.

下面是一个超级简单的例子,我正试图在chrome的iphone上运行。其他类似于此的web音频API示例可以工作,但不是我的:(


var audioContext,osc
audioContext=new(window.audioContext | | window.webkitadiocontext);
osc=audioContext.create振荡器()
osc.connect(audioContext.destination)
如果(osc.noteOn)osc.start=osc.noteOn
osc.启动(0)
osc.frequency.value=440
知道怎么了吗

编辑

总结一下答案:

  • 启动音频以响应用户交互
  • 检查静音开关是否关闭

  • iOS只允许您在用户操作后开始使用Web Audio API播放声音

    尝试将该代码放入某种事件处理程序中

    var elem = document.getElementById('play'),
      audioContext = new (window.AudioContext || window.webkitAudioContext),
      osc = audioContext.createOscillator();
    
    osc.connect(audioContext.destination);
    if (osc.noteOn) osc.start = osc.noteOn
    osc.frequency.value = 440;
    
    play.addEventListener('click', function() {
      osc.start(0);
    }, false);
    

    现在,它可以在chrome中工作,但不能在Safari(IOS 7)中工作。你知道吗?$10表示你的静音开关打开了。不管什么原因,当静音开关打开时,Safari不会播放声音,但chrome会。除此之外,chrome使用与Safari相同的引擎来呈现你的页面(不包括Nitro JS优化),因此,没有其他理由认为您的代码应该在其中一个版本中工作,而不是在另一个版本中。我只是通过JSBin尝试了它,当静音开关关闭时,这两个版本都对我有效。对我来说也是如此。在两个小时潜入解锁ios web音频的彩色世界后,终于实现了静音开关。
    var elem = document.getElementById('play'),
      audioContext = new (window.AudioContext || window.webkitAudioContext),
      osc = audioContext.createOscillator();
    
    osc.connect(audioContext.destination);
    if (osc.noteOn) osc.start = osc.noteOn
    osc.frequency.value = 440;
    
    play.addEventListener('click', function() {
      osc.start(0);
    }, false);