Речь в текст: передача потокового микрофона в Watson STT с NodeJS - PullRequest
1 голос
/ 04 мая 2019

В настоящее время я пытаюсь отправить поток микрофона в службу Watson STT, но по какой-то причине служба Watson не получает поток (я предполагаю), поэтому я получаю сообщение об ошибке «Ошибка: речь не обнаруживается в течение 30 с».

Обратите внимание, что я перенаправил WAV-файл в Watson, а также протестировал передачу micInputStream в мои локальные файлы, поэтому я знаю, что оба они, по крайней мере, настроены правильно. Я довольно новичок в NodeJS / javascript, поэтому я надеюсь, что ошибка может быть очевидной.

const fs = require('fs');
const mic = require('mic');
var SpeechToTextV1 = require('watson-developer-cloud/speech-to-text/v1');

var speechToText = new SpeechToTextV1({
  iam_apikey: '{key_here}',
  url: 'https://stream.watsonplatform.net/speech-to-text/api'
});

var params = {
  content_type: 'audio/l16; rate=44100; channels=2',
  interim_results: true
};

const micParams = { 
    rate: 44100, 
    channels: 2, 
    debug: false, 
    exitOnSilence: 6
  }
  const micInstance = mic(micParams);
  const micInputStream = micInstance.getAudioStream();

  micInstance.start();
  console.log('Watson is listening, you may speak now.');

// Create the stream.
var recognizeStream = speechToText.recognizeUsingWebSocket(params);

// Pipe in the audio.
var textStream = micInputStream.pipe(recognizeStream).setEncoding('utf8');

textStream.on('data', user_speech_text => console.log('Watson hears:', user_speech_text));
textStream.on('error', e => console.log(`error: ${e}`));
textStream.on('close', e => console.log(`close: ${e}`));

1 Ответ

0 голосов
/ 05 мая 2019

Вывод: В конце концов, я не совсем уверен, что не так с кодом.Я предполагаю, что это как-то связано с пакетом микрофона.В итоге я удалил пакет и вместо этого использовал «Node-audiorecorder» для своего аудиопотока https://www.npmjs.com/package/node-audiorecorder

Примечание: Для этого модуля требуется установка SoX, и он должен быть доступен в вашем $ДОРОЖКА.http://sox.sourceforge.net/

Обновленный код: Для всех, кому интересно, как выглядит мой окончательный код, вот и все.Также большой привет Николаю Шмыреву за попытку помочь мне с моим кодом!

Извините за тяжелые комментарии, но за новые проекты я хотел бы убедиться, что я знаю, что делает каждая строка.

    // Import module.
    var AudioRecorder = require('node-audiorecorder');
    var fs = require('fs');
    var SpeechToTextV1 = require('watson-developer-cloud/speech-to-text/v1');


    /******************************************************************************
    * Configuring STT
    *******************************************************************************/
    var speechToText = new SpeechToTextV1({
        iam_apikey: '{your watson key here}',
        url: 'https://stream.watsonplatform.net/speech-to-text/api'
    });

    var recognizeStream = speechToText.recognizeUsingWebSocket({
        content_type: 'audio/wav',
        interim_results: true
      });


    /******************************************************************************
    * Configuring the Recording
    *******************************************************************************/
    // Options is an optional parameter for the constructor call.
    // If an option is not given the default value, as seen below, will be used.
    const options = {
        program: 'rec',     // Which program to use, either `arecord`, `rec`, or `sox`.
        device: null,       // Recording device to use.

        bits: 16,           // Sample size. (only for `rec` and `sox`)
        channels: 2,        // Channel count.
        encoding: 'signed-integer',  // Encoding type. (only for `rec` and `sox`)
        rate: 48000,        // Sample rate.
        type: 'wav',        // Format type.

        // Following options only available when using `rec` or `sox`.
        silence: 6,         // Duration of silence in seconds before it stops recording.
        keepSilence: true   // Keep the silence in the recording.
      };

    const logger = console;

    /******************************************************************************
    * Create Streams
    *******************************************************************************/

    // Create an instance.
    let audioRecorder = new AudioRecorder(options, logger);

    //create timeout (so after 10 seconds it stops feel free to remove this)
    setTimeout(function() {
        audioRecorder.stop();
      }, 10000);

    // This line is for saving the file locally as well (Strongly encouraged for testing)
    const fileStream = fs.createWriteStream("test.wav", { encoding: 'binary' });

    // Start stream to Watson STT Remove .pipe(process.stdout) if you dont want translation printed to console
    audioRecorder.start().stream().pipe(recognizeStream).pipe(process.stdout);

    //Create another stream to save locally
    audioRecorder.stream().pipe(fileStream);

    //Finally pipe translation to transcription file
    recognizeStream.pipe(fs.createWriteStream('./transcription.txt'));
...