Web Audio API演示不适用于iOS
我目前正致力于将这个web audio API demo适用于我正在开发的项目,但在iPhone上测试时没有声音。它可以在iPad上正常工作。Web Audio API演示不适用于iOS
我搜索过的解决方案,并发现这个thread *上与其中一个答案的下面的代码片段:
的Safari在iOS 6上有效地与网络音频API静音启动。在您尝试播放用户输入 事件(创建缓冲区来源,将其连接到目标,并呼叫 noteOn())之前,它将不会取消静音。在此之后,它取消静音并且音频播放不受限制,并且它应该是 。这是如何通过Web Audio API在iOS 6 工作的无证方面(苹果的doc是在这里,希望他们有 提到的这一声更新!)
用户输入事件应该是onclick事件在播放按钮,但改为使用noteOn()
而不是start()
仍然不能解决它。
更新:我也尝试绑定播放按钮与touchend
事件,但无济于事。
下面是一个使用noteOn()函数:
function playNote(buffer, pan, x, y, z, sendGain, mainGain, playbackRate, noteTime) {
// Create the note
var voice = context.createBufferSource();
voice.buffer = buffer;
voice.playbackRate.value = playbackRate;
// Optionally, connect to a panner
var finalNode;
if (pan) {
var panner = context.createPanner();
panner.panningModel = "HRTF";
panner.setPosition(x, y, z);
voice.connect(panner);
finalNode = panner;
} else {
finalNode = voice;
}
// Connect to dry mix
var dryGainNode = context.createGain();
dryGainNode.gain.value = mainGain * effectDryMix;
finalNode.connect(dryGainNode);
dryGainNode.connect(masterGainNode);
// Connect to wet mix
var wetGainNode = context.createGain();
wetGainNode.gain.value = sendGain;
finalNode.connect(wetGainNode);
wetGainNode.connect(convolver);
if (iOS) {
voice.noteOn(noteTime);
}
else {
voice.start(noteTime);
}
}
任何建议,将不胜感激。谢谢。
我感觉真的很蠢。显然,如果你的iPhone处于振动模式,声音不会播放。
只要您使用用户交互事件调用函数,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>
谢谢。我将删除该逻辑并修复y和z。下面是使用playNote()函数绑定播放按钮的方法:document.getElementById('play')。addEventListener('touchend',handlePlay,true); –
如果有用,我添加一个工作示例 – user7951676
我自己的经验是,有时Web Audio API适用于iPhone,有时不适用。这是一个5分钟前在我的iPhone 6上工作的页面; 1分钟前它没有工作;现在它又来了!
http://www.stephenandrewtaylor.net/dna-sonification/
下面是另外一个,间歇工作;它工作2分钟前,现在它不(动画工作,只有没有音频)。
http://www.stephenandrewtaylor.net/lie-sonification/
它可能有多少个标签在Safari中打开做;您可以尝试关闭一些打开的选项卡(现在我有5个选项卡,包括2分钟前工作的lie-sonificaton页面,但现在不能)。我也是一个新手程序员,我确信有更好的方法可以编写代码。
请显示您的代码 – user7951676
我已经添加了调用noteOn()的函数,但代码库相当大。该项目位于https:// github上的Github上。com/cwilso/MIDIDrums –
最初的演示在这里,它也不能在iPhone上工作。 http://webaudiodemos.appspot.com/MIDIDrums/index.html –