Медиа-рекордер Сохранение в формате WAV во всех браузерах

Media Recorder работал фантастически, чтобы я мог сложный процесс вместе с остальной частью API веб-аудио, документированной в Mozilla. Тем не мение. Для меня это бесполезно, если я не смогу заставить его последовательно записывать звук в волновом формате. Я попытался установить MimeType во многих браузерах, которые выглядят устаревшими без знания Mozilla, любая попытка установить mimeType даже с использованием примера из документации здесь, не работает ни в одном коде.

Если у кого-то есть способ сохранить этот файл как волну с использованием интерфейсной обработки (без использования серверного посредника), я буду очень благодарен, если вы об этом услышите.

Возможно, стоит отметить, что формат ogg раньше работал у меня, пока кодировка файлов была wav. Этот пример с исходный код работал несколько дней назад в моем браузере (Brave / Chrome), после чего он начал сохраняться в формате webm.

Кроме того, стоит отметить, что я не женат на использовании MediaRecorder API для этого проекта, если я могу получить данные канала для обработки с помощью WebAudioAPI после записи.


person WorkingOnBeingBetter    schedule 07.12.2020    source источник


Ответы (1)


Я создал пакет, который должен делать именно то, что вы хотите. Это называется расширяемым медиа-рекордером. Он предлагает тот же интерфейс, что и родной MediaRecorder, но позволяет расширять его с помощью пользовательских кодеков. Пример кодека - wav.

Вот как вы можете использовать его для записи потока, исходящего от getUserMedia():

import { MediaRecorder, register } from 'extendable-media-recorder';
import { connect } from 'extendable-media-recorder-wav-encoder';

await register(await connect());

const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const mediaRecoder = new MediaRecorder(stream, { mimeType: 'audio/wav' });

Он будет использовать встроенный MediaRecorder для записи данных PCM в Chrome. В Firefox и Safari для получения данных PCM используется API веб-аудио. Как только данные были получены, они отправляются рабочему, который декодирует их как wav.

person chrisguttandin    schedule 08.12.2020
comment
вау, возьми этот Крис Рок, ты мой новый любимый Крис. Я просто тестирую, и если все пойдет гладко, отмечу, что это правильно. - person WorkingOnBeingBetter; 08.12.2020
comment
вы собирались написать import {MediaRecorder, register} from 'extendable-media-recorder';? Теперь он у меня есть, и он работает. и я подтвердил, что без этого дополнения он не работает. Очередь редактирования заполнена, иначе я сам внесу изменения в ваш ответ. - person WorkingOnBeingBetter; 08.12.2020
comment
Большое спасибо за то, что предупредили меня об этой ошибке. Я только что исправил пример кода. Я скопировал его прямо из readme. Вы хотите исправить это там или мне стоит это сделать? - person chrisguttandin; 08.12.2020
comment
У меня возникла проблема, о которой я хочу сообщить как о проблеме в библиотеке. Похоже, что собственный MediaRecorder также работает, и я получаю сообщение «Необработанное отклонение» (ошибка): не было экземпляра кодировщика, сохраненного с данным идентификатором. Ошибка - person WorkingOnBeingBetter; 15.12.2020
comment
Не могли бы вы открыть вопрос на GitHub (github.com/chrisguttandin/extendable-media -recorder / issues / new) и желательно добавить несколько шагов, которые я могу выполнить, чтобы воспроизвести проблему? Спасибо. - person chrisguttandin; 16.12.2020