Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Web音频API演示不支持';我不能在iOS上工作_Javascript_Ios_Iphone_Web Audio Api - Fatal编程技术网

Javascript Web音频API演示不支持';我不能在iOS上工作

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上工作(苹果的文档在这里,

我目前正在为一个我正在做的项目修改这个,但在iPhone上测试时没有声音。它在iPad上运行良好

我已经搜索了解决方案,并在StackOverflow上找到了以下答案:

iOS 6上的Safari从禁用Web音频API开始。信息技术 将不会取消静音,直到您尝试在用户输入中播放声音 事件(创建缓冲区源,将其连接到目标,然后调用 noteOn())。在此之后,它将取消静音,音频播放将不受限制,并视情况而定 应该这样。这是Web音频API如何运行的一个未记录方面 在iOS 6上工作(苹果的文档在这里,希望他们能用 很快就会提到这件事!)

用户输入事件应该是播放按钮上的onclick事件,但更改为使用
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>