SoundManager2 - 扭曲当停止声音(SoundManager2 - Distortio

2019-10-17 03:34发布

我通过SoundManager2一堆声音文件试图循环并及时发挥他们在不同的点。 下面的代码需要songArray看起来像这样,用“注意”,包括声音文件以及多长时间播放声音文件的持续时间:

var songArray = [[null],[["clarinet_e4.mp3",1],["clarinet_a4.mp3",1]],[null],[null],[null],[null],[["clarinet_c4.mp3",1]],[["clarinet_c5.mp3",1]],[null],[["clarinet_ab4.mp3",1]],[["clarinet_f3.mp3",1]],[null],[["clarinet_g4.mp3",1]],[["clarinet_d5.mp3",1]],[null],[null]]

它通过阵列中的每个X和起着发现对于给定的X.然后,它由持续时间给定的时间之后停止声音的声音。 该代码运行完全不同的是,当声音停止时,它只是在歌曲的结尾给出了爆裂声。

function playSong(X) {
    playSongNotesAtXValue(X);
    window.setTimeout(function() {
        X++;
        if (X >= theSong.songArray.length) {
            X = 0;
        }
        playSong(X);
    }, (30/theSong.tempo)*1000)
}



function playSongNotesAtXValue(X) {
    var columnToPlay = theSong.songArray[X];
    if (columnToPlay[0] != null) {
        for (i = 0; i < columnToPlay.length; i++) {
            var note = columnToPlay[i]; 
            soundManager.play(note[0],{volume:30});
            window.setTimeout(function() {
                soundManager.stop(note[0]);
            }, (note[1]*30/theSong.tempo)*1000);   
        }
    }
}

什么任何想法可能是错误的?

PS我们已经尝试过在Safari,Chrome和Firefox的最新版本。

Answer 1:

如果我正确地跟着你,你是播放音频文件,然后在文件中间的任意点停止。 这往往会导致在输出中,这将导致喀啦或点击噪声,因为信号从高电平一个样品中的跳跃到零的不连续性。 为了消除这一点,你必须顺利地从最初的体积减小输入的音量到零,而不是从初始音量为零突然改变它。

你通常可以使用线性插值来实现这种“平滑”的任务: http://blog.bjornroche.com/2010/10/linear-interpolation-for-audio-in-cc.html

对不起,我不知道SoundManager2好足够的了解,如果你已经这样做了。



文章来源: SoundManager2 - Distortion When Stopping Sound