2013-07-09 2 views
3

Я должен включить аудиофайл, который автоматически воспроизводится и может быть приостановлен и снова воспроизведен кнопками. Однако пауза и воспроизведение, однако, кажется, что файл загружается дважды, и я не могу найти проблему. Когда я пауза, громкость звука просто идет вниз, и если нажать на кнопку воспроизведения, один «слой» продолжает играть, где я остановился его, другие просто продолжает играть ... Это код:SoundManager2 AutoPlay загружает файл дважды

$(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(); 
    }); 
}); 

Редактировать

Как сказал Алекс Морриз, это похоже на ошибку в файле 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

Да, я получил его ... Я буду видеть, если я могу исправить это .. спасибо за ваш ответ на данный момент :) –

+1

Хорошо, я не мог найти, как исправить это в самой Soundmanager2.js (и, честно говоря, я рад, что я не хочу возиться в этих файлах ...) , Я теперь исправил его, написав «url:« путь/в/swf-files »и« preferFlash: true »в части установки кода ... Я собираюсь отредактировать свой пост. –

0

Я наткнулся на этот вопрос в последнее время.

Я заметил сообщение от отладочной Soundmanager2:

Клонирование Audio(), например #

Клонирование SoundObject не было действительно полезно для моих целей.

Я отредактировал файл soundmanager2.js. Поиск выходной строки:

Клонирование Audio()

вокруг линии 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() { 

     ... 

Комментирование весь вариант еще, поддержка html5 из soundmanager2 использует только один объект SMSound.

Он по-прежнему позволяет автовоспроизведение элемента, создавая новый объект, снова используя метод

soundManager.createSound()

Смежные вопросы