Как я могу использовать 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.