Как я могу использовать Opus Codec из JavaScript
Я хотел бы узнать, возможно ли иметь прямой доступ к Opus с помощью getUserMedia
или что-либо подобное из последних браузеров.
Я много разбираюсь в этом, но без хороших результатов.
Я знаю, что Opus или Speex фактически используются в webkitSpeechRecognition
API. Я хотел бы сделать распознавание речи, но используя собственный сервер, а не Google.
Ответы
Ответ 1
Итак, есть много предложений о Emscripten, но никто этого не делал, поэтому я портировал кодер Кодирование FLAC, WAVE, AIFF, RAW файлов || демонстрация || Размер веб-рабочего: 1,3 MiB
Кодирование сырья для немедленной обработки или отправки без контейнера || демо
|| Размер веб-рабочего: 0,6 MiB
Кодирование Ogg-Opus и WAV из потока getUserMedia
При использовании Mozilla Firefox можно использовать MediaRecorder
, что также позволит конвертировать произвольные звуковые файлы в формат Opus при поддержке платформ вместе с AudioContext.decodeAudioData()
Ответ 2
Мы используем emscripten для кодирования и декодирования с использованием gsm610 с помощью getUserMedia, и он работает невероятно хорошо, даже на мобильных устройствах. В эти дни javascript дает почти собственную производительность, поэтому emscripten жизнеспособен для компиляции кодеков. Единственная проблема - потенциально очень большие .js файлы, поэтому вы хотите скомпилировать только те части, которые вы используете.
Ответ 3
К сожалению, в настоящее время невозможно получить доступ к кодекам браузера непосредственно из JavaScript для кодирования. Единственный способ сделать это - использовать WebRTC и настроить запись на сервере. Я пробовал это, компилируя libjingle с другим кодом из Chromium, чтобы запустить его на сервере Node.js... это почти невозможно.
Единственное, что вы можете сделать в настоящее время, - отправить необработанные данные PCM на ваш сервер. Это занимает довольно много полосы пропускания, но вы можете свести к минимуму это путем преобразования образцов float32 до 16 бит (или 8 бит, если ваше распознавание речи может справиться с этим).
Надеемся, что вскоре появится API-интерфейс медиа-рекордера, чтобы мы могли использовать кодеки браузера.
Ответ 4
Это не полное решение, ответ на @Brad на самом деле является правильным в настоящее время.
Один из способов сделать это - скомпилировать Opus to Emscripten и надеяться, что ваш компьютер сможет обрабатывать кодировку с использованием JavaScript. Другой альтернативой является использование speex.js.