Javascript scriptProcessorNode振荡器频率

Javascript scriptProcessorNode振荡器频率,javascript,web-audio-api,synthesizer,scriptprocessor,Javascript,Web Audio Api,Synthesizer,Scriptprocessor,我正在开发一个web音频随机振荡器,并且在scriptProcessorNode方面遇到了问题。我的算法使用随机游走来确定波形中的动态断点,然后在它们之间进行插值 当断点在x轴上移动时,我认为振荡波形的频率会发生变化,但这只是一种滤波效果,而频率似乎只是由scriptProcessorNode缓冲区大小决定的,它必须是256和16384之间的2的幂 如何更改scriptProcessorNode振荡器的频率 这是我的合成代码: scriptNode.onaudioprocess=函数(audio

我正在开发一个web音频随机振荡器,并且在scriptProcessorNode方面遇到了问题。我的算法使用随机游走来确定波形中的动态断点,然后在它们之间进行插值

当断点在x轴上移动时,我认为振荡波形的频率会发生变化,但这只是一种滤波效果,而频率似乎只是由scriptProcessorNode缓冲区大小决定的,它必须是256和16384之间的2的幂

如何更改scriptProcessorNode振荡器的频率

这是我的合成代码:

scriptNode.onaudioprocess=函数(audioProcessingEvent){
walk();//使用随机游走为每个断点生成新的x/y位置
var outputBuffer=audioProcessingEvent.outputBuffer;
var lastPoint=0;
var指数=0;
//在新断点位置之间进行线性插值
对于(变量i=0;i=断点[i].y){
y=(断点[i].m*index)+断点[i].b;//y=m(x)+b
outputData[索引]=y;
索引++;
}

}否则,如果(y我通过在
scriptNode.onaudioprocess
函数之外使用
索引
变量将波形写入scriptNode缓冲区来解决问题。这样,波形写入缓冲区的频率与缓冲区的大小无关

以下是最终代码:

var index = 0;
var freq = 0.8;

scriptNode.onaudioprocess = function(audioProcessingEvent){

    var outputBuffer = audioProcessingEvent.outputBuffer;
    var outputData = outputBuffer.getChannelData(0);
    for(var j = 0; j < outputData.length;j++){
        // linearly interpolate between the new breakpoint positions
        // get the interp point by comparing index to the x distance
        var lerp = (index - breakpoint[point].x) / (breakpoint[point+1].x - breakpoint[point].x)

        y = nx.interp(lerp,breakpoint[point].y,breakpoint[point+1].y);
        if(point < breakpoint.length && index >= breakpoint[point+1].x) {
            point++;
        }

        outputData[j] = y;
        index+=freq; 
        if(index >= breakpoint[breakpoint.length-1].x){
            index = 0;
            point = 0;
            walk(); 
        }  
    }
}
var指数=0;
var-freq=0.8;
scriptNode.onaudioprocess=函数(audioProcessingEvent){
var outputBuffer=audioProcessingEvent.outputBuffer;
var outputData=outputBuffer.getChannelData(0);
对于(var j=0;j=断点[point+1].x){
point++;
}
输出数据[j]=y;
指数+=频率;
如果(索引>=断点[breakpoint.length-1].x){
指数=0;
点=0;
步行();
}  
}
}

从代码
m
看,似乎应该正确地改变频率?@notthetup
m
是方程
y=m(x)中的斜率+b
,用于在每个点之间进行线性插值。我正在尝试将
scriptNode.bufferSize
与波形写入缓冲区的频率分开。我一直在研究这个示例,制作一个scriptProcessorNode振荡器,其基音与缓冲区无关,但我还没有破解它。.任何指导都将不胜感激!