Аудио с блобом в качестве источника не воспроизводится при вызове из функции - PullRequest
0 голосов
/ 22 ноября 2018

Я использую navigator.mediaDevices.getUserMedia({ audio: true }), чтобы получить пользовательский микрофон.Это мой код:

navigator.mediaDevices.getUserMedia({ audio: true })
    .then(stream => {
        mediaRecorder = new MediaRecorder(stream);
        mediaRecorder.start();

        mediaRecorder.addEventListener("dataavailable", event => {
          audioChunks.push(event.data);
        });

        mediaRecorder.addEventListener("stop", () => {
            blob = new Blob(audioChunks);
            audioUrl = URL.createObjectURL(blob);
        });
    });

Затем, когда пользователь нажимает кнопку остановки, он делает следующее:

mediaRecorder.stop();
addSound(audioUrl);

Затем функция addSound создает объект со звуком и некоторые другиеинформация и помещает его в массив.Затем у меня есть цикл, который работает как секвенсор, это код:

function loop(){
    secondTimer += (1/40);

    for(var i = 0; i < audios.length; i++){
        var audio = audios[i];
        var start = audio.start;

        if(!audio.played && secondTimer >= start){
            audio.audio.play();
            audio.played = true;
        }
    }

    if(play == true){
        setTimeout(loop, 25);   
    }       
}

По сути, он проверяет, больше или равно ли текущее время из секвенсора, чем время начала из аудио.Если это так, то он воспроизводит звук и устанавливает для его свойства Play значение true, чтобы его нельзя было воспроизвести дважды.

Проблема в том, что звук, записанный с помощью микрофона, не воспроизводится.Однако, если я, например, создаю аудиообъект с использованием mp3-файла, он работает.

Еще одна вещь, которую стоит отметить, - если я выполняю audio.play() в функции addSound, она работает.Кроме того, когда я захожу в Chrome Dev Tools и пытаюсь сделать audios[x].audio.play(), это также работаетТак что он не работает только тогда, когда он вызывается из функции цикла, что странно.

Это источник аудиоэлемента, который отображается при регистрации в консоли:

blob:http://localhost/4a7bb4a3-1940-496c-a545-a956d1ccbd57

Если это поможет,

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...