【问题标题】:Simple oscillator, but no sound with web audio API on IOS简单的振荡器,但在 IOS 上使用网络音频 API 没有声音
【发布时间】:2015-07-21 14:51:01
【问题描述】:

这是一个超级简单的例子,我试图在 chrome 的 iphone 上运行。像 http://alxgbsn.co.uk/wavepad/ 这样的其他网络音频 API 示例可以工作,但不是我的 :(

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>

<body>

  <script>
    var audioContext, osc
    audioContext = new (window.AudioContext || window.webkitAudioContext);
    osc = audioContext.createOscillator()

    osc.connect(audioContext.destination)
    if (osc.noteOn) osc.start = osc.noteOn
    osc.start(0)
    osc.frequency.value = 440
  </script>

</body>

</html>

知道有什么问题吗?

编辑

总结一下答案:

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

【问题讨论】:

    标签: javascript web-audio-api


    【解决方案1】:

    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 网络音频的彩色完整世界 - 最后是静音开关。
    • @KevinEnnis 你是我的英雄!
    猜你喜欢
    • 2013-09-11
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多