Проблемы с WebAudio - PullRequest
       54

Проблемы с WebAudio

0 голосов
/ 09 января 2019

Я создаю исследовательский эксперимент, который использует API WebAudio для записи аудиофайлов, произнесенных пользователем. Я нашел решение для этого с помощью Recorder.js, и все работало нормально ... пока я не попробовал вчера.

Теперь я получаю эту ошибку в Chrome: «AudioContext не был разрешен для запуска. Он должен быть возобновлен (или создан) после пользовательского жеста на странице». И это относится к этой ссылке: Политика Web Audio API . Похоже, это является следствием новой политики Chrome, изложенной по ссылке выше.

Итак, я попытался решить проблему с помощью resume () следующим образом:

var gumStream; //stream from getUserMedia()
var rec; //Recorder.js object
var input; //MediaStreamAudioSourceNode we'll be recording

// shim for AudioContext when it's not avb. 
var AudioContext = window.AudioContext || window.webkitAudioContext;
var audioContext = new AudioContext; //new audio context to help us record

function startUserMedia() {
    var constraints = { audio: true, video:false };
    audioContext.resume().then(() => { // This is the new part
        console.log('context resumed successfully');
    });

    navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {

        console.log("getUserMedia() success, stream created, initializing Recorder.js");
    gumStream = stream;
    input = audioContext.createMediaStreamSource(stream);
    rec = new Recorder(input, {numChannels:1});
    audio_recording_allowed = true;
    }).catch(function(err) {
        console.log("Error");
    });

}

Теперь в консоли я получаю:

Error

контекст успешно возобновлен

И поток не инициализируется. Это происходит как в Firefox, так и в Chrome. Что мне нужно сделать?

1 Ответ

0 голосов
/ 15 января 2019

У меня была точно такая же проблема! И технически вы помогли мне найти этот ответ. Мое сообщение об ошибке было не таким полным, как у вас по какой-то причине, и ссылка на эти изменения политики содержала ответ:)

Вместо продолжения рекомендуется создать звуковой контекст после того, как пользователь взаимодействует с документом (когда я говорю наилучшая практика, если вы посмотрите на первый комментарий padenot от 28 сентября 2018 года о эта тема , он упоминает, почему в первом пункте пули) .

Итак, вместо этого:

var audioContext = new AudioContext; //new audio context to help us record

function startUserMedia() {
    audioContext.resume().then(() => { // This is the new part
        console.log('context resumed successfully');
    });
}

Просто установите звуковой контекст следующим образом:

var audioContext;

function startUserMedia() {
    if(!audioContext){
      audioContext = new AudioContext;
    } 
}

Это должно работать, пока startUserMedia() выполняется после какого-то пользовательского жеста.

...