Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2023, 21:27   #1
LUN2
Пользователь
 
Регистрация: 14.08.2021
Сообщений: 18
По умолчанию Как настроить аудиоплейер на ожидание аудиоданных

Добрый вечер!
Имеется такой код, который записывает звук и каждые полсекунды формирует очередную "порцию" звука
После окончания записи будет воспроизводиться первая порция - data[0].

Каким образом модифицировать код, чтобы после воспроизведения data[0] аудиоплейер генерировал событие, в котором запрашивал бы очередную порцию звука, обработчик события подсунет ему data[1] и так далее.

Полный останов плейера и старт с data[1] не подойдет, т.к. элементы массива data зависимы, их можно проигрываться в одном "сеансе" только последовательно.

Я знаю, что можно сразу отдать на проигрывания весь массив data, но мне нужен механизм - чтобы плейер запрашивал очередную порцию данных - пока не не разобрался с ним - прошу подсказать.

Код:
navigator.mediaDevices.getUserMedia({audio:true})
  .then(function onSuccess(stream) {
    const recorder = new MediaRecorder(stream);
 
    const data = [];
    recorder.ondataavailable = (e) => {
      data.push(e.data);
    };
    recorder.start(500);  // каждые 0,5 секунд генерировать событие dataavailable 
 
    recorder.onstop = (e) => {
      const audio = document.createElement('audio');
      audio.src = window.URL.createObjectURL(new Blob( data[0] ));
    }
    setTimeout(() => {
      rec.stop();
    }, 5000);
  })
  .catch(function onError(error) {
    console.log(error.message);
  });
Прошу прощения - неправильно выбрал форум, скопирую в форум javascript, прошу модератора удалить сообщение.
LUN2 вне форума Ответить с цитированием
Старый 03.02.2023, 10:59   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

генерить событие по окончании воспроизведении куска - в его обработчике - брать новый кусок данных и проигрывать его

Код:
audio.src = window.URL.createObjectURL(new Blob( data.pop ));
audio.onended= (e) => {
      audio.src = window.URL.createObjectURL(new Blob(data.pop));
    };
ADSoft вне форума Ответить с цитированием
Старый 04.02.2023, 17:56   #3
LUN2
Пользователь
 
Регистрация: 14.08.2021
Сообщений: 18
По умолчанию

ADSoft, первоначально я так и делал, но это не работает.
Причина - каждый следующий blob, который выдает recorder, не является независимым, он не может проигрываться, когда плейер остановился по onended.

Поэтому мой вопрос и заключался в том, чтобы дать плейру понять, что, с одной стороны, новый аудио данных пока еще нет, но они появятся и плейер не должен воспринимать их как новую независимую порцию данных.

Последний раз редактировалось LUN2; 04.02.2023 в 18:02.
LUN2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Визуализация аудиоданных shizzoidman Моделирование, изометрия, photoshop, 3d редакторы 1 09.04.2017 12:00
Ожидание завершения DrBAXA Общие вопросы Delphi 8 26.01.2013 21:42
мультипоточное ожидание Fun_tick C# (си шарп) 5 05.03.2012 15:00
ожидание внутри процедуры Juffin Общие вопросы Delphi 5 01.06.2009 13:52