我正在尝试用节点js创建非常简单的语音识别软件。我已经连接了Google语音API并且可以发送正确记录的.wav文件并获得转录并且识别非常好(使用Audacity记录)
但我遇到了语音识别问题"即时#34;就像将音频流直接从麦克风发送到Gooegle语音API。
这是我记录语音并发送给谷歌的主要方法。
function recognize(encoding, sampleRateHertz, languageCode)
{
const request = {
config: {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode
},
interimResults: true // If you want interim results, set this to true
};
// Imports the Google Cloud client library
const Speech = require('@google-cloud/speech');
// Instantiates a client
const speech = Speech();
// Create a recognize stream
const recognizeStream = speech.createRecognizeStream(request)
.on('error', console.error)
.on('data', (data) => process.stdout.write(data.results + ', '))
let fs = require('fs');
let Mic = require('node-microphone');
let mic = new Mic({ 'rate': '16000', 'channels': '1', 'debug': true, 'exitOnSilence': 6, 'bitwidth' : '16' });
let micStream = mic.startRecording();
micStream.pipe(recognizeStream);
micStream.pipe(fs.createWriteStream('test.wav') )
setTimeout(() => {
//logger.info('stopped recording');
console.log('stopped writing')
mic.stopRecording();
}, 10000);
mic.on('info', (info) => {
console.log('INFO ' + info);
});
mic.on('error', (error) => {
console.log(error);
});
}
我传递给方法的配置数据
options({
encoding: {
alias: 'e',
default: 'LINEAR16',
global: true,
requiresArg: true,
type: 'string'
},
sampleRateHertz: {
alias: 'r',
default: 16000,
global: true,
requiresArg: true,
type: 'number'
},
languageCode: {
alias: 'l',
default: 'en-US',
global: true,
requiresArg: true,
type: 'string'
}
})
所以我使用节点麦克风'为了录制,我安装了Windows和SOX。通过谷歌发送。我不会得到错误,但承认非常糟糕。我在非常容易的单词或短语上得到转录,例如"谁"," food"," call"。大多数情况下,如果我正常说话,则不会返回任何内容。
我有一种感觉,知道某些东西是错误的,或录音率(就像,记录是"太快"谷歌不明白),但我没有看到我的错误。
我还添加了文件保存功能。当我打开文件并听取它时,听起来很正常。当我发送这个文件进行识别时,我几乎什么都没回来。因此,录制音频流的方式有问题
编辑: 我几乎可以肯定问题出在SOX中。用其他程序记录的所有文件都可以更好地工作。