gpt4 book ai didi

javascript - 在 iPhone Safari 中使用 ScriptProcessorNode

转载 作者:行者123 更新时间:2023-11-28 09:05:58 28 4
gpt4 key购买 nike

我是 html5 新手,我想使用 ScriptProcessorNode 来生成声音。我的问题是这个代码在 iPhone safari 中不起作用。但它可以在桌面上的 Safari 中运行。

var 上下文; var 正在播放; var 生成器节点; 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 从未调用过。 here人们写道 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 方法中。

最佳答案

我自己找到了答案。需要向ScriptProcessorNode添加一个源节点。像这样的东西。

bufferNode = context.createBufferSource()
var buffer = context.createBuffer(1, 1024, context.sampleRate)
var data = buffer.getChannelData(0);
for (var i = 0; i < 2048; i++)
{
data[i] = 0;
}
bufferNode.buffer = buffer;
bufferNode.loop = true;

generatorNode = context.createJavaScriptNode(2048, 1, 1);
generatorNode.channelCount = 2;
generatorNode.channelCountMode = "max";
generatorNode.channelInterpretation = "speakers";
generatorNode.onaudioprocess = function generateWhiteNoise(e)
{
var output = e.outputBuffer.getChannelData(0);
console.log("onaudioprocess!");
for (var i = 0; i < output.length; i++)
{
output[i] = ( Math.random() * 2 ) - 1;
}
}
bufferNode.connect(generatorNode);
generatorNode.connect(context.destination);
bufferNode.noteOn(0);

此代码将在 iOS safari 浏览器中运行。

UPD。更新白噪声生成代码。我不是我的目标,只是用它来测试,但如果有人使用我的错误代码来生成真正的白噪声,那就不好了。

关于javascript - 在 iPhone Safari 中使用 ScriptProcessorNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17087119/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com