私は Web オーディオの確率的オシレータに取り組んでおり、scriptProcessorNode に問題があります。私のアルゴリズムは、ランダム ウォークを使用して波形の動的ブレークポイントを決定し、それらの間を補間します。
ブレークポイントが x 軸上を移動すると、振動波形の周波数が変化すると思いましたが、フィルタリング効果があり、周波数は scriptProcessorNode バッファ サイズによって決定されるようです。これは 256 の間の 2 の累乗でなければなりませんと 16384。
scriptProcessorNode オシレータの周波数を変更するにはどうすればよいですか?
ここに私の合成コードがあります:
scriptNode.onaudioprocess = function(audioProcessingEvent) {
walk(); //use random walk to generate new x/y position for each breakpoint
var outputBuffer = audioProcessingEvent.outputBuffer;
var lastPoint = 0;
var index = 0;
// linearly interpolate between the new breakpoint positions
for(var i = 0; i < breakpoint.length-1; i++) {
var y = breakpoint[lastPoint].y;
for(var channel = 0; channel <= 0;channel++) {
var outputData = outputBuffer.getChannelData(channel);
if(i != 0){
if(y >= breakpoint[i].y) {
while(y >= breakpoint[i].y) {
y = (breakpoint[i].m*index)+breakpoint[i].b;// y = m(x)+b
outputData[index] = y;
index++;
}
} else if(y <= breakpoint[i].y) {
while(y <= breakpoint[i].y) {
y = (breakpoint[i].m*index)+breakpoint[i].b;
outputData[index] = y;
index++;
}
}
}
}
lastPoint = i;
}
}
そして、ここに実際の例へのリンクがあります: http://andrewbernste.in/bernie/gendy011.html
これはすべて、Iannis Xenakis の GENDY 確率的合成プログラムに基づいています。
ありがとう!