Javascript Web音频API演示不支持';我不能在iOS上工作
我目前正在为一个我正在做的项目修改这个,但在iPhone上测试时没有声音。它在iPad上运行良好 我已经搜索了解决方案,并在StackOverflow上找到了以下答案: iOS 6上的Safari从禁用Web音频API开始。信息技术 将不会取消静音,直到您尝试在用户输入中播放声音 事件(创建缓冲区源,将其连接到目标,然后调用 noteOn())。在此之后,它将取消静音,音频播放将不受限制,并视情况而定 应该这样。这是Web音频API如何运行的一个未记录方面 在iOS 6上工作(苹果的文档在这里,希望他们能用 很快就会提到这件事!) 用户输入事件应该是播放按钮上的onclick事件,但更改为使用Javascript Web音频API演示不支持';我不能在iOS上工作,javascript,ios,iphone,web-audio-api,Javascript,Ios,Iphone,Web Audio Api,我目前正在为一个我正在做的项目修改这个,但在iPhone上测试时没有声音。它在iPad上运行良好 我已经搜索了解决方案,并在StackOverflow上找到了以下答案: iOS 6上的Safari从禁用Web音频API开始。信息技术 将不会取消静音,直到您尝试在用户输入中播放声音 事件(创建缓冲区源,将其连接到目标,然后调用 noteOn())。在此之后,它将取消静音,音频播放将不受限制,并视情况而定 应该这样。这是Web音频API如何运行的一个未记录方面 在iOS 6上工作(苹果的文档在这里,
noteOn()
而不是start()
仍然无法修复它
更新:我还尝试将播放按钮与touchend
事件绑定,但没有效果
下面是使用noteOn()的函数:
如有任何建议,将不胜感激。谢谢。只要使用用户交互事件调用函数,start()方法在没有iOS上的if-else语句的情况下应该可以正常工作。同样,由于某些奇怪的原因,z是第二个,所以翻转将y和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>
var audioCtx=new(window.AudioContext | | window.webkitadiocontext)();
var振荡器=audioCtx.create振荡器();
var gainNode=audioCtx.createGain();
振荡器。连接(增益节点);
gainNode.connect(audioCtx.destination);
振荡器类型='sine';
振荡器.frequency.value=440;
gainNode.gain.value=1;
玩
我自己的经验是,有时网络音频API在iPhone上工作,有时不工作。这是一个5分钟前在我的iphone6s上运行的页面;1分钟前它不起作用;现在又来了
这是另一个间歇工作的;它在2分钟前工作,但现在没有(动画工作,只是没有音频)
这可能与Safari中打开了多少选项卡有关;你可以尝试关闭一些打开的标签页(现在我有5个标签页,包括2分钟前的lie Sonification页面,但现在没有)。我也是一个新手程序员,我相信我有更好的方法来编写代码 我觉得自己很愚蠢。显然,如果您的iPhone处于振动模式,声音将无法播放。请显示您的代码我添加了调用noteOn()的函数,但代码库相当大。该项目在Github上,最初的演示在这里,在iPhone上也不起作用。谢谢我将删除该逻辑并修复y和z。下面是使用playNote()函数绑定播放按钮的方法:document.getElementById('play')。addEventListener('touchend',handlePlay,true);这个答案为我节省了数小时毫无结果的调试。谢谢
<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>