2013-07-09 27 views
3

我必须包含一个音频文件,该文件可以自动播放,并且可以暂停并通过按钮再次播放。暂停和播放的作品,但看起来,该文件被加载两次,我找不到问题。当我暂停时,音量正好下降,如果我按下播放按钮,一个“图层”继续播放,我暂停播放,另一个只是继续播放...这是代码:SoundManager2自动播放加载文件两次

$(document).ready(function() { 
    $('#play').hide(); 
    soundManager.setup({ 
    debugMode: false, 
    onready: function() { 
     soundManager.createSound({ 
     id: 'music', 
     url: 'up/files/file.mp3', 
     autoPlay: true, 
     autoLoad: false 
     }) 
    } 
    }); 

    $('#play').bind('click', function() { 
    var sound = soundManager.getSoundById('music'); 
    sound.play(); 
    $('#pause').show(); 
    $('#play').hide(); 
    }); 

    $('#pause').bind('click', function() { 
    var sound = soundManager.getSoundById('music'); 
    sound.pause(); 
    $('#pause').hide(); 
    $('#play').show(); 
    }); 
}); 

编辑

正如Alex Morrise所说,这似乎是soundmanager2.js文件中的一个错误。我现在通过提供到SWF的文件的路径和preferFlash选项设置为true,像这样固定的:

soundManager.setup({ 
    url: 'path/to/swf-files', 
    preferFlash: true, 
    debugMode: false, 
    onready: function() { 
    soundManager.createSound({ 
     id: 'music', 
     url: 'up/files/file.mp3', 
     autoPlay: true, 
     autoLoad: false 
    }) 
    } 
}); 

回答

2

这似乎是SoundManager类的错误。 soundManager.createSound方法运行_setup_html5方法。如果您已设置autoPlay,那么_setup_html5方法将调用load函数,该函数将加载声音。

然而,在load功能,它会检查,如果你的浏览器支持HTML5。如果是,则再次拨打_setup_html5,这是第二次拨打load

你关注吗?

下面的代码的采样:

this._setup_html5 = function(oOptions) { 
    //... 
    if (instanceOptions.autoLoad || instanceOptions.autoPlay) { 
     s.load(); 
    } 
    //... 
} 

this.load = function(oOptions) { 
    //... 
    if (html5OK(instanceOptions)) { 
     oSound = s._setup_html5(instanceOptions); 
     //... 
    } 
    //... 
} 
+0

呀为AutoPlay的元素,我知道了......我要去看看,如果我能解决这个问题.. 。谢谢你现在的答案:) –

+1

好吧,我找不到如何修复它在Soundmanager2.js本身(坦率地说,我很高兴,我不想在这些文件中乱搞......) 。我现在通过在代码的设置部分编写'url:'path/to/swf-files''和'preferFlash:true'来修复它...我要编辑我的帖子。 –

0

我碰到这个问题最近。

我注意到从Soundmanager2调试输出消息:)例如#

克隆音频(该SoundObject克隆不是我的目的,真正有用的。

我编辑的soundmanager2.js文件。 搜索输出字符串:

克隆音频()

周围行2021:

if (s.instanceCount < 2) { 

     // HTML5 single-instance case 

     start_html5_timer(); 

     a = s._setup_html5(); 

     s.setPosition(s._iO.position); 

     a.play(); 

     } /*else { 

     // HTML5 multi-shot case 

     sm2._wD(s.id + ': Cloning Audio() for instance #' + s.instanceCount + '...'); 

     audioClone = new Audio(s._iO.url); 

     onended = function() { 

     ... 

注释掉整个其他选项,soundmanager2的HTML5的支持仅使用一个SMSound对象。

它仍然允许通过创建一个新的对象再次使用方法

soundManager.createSound()