Oum*_*mpa 6 node.js google-cloud-speech angular
我正在尝试使用Google云语音API,方法是在Angular FrontEnd中记录音频,将其转换为base64,再将其发送到我的Node后端,然后对Google语音API进行查询。
到目前为止,我还没有成功,谷歌只给我空了结果。
您将看到,为了确定问题,我在遍历所有可能的sampleRate和音频格式。
要注意的另一件事是,使用Google示例audio.raw(在此处https://github.com/googleapis/nodejs-speech/tree/master/samples进行测试)可以正常工作,并且我得到了转录。
这是我的前端:
const onSuccess = stream => {
var options = {
audioBitsPerSecond: 16000, // NB: I have tried several bitrates, and several audio formats (here, and in the blob creation)
// mimeType: 'audio/ogg; codecs=opus'
}
this.mediaRecorder = new MediaRecorder(stream);
this.mediaRecorder.onstop = e => {
const audio = new Audio();
const blob = new Blob(this.chunks, { 'type': 'audio/wav' });
this.chunks.length = 0;
audio.src = window.URL.createObjectURL(blob);
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onloadend = (function () {
var base64data = reader.result;
var splited = base64data.substr(base64data.indexOf(',') + 1);
this.appservice.postAudio(splited).subscribe(res => {
console.log("MyBuffer: ", res);
})
}).bind(this);
audio.load();
audio.play();
};
this.mediaRecorder.ondataavailable = e => this.chunks.push(e.data);
};
Run Code Online (Sandbox Code Playgroud)
还有我的Node后端
post(req, res) {
var encoding = ["FLAC", "LINEAR16", "MULAW", "AMR", "AMR_WB", "OGG_OPUS", "SPEEX_WITH_HEADER_BYTE"];
var sampleRate = ["8000", "12000", "16000", "24000", "44100", "48000"];
encoding.forEach(elementencoding => {
sampleRate.forEach(elementrate => {
const projectId = 'myId';
const request = {
"config": {
"encoding": elementencoding,
"sampleRateHertz": elementrate,
"languageCode": "fr-FR"
},
"audio": {
"content": req.body.base64audio
}
};
const client = new speech.SpeechClient({
projectId: projectId,
});
// Detects speech in the audio file
client
.recognize(request)
.then(data => {
console.log("raw data:" + elementencoding + " - " + elementrate + " => ", data[0].results);
const response = data[0];
const transcription = response.results
.map(result => result.alternatives[0].transcript)
.join('\n');
})
.catch(err => {
console.error('ERROR:' + elementencoding + ' - ' + elementrate);
});
});
});
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出
ERROR:OGG_OPUS - 44100
ERROR:OGG_OPUS - 24000
ERROR:AMR_WB - 44100
ERROR:SPEEX_WITH_HEADER_BYTE - 24000
ERROR:OGG_OPUS - 8000
raw data:LINEAR16 - 48000 => []
raw data:LINEAR16 - 44100 => []
raw data:LINEAR16 - 12000 => []
raw data:LINEAR16 - 16000 => []
ERROR:SPEEX_WITH_HEADER_BYTE - 48000
ERROR:AMR_WB - 48000
ERROR:AMR - 24000
ERROR:OGG_OPUS - 12000
ERROR:AMR - 44100
ERROR:SPEEX_WITH_HEADER_BYTE - 8000
ERROR:SPEEX_WITH_HEADER_BYTE - 12000
ERROR:AMR_WB - 8000
ERROR:AMR_WB - 24000
ERROR:OGG_OPUS - 48000
raw data:LINEAR16 - 8000 => []
raw data:LINEAR16 - 24000 => []
raw data:MULAW - 48000 => []
ERROR:AMR - 48000
ERROR:AMR - 12000
ERROR:AMR - 16000
raw data:FLAC - 24000 => []
Run Code Online (Sandbox Code Playgroud)
谢谢任何对此有想法的人。
由于 Google 示例中的 audio.raw 可以正常工作,因此问题可能出在您使用的音频上。语音 API 对它接受的音频有点挑剔。(仅以 Mono 为例,请参阅本文)。语音 API 的故障排除部分描述了您遇到的问题,其中说明了为什么您会得到空响应。
我在这里测试了mozdevs MediaRecorder 示例来创建音频文件并将其传递给语音 API,并且该 API 似乎确实不喜欢 MediaRecorder 创建的格式。
您必须将音频转换为 FLAC 或 LINEAR16 等格式,才能让语音 API 对其进行解释。经过一番挖掘,我发现了这个 github 示例,并将生成的音频从该示例传递到语音 API,我从 API 获得了正确的文字记录。
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |