Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

how can i play music in ready_callback? #93

Open
hiphome opened this issue Dec 11, 2018 · 8 comments
Open

how can i play music in ready_callback? #93

hiphome opened this issue Dec 11, 2018 · 8 comments
Assignees
Labels

Comments

@hiphome
Copy link

hiphome commented Dec 11, 2018

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"

@IonDen
Copy link
Owner

IonDen commented Dec 11, 2018

Hi, show me some code.

@IonDen IonDen self-assigned this Dec 11, 2018
@hiphome
Copy link
Author

hiphome commented Dec 11, 2018

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

@hiphome
Copy link
Author

hiphome commented Dec 11, 2018

after adding some delay, its working

function myReadyCallback(obj){
  if (obj.name == "music2") {
    setTimeout(function(){
    ion.sound.play("music");
    ion.sound.play("music2");
    }, 100);
  }
}

@hiphome
Copy link
Author

hiphome commented Dec 11, 2018

but not every time

@hiphome
Copy link
Author

hiphome commented Dec 11, 2018

a u russian?

@hiphome
Copy link
Author

hiphome commented Dec 11, 2018

в общем смысл такой что при запуске сайта должно играть 2 файла, один из которых на нулевой громкости, громкость прибавляется и убавляется во время движения мыши, в общем всё реализовано, кроме момента что надо запускать файлы строго одновременно когда они оба будут готовы, с последним кодом работает, но через раз, если раньше загружается первый файл, то всё нормально, если второй файл, то первый не запускается тк он еще не успел подгрузиться

@IonDen
Copy link
Owner

IonDen commented Dec 11, 2018

Понятно. Смотри, реди_коллбэк будет вызван несколько раз, по разу для каждого подключенного звука. Эти вызовы будут, логично, в разное время.

Что тебе нужно:

  1. Создать внешнюю переменную, скажем counter = 0
  2. При каждом вызове ready_callback прибавлять counter++
  3. Как только каунтер достингет нужной цифры (в твоем случае 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");
}

@hiphome
Copy link
Author

hiphome commented Dec 11, 2018

отлично! спасибо) только без тайм аута всё равно выдаёт ошибку "Uncaught TypeError: Cannot read property 'play' of undefined", ставлю тайм аут небольшой и всё работает! в общем можно оставлять так, но если это какой-то баг, присмотритесь.

function play() { setTimeout(function(){ ion.sound.play("music"); ion.sound.play("music2"); }, 100); }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants