我正在尝试使用网络音频振荡器创建一个简单的节拍器,因此不需要外部音频文件.我通过非常快速地上下调节振荡器的音量来创建节拍器的声音(因为你不能多次使用start()和stop()),然后以设定的间隔重复该功能.它最终听起来像一个漂亮的小木块.
下面的代码在Chrome,Safari和Opera中运行/听起来很棒.但是在Firefox中,当音量增加时,会出现令人讨厌的间歇性"点击".我已经尝试改变攻击/释放时间以摆脱点击,但它们必须真的,很久才会一直消失.事实上,很长一段时间,振荡器听起来像一个持续的音符.
var audio = new (window.AudioContext || window.webkitAudioContext)();
var tick = audio.createOscillator();
var tickVol = audio.createGain();
tick.type = 'sine';
tick.frequency.value = 1000;
tickVol.gain.value = 0; //setting the volume to 0 before I connect everything
tick.connect(tickVol);
tickVol.connect(audio.destination);
tick.start(0);
var metronome = {
start: function repeat() {
now = audio.currentTime;
//Make sure volume is 0 and that no events are changing it
tickVol.gain.cancelScheduledValues(now);
tickVol.gain.setValueAtTime(0, now);
//Play the osc with a super fast attack and release so it sounds like a click …Run Code Online (Sandbox Code Playgroud)