Служба «Речь в текст» должна знать формат аудио, которое вы пытаетесь отправить. 99% проблем, с которыми я столкнулся, связаны с тем, что служба ожидает формат аудио, отличный от используемого пользователями.
'--format=S16_LE', '--rate=44100', '--channels=1'
Это похоже на формат PCM 44,1 кГц.
В вашем коде вы указываете:
content_type: 'audio/wav'
Взгляните на поддерживаемые форматы аудио .
Может быть, попробуйте с audio/l16; rate=44100;
. Вы также можете записать звук в другом формате.
Наконец, взгляните на javascript-speech-sdk . У нас есть примеры того, как транслировать микрофон из браузера.
Обновление
const mic = require('mic');
const SpeechToTextV1 = require('watson-developer-cloud/speech-to-text/v1');
const speechToText = new SpeechToTextV1({
username: 'YOUR USERNAME',
password: 'YOUR PASSWORD',
url: 'YOUR SERVICE URL',
version: 'v1'
});
// 1. Microphone settings
const micInstance = mic({
rate: 44100,
channels: 2,
debug: false,
exitOnSilence: 6
});
// 2. Service recognize settings
const recognizeStream = speechToText.createRecognizeStream({
content_type: 'audio/l16; rate=44100; channels=2',
model: 'zh-CN_BroadbandModel',
interim_results: true,
})
// 3. Start recording
const micInputStream = micInstance.getAudioStream();
micInstance.start();
console.log('Watson is listening, you may speak now.');
// 4. Pipe audio to service
const 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}`));