Javascript HTML5 Web音频API在使用AudioBuffer播放PCM数据时有奇怪的噪音

Javascript HTML5 Web音频API在使用AudioBuffer播放PCM数据时有奇怪的噪音,javascript,html,audio,web-audio-api,Javascript,Html,Audio,Web Audio Api,我试图使用HTML5Web音频一个缓冲区一个缓冲区地播放音符,但我发现当音符开始和结束时,会有奇怪的、响亮的、不想要的噪音。有人知道如何摆脱它吗?谢谢 我这里有一个工作示例,我重复了这个注释,所以你可以在这里清楚地看到噪音: 代码如下所示。我正在生成正弦波: var audioContext = new AudioContext(); var audioBuffer;// = new AudioBuffer(); var audioBufferArray;//: number[]; va

我试图使用HTML5Web音频一个缓冲区一个缓冲区地播放音符,但我发现当音符开始和结束时,会有奇怪的、响亮的、不想要的噪音。有人知道如何摆脱它吗?谢谢

我这里有一个工作示例,我重复了这个注释,所以你可以在这里清楚地看到噪音:

代码如下所示。我正在生成正弦波:

   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();
}
var audioContext=new audioContext();
var音频缓冲区;//=新的音频缓冲区();
var audioBufferArray;/:编号[];
var audioBufferArrayIndex;/:数量;
var frameCount=8192;
audioBuffer=audioContext.createBuffer(1,帧数,44100);
函数播放(){
//audioContext=新的audioContext();
audioBufferArray=this.audioBuffer.getChannelData(0);
audioBufferArrayIndex=0;
对于(变量i=0;i
您需要平滑波浪的开始/结束,以防止咔哒声

添加以下内容:

for(变量i=0;i<100;i++){
audioBufferArray[i]=audioBufferArray[i]*i/100;//淡入
audioBufferArray[frameCount-i-1]=audioBufferArray[frameCount-i-1]*i/100;//淡出
}

您需要平滑波浪的开始/结束,以防止咔哒声

添加以下内容:

for(变量i=0;i<100;i++){
audioBufferArray[i]=audioBufferArray[i]*i/100;//淡入
audioBufferArray[frameCount-i-1]=audioBufferArray[frameCount-i-1]*i/100;//淡出
}

  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
    }