Войти
ПрограммированиеФорумЗвук

Звук в html.

#0
12:18, 3 янв. 2013

Есть реализация сетевой игры на canvas. Достаточно шустрая и динамичная. Настало время выполнить задачи связанные со звуком. Для начала вставить звук стрельбы пулемета. Простой плеер <audio> очень странно себя ведет. Скорее всего это из-за буферизации. Пробовал сделать некие псевдо каналы вот код если че

var smgMas=[];
smgMas.push({
    chanel:new Audio("sound/shotgun.wav")
});
smgMas.push({
    chanel:new Audio("sound/shotgun.wav")
});
smgMas.push({
    chanel:new Audio("sound/shotgun.wav")
});
smgMas.push({
    chanel:new Audio("sound/shotgun.wav")
});
function runSmg(){
    for(var i=0;i<smgMas.length;i++){
        if(smgMas[i].chanel.ended || smgMas[i].chanel.currentTime==0){
            smgMas[i].chanel.currentTime=0;
            smgMas[i].chanel.play();
            return;
        }
    }
}
Какие другие способы есть чтобы вставить звук? Необходимо чтобы звук загрузился 1 раз без буферов и прочего и звучал по команде.


#1
14:30, 3 янв. 2013

Вставь сами эллементы audio, что-то на подобии:

<div id='sounds'>
  <audio data-key='click_01' data-channels='2' data-volume='0.11'>
    <source src="//.../audio/click_01.mp3"></source>
    <source src="//.../audio/click_01.ogg"></source>
  </audio>
  <audio data-key='click_02' data-channels='2' data-volume='0.03'>
    <source src="//.../audio/click_02.mp3"></source>
    <source src="//.../audio/click_02.ogg"></source>
  </audio>
</div>

Далее найди эти все элементы, и просто запускай play() для них.
Дело в том что ты не можешь проиграть одновременно один и тот же audio на много каналов. Для этого в коде выше я добавил data-channels, ты выбираешь это значение, и просто клонируй элемент столько раз, в массив для этого типа звука. затем держи индекс канала для каждого типа звука, и каждый раз проигрывая пробегайся по циклу. Таким образом ты будешь запускать всегда следующий "канал" из массива. Если использование данного звука происходит более часто - увеличь число каналов. Если более редко, уменьшай.

Это можно подгрузить также динамично, чтобы не задерживать и не нагружать основную загрузку, т.к. звук - это второстепенное, и он может подгрузиться в динамике на заднем плане.
Такой подход будет работать везьде где поддерживается <audio>, и на мобильных. Не рекомендую использовать специфичные Audio API которые нормально работают только на Chrome и FF и то они разные.
Также не парсья насчёт проверки если звук уже остоновился или т.п., просто вызывай play().

ПрограммированиеФорумЗвук

Тема в архиве.