2013-03-22 4 views
1

Как я могу загрузить асинхронно звук в javascript?Async воспроизводит звук в javascript?

Я хочу играть в циклах с несколькими звуками и параллельно. Это временная шкала:

 10 seconds   7 seconds   10 seconds 
|--------------------|------------------|--------------------|--- etc 
| Sound1 playing  |Sound2 playing | Sound1 playing  |--- etc 
| Do a calculus  |Do a calculus  | Do a calculus  |--- etc 

SOUND1 и SOUND2 последние менее чем за 5 секунд Calculs Последние 1 секунду.

Как я могу это сделать в javascript?

Я должен использовать Рабочих в HTML5?

Спасибо.

+0

вы пробовали создавать различные ''

+1

_ «Таймер приостанавливается при воспроизведении звука» _ - Как и в случае, существует 15 секунд между вызовами 'myfunction()', задано 10 секунд плюс 5 секунд звука? – nnnnnn

+0

@Scanpat: И это не работает с вышеуказанным кодом? Что происходит вместо этого? – Bergi

ответ

3

Воспроизведение звуков асинхронно в JS на самом деле довольно просто. Вам просто нужно создать new Audio s и play() их сразу же, а не play() ing global Audio объектов. Вот пример:

function playSoundAsync(url){ 
    new Audio(url).play(); 
} 

Так что в вашем случае, ваш код будет выглядеть следующим образом (с хака участием setInterval с и setTimeout с для синхронизации до звуков):

// For simplicity I'll use MP3 files readily available on the Internet 
 
var sound1url = 'https://audio.code.org/win3.mp3'; 
 
var sound2url = 'https://audio.code.org/failure3.mp3'; 
 
var calculusUrl = 'https://audio.code.org/failure1.mp3'; 
 

 
setInterval(function() { 
 
    new Audio(sound1url).play(); 
 
    new Audio(calculusUrl).play(); 
 
}, 17000); 
 
setTimeout(function() { 
 
    setInterval(function() { 
 
     new Audio(sound2url).play(); 
 
     new Audio(calculusUrl).play(); 
 
    }, 17000); 
 
}, 10000);
<button onclick="new Audio(sound1url).play();">Play sound1 individually</button> 
 
<button onclick="new Audio(sound2url).play();">Play sound2 individually</button> 
 
<button onclick="new Audio(calculusUrl).play();">Play calculus individually</button>

Кроме того, вы можете заметить это, когда вы нажимаете кнопку Play $ {sound} индивидуально кнопок: новое воспроизведение $ {sound} начинается с в ожидании или прерывании текущего воспроизведения $ {sound}! Это позволяет создать акустический беспорядок, как это:

var cacophony = setInterval(function(){new Audio('https://audio.code.org/win3.mp3').play();}, 25);
<button onclick="clearInterval(cacophony);">Click here to stop this cacophony</button>

+0

** Обратите внимание на любого, рассматривающего возможность этого: ** Если вы занижены, потому что я не придерживался какого-либо соглашения (ов) JS, то вы могли бы ** ** рассказать мне, какие конвенции я разорвал? – dorukayhan

+0

Не будет ли всегда «новый» объект опускать память? Я пробовал использовать это с прыгающими шарами и издавать звуки, когда они отскакивают от стен, использование памяти быстро увеличивается, если вы используете больше шаров. – Klemkas

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