我尝试使用HTML5 Web Audio逐个缓冲播放音符,但我发现音符开始和结束时有奇怪,响亮,不希望的噪音。有人知道怎么处理吗?谢谢!
我这里有一个工作示例,我已经重复了这个注意事项,以便您可以清楚地看到噪声:
https://jsfiddle.net/charrli/ca48tj23/5/代码如下所示。我正在生成正弦波:
var audioContext = new AudioContext();
var audioBuffer;// = new AudioBuffer();
var audioBufferArray;//: number[];
var audioBufferArrayIndex;//: number;
var frameCount = 8192;
audioBuffer = audioContext.createBuffer(1, frameCount, 44100);
function play(){
//audioContext = new AudioContext();
audioBufferArray = this.audioBuffer.getChannelData(0);
audioBufferArrayIndex = 0;
for (var i = 0; i < frameCount; i++) {
audioBufferArray[i] = Math.sin((i%168)/168.0*Math.PI*2);
}
var source = this.audioContext.createBufferSource();
// set the buffer in the AudioBufferSourceNode
source.buffer = this.audioBuffer;
// connect the AudioBufferSourceNode to the
// destination so we can hear the sound
source.connect(this.audioContext.destination);
// start the source playing
source.start();
}
你需要平滑波的开始/结束以防止点击
添加:
for (var i = 0; i < 100; i++) { audioBufferArray[i] = audioBufferArray[i]*i/100;//fade in audioBufferArray[frameCount-i-1] = audioBufferArray[frameCount-i-1]*i/100;//fade out }
看到https://jsfiddle.net/sss1024/ca48tj23/7/