私はhtml5が初めてで、ScriptProcessorNodeを使用してサウンドを生成したいと考えています。私の問題は、このコードが iPhone サファリで機能しないことです。ただし、デスクトップのサファリでは機能します。
var コンテキスト; var isPlaying; var generatorNode; var 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 はガベージ コレクターとして破棄される可能性があると書いていますが、私の場合はグローバル変数です。私はいろいろ試してみて、iPhone Safari で ScriptProcessorNode を使用する方法はないと考え始めました。だれかidできますか?
アップデート。しかし、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 メソッドに問題があるようです。