我已经在c#控制台API中实现了Google Cloud Speech API。现在,我想在HTML页面上实现相同的功能。以下是我遵循的步骤:
mediaRecorder.ondataavailable = function (e) {
chunks.push(e.data);
var blob = new Blob(chunks, { 'type': 'audio/wav; codecs=0' });
var fd = new FormData();
fd.append('fname', 'test.wav');
//fd.append('data', chunks[0]);
fd.append('data', blob);
$.ajax({
type: 'POST',
url: APIUrl,
data: fd,
processData: false,
contentType: false
}).done(function (data) {
console.log(data);
});
string text = "";
var speech = SpeechClient.Create();
var response = speech.Recognize(new RecognitionConfig()
{
Encoding = RecognitionConfig.Types.AudioEncoding.OggOpus,
SampleRateHertz = 48000,
LanguageCode = "en",
}, RecognitionAudio.FromStream(HttpContext.Current.Request.Files[0].InputStream));
foreach (var result in response.Results)
{
foreach (var alternative in result.Alternatives)
{
text = alternative.Transcript;
}
}
我尝试了Encoding和Hertz的不同组合。但是没有办法。我也尝试过先将音频以WAV格式保存在本地驱动器上,然后从本地文件读取响应。但这也不起作用。
您未以您认为的录制格式进行录制。
opus
容器中支持编解码器WebM
。opus
容器中支持编解码器Ogg
。 这可以通过在相应浏览器的JS控制台中运行以下代码片段来快速验证。根据支持,您会看到True
或False
。
MediaRecorder.isTypeSupported('audio/webm;codecs=opus')
MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')
Google Cloud Speech API支持Opus,但仅在Ogg
容器中。如果您在Firefox中运行代码并尝试使用Speech API进行输出,则应该可以。
要使其与Chrome一起使用,您需要在服务器端的Ogg容器中重新混合该文件,然后再将其发送到Cloud Speech API。
您可以使用ffmpeg这样做
ffmpeg -i file_chrome.wav -acodec复制资源/file.oga
请注意,这是重新复用,而不是重新编码过程。您只是将相同的数据复制到另一个容器中。
Bonus Tip:如果您使用的是Linux / Mac,则可以使用file <file_name>
命令检查输出文件类型。 Chrome文件将显示为WebM
,而Firefox输出将显示为Ogg data, Opus audio
。