如何使用网络音频制作用于创建振荡器节点的函数 Api
How to make a function for create oscillatorNodes using Web Audio Api
我知道这听起来很简单或显而易见,但我做不到。
查看此片段:
ctx = new AudioContext();
gain = ctx.createGain();
gain.connect(ctx.destination);
gain.gain.value = 0.5;
osc1 = ctx.createOscillator();
osc1.connect(gain);
osc1.frequency.value = 450;
osc1.start();
osc1.stop(2);
osc2 = ctx.createOscillator();
osc2.connect(gain);
osc2.frequency.value = 500;
osc2.start();
osc2.stop(2);
console.log("playing");
它同时播放两个振荡器没有问题,但它重复代码。如果我尝试将冗余代码放入函数中,它不起作用。
ctx = new AudioContext();
gain = ctx.createGain();
createAndPlayOsc(450);
createAndPlayOsc(500);
function createAndPlayOsc(freq){
console.log("creating osc with freq " + freq);
var osc = ctx.createOscillator();
osc.connect(gain);
osc.frequency.value = freq;
osc.start();
osc.stop(2);
console.log("playing osc with freq " + freq);
}
即使我发送 AudioContext
ctx = new AudioContext();
gain = ctx.createGain();
createAndPlayOsc(450, ctx);
createAndPlayOsc(500, ctx);
function createAndPlayOsc(freq, context){
console.log("creating osc with freq " + freq);
var osc = context.createOscillator();
osc.connect(gain);
osc.frequency.value = freq;
osc.start();
osc.stop(2);
console.log("playing osc with freq " + freq);
}
或者 gainNode 和 context
ctx = new AudioContext();
gain = ctx.createGain();
createAndPlayOsc(450, ctx, gain);
createAndPlayOsc(500, ctx, gain);
function createAndPlayOsc(freq, context, gainNode){
console.log("creating osc with freq " + freq);
var osc = context.createOscillator();
osc.connect(gainNode);
osc.frequency.value = freq;
osc.start();
osc.stop(2);
console.log("playing osc with freq " + freq);
}
我错过了什么?
您忘记将增益与上下文联系起来:
gain.connect(ctx.destination);
我知道这听起来很简单或显而易见,但我做不到。
查看此片段:
ctx = new AudioContext();
gain = ctx.createGain();
gain.connect(ctx.destination);
gain.gain.value = 0.5;
osc1 = ctx.createOscillator();
osc1.connect(gain);
osc1.frequency.value = 450;
osc1.start();
osc1.stop(2);
osc2 = ctx.createOscillator();
osc2.connect(gain);
osc2.frequency.value = 500;
osc2.start();
osc2.stop(2);
console.log("playing");
它同时播放两个振荡器没有问题,但它重复代码。如果我尝试将冗余代码放入函数中,它不起作用。
ctx = new AudioContext();
gain = ctx.createGain();
createAndPlayOsc(450);
createAndPlayOsc(500);
function createAndPlayOsc(freq){
console.log("creating osc with freq " + freq);
var osc = ctx.createOscillator();
osc.connect(gain);
osc.frequency.value = freq;
osc.start();
osc.stop(2);
console.log("playing osc with freq " + freq);
}
即使我发送 AudioContext
ctx = new AudioContext();
gain = ctx.createGain();
createAndPlayOsc(450, ctx);
createAndPlayOsc(500, ctx);
function createAndPlayOsc(freq, context){
console.log("creating osc with freq " + freq);
var osc = context.createOscillator();
osc.connect(gain);
osc.frequency.value = freq;
osc.start();
osc.stop(2);
console.log("playing osc with freq " + freq);
}
或者 gainNode 和 context
ctx = new AudioContext();
gain = ctx.createGain();
createAndPlayOsc(450, ctx, gain);
createAndPlayOsc(500, ctx, gain);
function createAndPlayOsc(freq, context, gainNode){
console.log("creating osc with freq " + freq);
var osc = context.createOscillator();
osc.connect(gainNode);
osc.frequency.value = freq;
osc.start();
osc.stop(2);
console.log("playing osc with freq " + freq);
}
我错过了什么?
您忘记将增益与上下文联系起来:
gain.connect(ctx.destination);