Web Audio API演示不适用于iOS

时间:2017-09-02 04:34:32

标签: javascript ios iphone web-audio-api

我目前正致力于将这个web audio API demo用于我正在进行的项目,但是当我在iPhone上测试时没有声音。它在iPad上工作正常。

我已经搜索了解决方案,并在StackOverflow上找到了这个thread,其中包含以下其中一个答案的片段:

  

iOS 6上的Safari实际上是从Web Audio API静音开始的。它   在您尝试在用户输入中播放声音之前,不会取消静音   event(创建缓冲区源,将其连接到目标,然后调用   noteOn())。在此之后,它取消静音,音频播放不受限制   它应该。这是Web Audio API的无证方面   适用于iOS 6(Apple的文档就在这里,希望他们能用它来更新它   很快就会提到这一点!)

用户输入事件应该是播放按钮上的onclick事件,但更改为使用$('.button-show').click(function() { jQuery('.menu').slideToggle(); jQuery(this).toogleClass(); }); 代替noteOn()仍然无法解决问题。

更新:我还尝试将播放按钮与start()事件绑定,但无济于事。

这是使用noteOn()的函数:

touchend

任何建议都将不胜感激。感谢。

3 个答案:

答案 0 :(得分:3)

我觉得自己真的很蠢。显然,如果你的iPhone处于振动模式,声音就不会播放。

答案 1 :(得分:0)

只要您使用用户交互事件调用该函数,start()方法就可以在iOS上没有if else语句的情况下正常工作。同时将你传递y和z的顺序翻转到panner因为某些奇怪的原因z是秒。 这是一个工作示例,更改其中的内容以满足您的需求,大多数情况下不需要,我在其他地方使用dom添加事件侦听器

<script>
    var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
    var oscillator = audioCtx.createOscillator();
    var gainNode = audioCtx.createGain();
    oscillator.connect(gainNode); 
    gainNode.connect(audioCtx.destination);
    oscillator.type = 'sine'; 
    oscillator.frequency.value = 440;

    gainNode.gain.value = 1;
</script>
<button onclick="oscillator.start();">play</button>

答案 2 :(得分:0)

我自己的经验是,有时Web Audio API适用于iPhone,有时却不适用。这是一个5分钟前在我的iPhone 6s上运行的页面; 1分钟前它没用;现在又来了!

http://www.stephenandrewtaylor.net/dna-sonification/

这是另一个间歇工作的;它工作2分钟前,现在它没有(动画工作,没有音频)。

http://www.stephenandrewtaylor.net/lie-sonification/

这可能与Safari中打开了多少个标签有关;你可以尝试关闭一些打开的标签(现在我有5个标签,包括2分钟前工作但现在没有的谎言声明)。我也是一名新手程序员,我确信有更好的方法可以编写代码。