Кодировать AudioBuffer с помощью Opus (или другого кода c) в браузере - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь передавать аудио через Websocket.

Я могу получить AudioBuffer с микрофона (или другого источника) через Web-Audio-Api и транслировать RAW-Audio-Buffer, но я думаю, что это не будет очень эффективным. Поэтому я посмотрел вокруг, чтобы как-то кодировать AudioBuffer. - Если опус-код c был бы невозможен, я открыт для альтернатив и благодарен за любые подсказки в правильном направлении.

Я попытался использовать MediaRecorder (из MediaStreamRecording-API), но это кажется, что невозможно потоковая передача с этим API вместо простой записи.

Вот часть, как я получаю RAW-AudioBuffer:

const handleSuccess = function(stream) {
    const context = new AudioContext();
    const source = context.createMediaStreamSource(stream);
    const processor = context.createScriptProcessor(16384, 1, 1);

    source.connect(processor);
    processor.connect(context.destination);

    processor.onaudioprocess = function(e) {
    
      bufferLen = e.inputBuffer.length
        const inputBuffer = new Float32Array(bufferLen);
        e.inputBuffer.copyFromChannel(inputBuffer, 0);

        let data_to_send = inputBuffer


    
      //And send the Float32Array ...
    
    }

navigator.mediaDevices.getUserMedia({ audio: true, video: false })
      .then(handleSuccess);

Итак, главный вопрос: как я могу кодировать AudioBuffer. (и расшифруйте его в приемнике) Есть ли API или библиотека? Могу ли я получить закодированный буфер из другого API в браузере?

...