<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=432721&amp;view=findpost&amp;p=3885760</guid>
        <pubDate>Wed, 01 Feb 2023 19:22:51 +0000</pubDate>
        <title>Как правильно воспроизвести несколько аудио blob-ов?</title>
        <link>https://forum.sources.ru/index.php?showtopic=432721&amp;view=findpost&amp;p=3885760</link>
        <description><![CDATA[Lun2: Добрый вечер&#33;<br>
Вижу мой вопрос висит без ответа. :o  Попытаюсь переформулировать:<br>
имеется такой код, который записывает звук и каждые 0,5 секунд формирует очередную &quot;порцию&quot; звука<br>
После окончания записи будет воспроизводиться первая порция - data[0].<br>
<br>
Каким образом модифицировать код, чтобы после воспроизведения data[0] аудиоплейер генерировал событие, в котором запрашивал бы очередную порцию звука, обработчик события подсунет ему data[1] и так далее.<br>
<br>
Я знаю, что можно сразу отдать на проигрывания весь массив data, но мне нужен механизм - чтобы плейер запрашивал очередную порцию данных - пока не не разобрался с ним - прошу подсказать.<br>
<br>
navigator.mediaDevices.getUserMedia({audio:true})<br>
  .then(function onSuccess(stream) {<br>
    const recorder = new MediaRecorder(stream);<br>
 <br>
    const data = [];<br>
    recorder.ondataavailable = (e) =&gt; {<br>
      data.push(e.data);<br>
    };<br>
    recorder.start(500);  // каждые 0,5 секунд генерировать событие dataavailable <br>
 <br>
    recorder.onstop = (e) =&gt; {<br>
      const audio = document.createElement(&#39;audio&#39;);<br>
      audio.src = window.URL.createObjectURL(new Blob( data[0] ));<br>
    }<br>
    setTimeout(() =&gt; {<br>
      rec.stop();<br>
    }, 5000);<br>
  })<br>
  .catch(function onError(error) {<br>
    console.log(error.message);<br>
  });]]></description>
        <author>Lun2</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=432721&amp;view=findpost&amp;p=3885612</guid>
        <pubDate>Sat, 28 Jan 2023 19:08:54 +0000</pubDate>
        <title>Как правильно воспроизвести несколько аудио blob-ов?</title>
        <link>https://forum.sources.ru/index.php?showtopic=432721&amp;view=findpost&amp;p=3885612</link>
        <description><![CDATA[Lun2: Добрый вечер&#33;<br><br>Для записи звука через микрофон я использую событие dataavailable у объекта MediaRecorder.<br><br>Запись разбивается с помощью параметра timeslice метода MediaRecorder.start(timeslice).<br><br>Через каждые timeslice миллисекунд я получаю аудио blob, но если пытаюсь проиграть эти blob&#39;ы<br>по отдельности, то только первый из них проигрывается нормально, а 2-ой и далее не проигрываются<br>вообще, т.к. плейер не может раскодировать данные.<br>На stackoverflow я прочитал, что эти части-blob-ы не являются независимыми - я так понял, что их нельзя проигрывать по отдельности, а только всей кучей.<br><br>Я же хочу сделать потоковую запись аудио блобов, передачу на сервер, а он разошлет клиентам для проигрывания (звуковой чат). Понятно, что 2-ой и далее звуковые блобы проигрываться не будут на клиентах.<br><br>Вопрос: как обойти эту проблему, т.е. сделать, чтобы рекордер записывал небольшие звуковые куски речи timeslice миллисекунд, которые смогут проигрываться отдельно друг от друга ?]]></description>
        <author>Lun2</author>
        <category>JavaScript, DOM/DHTML</category>
      </item>
	
      </channel>
      </rss>
	