我在HTML5新的,我想用一个ScriptProcessorNode来生成声音。 我的问题是,该代码并不在iPhone的Safari工作。 但它在Safari浏览器在桌面上。
VAR背景; 是IsPlaying模块; 为发电机节点; 是isNeedShowAlert;
function myButtonClick(button)
{
isNeedShowAlert = true;
if (isPlaying)
{
isPlaying = false;
console.log("Stop!");
generatorNode.disconnect();
}
else
{
alert("Play!");
isPlaying = true;
console.log("Play!");
context = new webkitAudioContext();
generatorNode = context.createJavaScriptNode(2048, 1, 2);
generatorNode.onaudioprocess = function (e)
{
console.log("onaudioprocess!");
$("body").append("buffering<br/>");
var output = e.outputBuffer.getChannelData(0);
if (isNeedShowAlert)
{
isNeedShowAlert = false;
console.log("Length "+ output.length);
alert("Length "+ output.length);
}
for (var i = 0; i < output.length; i++)
{
output[i] = Math.random();
}
}
generatorNode.connect(context.destination);
alert("Node Connected");
}
}
貌似onaudioprocess从来没有所谓。 这里的人写ScriptProcessorNode可垃圾收集器被破坏,但对我来说它是全局变量。 我尝试了很多,并开始思考,即trere是没有办法在iPhone的Safari使用ScriptProcessorNode。 有人能做到ID?
UPD。 但是,如果使用AudioBufferSourceNode,它的工作原理。
bufferNode = context.createBufferSource()
var buffer = context.createBuffer(1, 1024, context.sampleRate)
var data = buffer.getChannelData(0);
for (var i = 0; i < 1024; i++)
{
data[i] = Math.random();
}
bufferNode.buffer = buffer;
bufferNode.loop = true;
bufferNode.connect(context.destination);
bufferNode.noteOn(0);
看起来问题是特别是在ScriptProcessorNode及其onaudioprocess方法。