Как транслировать двоичное аудио с помощью WebSocket в Google Speech-to-Text API - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь записать звук с микрофона в браузере и отправить его в Google Speech-to-Text API с помощью потока WebSocket. Я отправляю данные через WebSocket на мой сервер и передаю их прямо в поток Pumpify.

Запись в формате WAV с использованием RecordRT C:

  recorder = new RecordRTC.RecordRTCPromisesHandler(stream, {
    type: "audio",
    recorderType: RecordRTC.StereoAudioRecorder,
    sampleRate: sampleRateHertz,
    checkForInactiveTracks: true,
    numberOfAudioChannels: 1,
  });

Отправка двоичных данных через WebSocket:

socket.binaryType = "arraybuffer";
micStream = new MicrophoneStream(); // from microphone-stream
micStream.setStream(stream);
micStream.on("data", chunk => {
    if (socket.OPEN) {
      socket.send(chunk);
    }
  });

Прием на стороне сервера и передача в потоковый клиент Google:

  const bufferStream = new stream.PassThrough();
  ws.on("message", async (rawData: ArrayBuffer) => {
    console.log(rawData);
    bufferStream.push(rawData);
    bufferStream.pipe(recognizeStream);
  });

Полученные данные в формате буфера:

<Buffer 8e 29 40 bb a2 73 cc ba 98 6f e2 39 b5 15 ca 3a 78 56 b0 ba 42 28 c9 bb b0 15 08 39 8e 73 32 3c 6a ed 96 3a b3 8e d1 bb 20 6a b0 3a a4 bd 45 bb ce 95 ... 4046 more bytes>

Несмотря на данные выглядят корректно, клиент Google не отвечает ни на результаты, ни на ошибки. Есть идеи?

...