Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SoundManager2-停止声音时失真_Javascript_Flash_Settimeout_Html5 Audio_Soundmanager2 - Fatal编程技术网

Javascript SoundManager2-停止声音时失真

Javascript SoundManager2-停止声音时失真,javascript,flash,settimeout,html5-audio,soundmanager2,Javascript,Flash,Settimeout,Html5 Audio,Soundmanager2,我试图在SoundManager2中循环播放一组声音文件,并在不同的时间点播放它们。下面的代码采用了一个类似于此的songArray,“note”由一个声音文件和播放该声音文件的持续时间组成: var songArray = [[null],[["clarinet_e4.mp3",1],["clarinet_a4.mp3",1]],[null],[null],[null],[null],[["clarinet_c4.mp3",1]],[["clarinet_c5.mp3",1]],[null],

我试图在SoundManager2中循环播放一组声音文件,并在不同的时间点播放它们。下面的代码采用了一个类似于此的songArray,“note”由一个声音文件和播放该声音文件的持续时间组成:

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);   
        }
    }
}
功能播放歌曲(X){
playSongNotesAtXValue(X);
setTimeout(函数(){
X++;
如果(X>=song.songArray.length){
X=0;
}
播放歌曲(X);
},(30/歌曲节奏)*1000)
}
函数playSongNotesAtXValue(X){
var columnToPlay=歌曲数组[X];
if(columnToPlay[0]!=null){
对于(i=0;i
有什么想法可能是错误的吗


我们已经在Safari、Chrome和Firefox的最新版本上尝试过了。

< P>如果我正确地跟着你,你正在播放音频文件,然后停在文件中间的任意点。这通常会导致输出不连续,这将导致弹出或咔哒声噪声,因为信号在一个样本中从高电平跳到零。要消除这种情况,您必须将输入的音量从初始音量平稳地减小到零,而不是突然将其从初始音量更改为零

通常可以使用线性插值来完成此“平滑”任务:

抱歉,我对SoundManager2不太了解,无法理解您是否已经在这样做了