Web Audio-停止振荡器声音
Web Audio-Stopping Oscillator Sound
正在尝试创建脉冲音调。从此处的另一篇文章 () 中找到了一些帮助。需要改编剧本。得出了一个令人满意的结果,即播放并发出一个音调。无法找出停止音调的函数:与振荡器一起使用的 .stop() 不起作用。
感谢任何帮助。
这是我的代码:
<html>
<body>
<button id = "start1" onclick='tone();'>Play</button>
<button id = "stop1" onclick='stopper();'>Stop</button>
<script>
function tone(){
var context = new AudioContext();
var abc = context.createOscillator();
abc.frequency.value = 325;
var xyz = context.createOscillator();
xyz.type='sine';
xyz.frequency.value = 10;
var gain = context.createGain();
var ramp = context.createGain();
abc.connect(gain);
gain.connect(context.destination);
xyz.connect(ramp);
ramp.gain.value = 0.3;
gain.gain.value = 0.3;
ramp.connect(gain.gain);
abc.start(0);
xyz.start(0);
}
function stopper()
{
abc.stop();
xyz.stop();
}
</script>
</body>
</html>
移动评论回答:
AudioAPI 不是问题,这是一个简单的变量范围问题。
函数中创建的变量在该函数外不可访问,并且 stopper()
函数无法访问 abc/xyz 变量。
<html>
<body>
<button id = "start1" onclick='tone();'>Play</button>
<button id = "stop1" onclick='stopper();'>Stop</button>
<script>
let context = null;
let abc, xyz;
function tone(){
context = new AudioContext();
abc = context.createOscillator();
abc.frequency.value = 325;
xyz = context.createOscillator();
xyz.type='sine';
xyz.frequency.value = 10;
var gain = context.createGain();
var ramp = context.createGain();
abc.connect(gain);
gain.connect(context.destination);
xyz.connect(ramp);
ramp.gain.value = 0.3;
gain.gain.value = 0.3;
ramp.connect(gain.gain);
abc.start(0);
xyz.start(0);
}
function stopper()
{
abc?.stop();
xyz?.stop();
}
</script>
</body>
</html>
正在尝试创建脉冲音调。从此处的另一篇文章 (
感谢任何帮助。
这是我的代码:
<html>
<body>
<button id = "start1" onclick='tone();'>Play</button>
<button id = "stop1" onclick='stopper();'>Stop</button>
<script>
function tone(){
var context = new AudioContext();
var abc = context.createOscillator();
abc.frequency.value = 325;
var xyz = context.createOscillator();
xyz.type='sine';
xyz.frequency.value = 10;
var gain = context.createGain();
var ramp = context.createGain();
abc.connect(gain);
gain.connect(context.destination);
xyz.connect(ramp);
ramp.gain.value = 0.3;
gain.gain.value = 0.3;
ramp.connect(gain.gain);
abc.start(0);
xyz.start(0);
}
function stopper()
{
abc.stop();
xyz.stop();
}
</script>
</body>
</html>
移动评论回答:
AudioAPI 不是问题,这是一个简单的变量范围问题。
函数中创建的变量在该函数外不可访问,并且 stopper()
函数无法访问 abc/xyz 变量。
<html>
<body>
<button id = "start1" onclick='tone();'>Play</button>
<button id = "stop1" onclick='stopper();'>Stop</button>
<script>
let context = null;
let abc, xyz;
function tone(){
context = new AudioContext();
abc = context.createOscillator();
abc.frequency.value = 325;
xyz = context.createOscillator();
xyz.type='sine';
xyz.frequency.value = 10;
var gain = context.createGain();
var ramp = context.createGain();
abc.connect(gain);
gain.connect(context.destination);
xyz.connect(ramp);
ramp.gain.value = 0.3;
gain.gain.value = 0.3;
ramp.connect(gain.gain);
abc.start(0);
xyz.start(0);
}
function stopper()
{
abc?.stop();
xyz?.stop();
}
</script>
</body>
</html>