Как записать голосовое сообщение?

Для того, чтобы записать голосовое сообщение в JavaScript, можно использовать функциональность API веб-браузера, такую как MediaStream и MediaRecorder.

Первым шагом нужно получить доступ к аудиовходу устройства пользователя. Для этого можно использовать методы getUserMedia или getDisplayMedia API MediaDevices. Эти методы требуют согласия пользователя, поэтому перед получением доступа к микрофону нужно запросить разрешение с помощью метода getUserMedia:

navigator.mediaDevices.getUserMedia({ audio: true })
   .then(function(stream) {
      // Обработка успешного получения медиа-потока
   })
   .catch(function(err) {
      // Обработка ошибки доступа к микрофону
   });

После успешного получения медиа-потока можно создать объект MediaRecorder для записи аудио. MediaRecorder API позволяет записывать аудио в форматах, таких как WebM и WAV. Для создания MediaRecorder нужно передать медиа-поток и указать желаемый формат записи:

var mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm' });

После создания MediaRecorder нужно указать, как обрабатывать полученные данные при записи. Для этого можно использовать события ondataavailable и onstop:

var chunks = [];
mediaRecorder.ondataavailable = function(e) {
   chunks.push(e.data);
};

mediaRecorder.onstop = function(e) {
   var blob = new Blob(chunks, { 'type' : 'audio/webm' });
   var audioUrl = URL.createObjectURL(blob);
   // Обработка аудио-файла, например отправка на сервер или проигрывание
};

После установки обработчиков событий можно начать запись, вызвав метод start():

mediaRecorder.start();

По завершению записи можно вызвать метод stop(), который прекратит запись и в результате вызовет событие onstop:

mediaRecorder.stop();

Когда событие onstop сработает, можно использовать полученные данные для дальнейшей обработки, например, отправки на сервер или проигрывания в браузере.

Важно отметить, что API MediaRecorder не поддерживается всеми браузерами, поэтому перед использованием рекомендуется проверить поддержку этого API в браузере с помощью функции MediaRecorder.isTypeSupported('audio/webm').

Таким образом, используя MediaStream и MediaRecorder, можно записывать голосовые сообщения в браузере с помощью JavaScript.