我必须包含一个音频文件,该文件会自动播放并可以暂停并通过按钮再次播放。暂停和播放工作,但似乎,文件加载两次,我找不到问题。当我暂停时,音量会下降,如果我按下播放按钮,一个“层”继续播放,我暂停播放,另一个继续播放...这是代码:
$(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
})
}
});
答案 0 :(得分: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);
//...
}
//...
}
答案 1 :(得分:0)
我最近遇到过这个问题。
我注意到来自Soundmanager2调试输出的消息:
克隆Audio()例如#
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() {
...
注释掉整个 else 选项,soundmanager2的 html5支持仅使用一个SMSound对象。
它仍允许通过再次使用方法
创建新对象来自动播放元素