JavaScript Web Audio API и примеры остановки - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь понять аспект воспроизведения примеров JavaScript Web Web API.В частности, я использую API-интерфейс Web Audio для воспроизведения очень короткого сэмпла (на самом деле «метка клика» для метронома).

Вот что я делаю:

let sample = this.setupSample(this.audioContext, click1);
sample.start(time);
sample.stop(time + this.noteLength);

Этот фрагмент кода работает, если я запускаю приложение с рабочего стола (мой компьютер), но когда я пытаюсь запустить приложение с мобильного телефона, как только я нажимаю кнопку «Пуск» для воспроизведения метронома, я получаю следующую ошибку:

InvalidStateError: Объект находится в недопустимом состоянии.

93 |sample.stop (time + this.noteLength);

Первое, что я попытался, это прокомментировать эту строку:

let sample = this.setupSample(this.audioContext, click1);
sample.start(time);
// sample.stop(time + this.noteLength);

Таким образом, приложение работает правильно как с рабочего столаи мобильный.

Итак, мне кажется, что вызывать stop () для уже законченного семпла не нужно, может даже неправильно.Отсюда мой вопрос: неправильно ли вызывать stop () на уже законченном образце?Должен ли я считать, что он неявно вызывается, если сэмпл остановился (закончился) сам по себе?Кроме того, почему я не получаю эту ошибку InvalidStateError с рабочего стола?

Спасибо.

РЕДАКТИРОВАТЬ: чтобы быть более понятным, вот что делает setupSample:

setupSample = (audioContext, samplePath) => {
    const source = audioContext.createBufferSource();
    const myRequest = new Request(samplePath);

    fetch(myRequest).then(function(response) {
      return response.arrayBuffer();
      }).then(function(buffer) {
           audioContext.decodeAudioData(buffer, function(decodedData) {
             source.buffer = decodedData;
             source.connect(audioContext.destination);
           })
        })
     return source;
}
...