how can i play music in ready_callback?
hiphome opened this issue · 8 comments
i need to start playing 2 files in one time. if i could start playing in callback, when files ready to play, it will be done, but when i playing files in callback i get error "Uncaught TypeError: Cannot read property 'play' of undefined"
Hi, show me some code.
ion.sound({
sounds: [
{
name: "click",
volume: 0.4
},
{
name: "music",
volume: 0.5,
loop: true
},
{
name: "music2",
volume: 0.0,
loop: true
}
],
volume: 0.5,
path: "/themes/sound-design/assets/sounds/",
preload: true,
ready_callback: myReadyCallback
});
function myReadyCallback(obj){
ion.sound.play(obj.name);
}
after adding some delay, its working
function myReadyCallback(obj){
if (obj.name == "music2") {
setTimeout(function(){
ion.sound.play("music");
ion.sound.play("music2");
}, 100);
}
}
but not every time
a u russian?
в общем смысл такой что при запуске сайта должно играть 2 файла, один из которых на нулевой громкости, громкость прибавляется и убавляется во время движения мыши, в общем всё реализовано, кроме момента что надо запускать файлы строго одновременно когда они оба будут готовы, с последним кодом работает, но через раз, если раньше загружается первый файл, то всё нормально, если второй файл, то первый не запускается тк он еще не успел подгрузиться
Понятно. Смотри, реди_коллбэк будет вызван несколько раз, по разу для каждого подключенного звука. Эти вызовы будут, логично, в разное время.
Что тебе нужно:
- Создать внешнюю переменную, скажем
counter = 0
- При каждом вызове
ready_callback
прибавлятьcounter++
- Как только каунтер достингет нужной цифры (в твоем случае 2), это будет значить что оба звука загружены и можно запускать.
let counter = 0;
let num_of_sounds = 2;
function myReadyCallback () {
counter++;
if (counter === num_of_sounds) {
play();
}
}
function play() {
ion.sound.play("music");
ion.sound.play("music2");
}
отлично! спасибо) только без тайм аута всё равно выдаёт ошибку "Uncaught TypeError: Cannot read property 'play' of undefined", ставлю тайм аут небольшой и всё работает! в общем можно оставлять так, но если это какой-то баг, присмотритесь.
function play() { setTimeout(function(){ ion.sound.play("music"); ion.sound.play("music2"); }, 100); }