Google HTML 页面上的云语音 API
Google Cloud Speech API on HTML page
我已经在 c# 控制台 API 中实现了 Google 云语音 API。现在我想在 HTML 页面上实现相同的功能。以下是我遵循的步骤:
- 使用媒体录音机在 HTML 页面上捕获语音 post 与 WEB 相同 API:
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);
});
- 在网络上API我正在使用Google云语音识别。但幸运的是,它 returns 没有响应。 google Audio.raw 提供的测试文件使用相同的代码工作正常。但是从网页发送的任何音频都没有提供任何结果。
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;
}
}
我尝试了编码和赫兹的不同组合。但是 none 有效。我还尝试先将音频以 WAV 格式保存在本地驱动器上,然后从本地文件读取响应。但它也不起作用。
您没有按照您认为的格式进行录制。
- Chrome 中的 MediaRecorder 仅支持
WebM
容器中的编解码器 opus
。
- Firefox 中的 MediaRecorder 但是在
Ogg
容器中支持编解码器 opus
。
这可以通过 运行 在各自浏览器的 JS 控制台中输入以下代码片段来快速验证。根据支持度,您将看到 True
或 False
。
MediaRecorder.isTypeSupported('audio/webm;codecs=opus')
MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')
Google Cloud Speech API 支持 Opus 但仅在 Ogg
容器中。如果您 运行 在 Firefox 中使用相同的代码,带有语音 API 的输出应该可以工作。
为了与 Chrome 一起使用,您需要在服务器端的 Ogg 容器中重新混合文件,然后再将其发送到 Cloud Speech API。
你可以使用 ffmpeg 来做到这一点
ffmpeg -i file_chrome.wav -acodec copy resources/file.oga
请注意,这是一个重新 mux 而不是重新编码的过程。您只是在不同的容器中复制相同的数据。
额外提示:如果您使用 Linux/Mac,您可以使用 file <file_name>
命令检查输出文件类型。 Chrome 文件将显示为 WebM
而 Firefox 输出将显示为 Ogg data, Opus audio
.
我已经在 c# 控制台 API 中实现了 Google 云语音 API。现在我想在 HTML 页面上实现相同的功能。以下是我遵循的步骤:
- 使用媒体录音机在 HTML 页面上捕获语音 post 与 WEB 相同 API:
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);
});
- 在网络上API我正在使用Google云语音识别。但幸运的是,它 returns 没有响应。 google Audio.raw 提供的测试文件使用相同的代码工作正常。但是从网页发送的任何音频都没有提供任何结果。
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;
}
}
我尝试了编码和赫兹的不同组合。但是 none 有效。我还尝试先将音频以 WAV 格式保存在本地驱动器上,然后从本地文件读取响应。但它也不起作用。
您没有按照您认为的格式进行录制。
- Chrome 中的 MediaRecorder 仅支持
WebM
容器中的编解码器opus
。 - Firefox 中的 MediaRecorder 但是在
Ogg
容器中支持编解码器opus
。
这可以通过 运行 在各自浏览器的 JS 控制台中输入以下代码片段来快速验证。根据支持度,您将看到 True
或 False
。
MediaRecorder.isTypeSupported('audio/webm;codecs=opus')
MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')
Google Cloud Speech API 支持 Opus 但仅在 Ogg
容器中。如果您 运行 在 Firefox 中使用相同的代码,带有语音 API 的输出应该可以工作。
为了与 Chrome 一起使用,您需要在服务器端的 Ogg 容器中重新混合文件,然后再将其发送到 Cloud Speech API。
你可以使用 ffmpeg 来做到这一点
ffmpeg -i file_chrome.wav -acodec copy resources/file.oga
请注意,这是一个重新 mux 而不是重新编码的过程。您只是在不同的容器中复制相同的数据。
额外提示:如果您使用 Linux/Mac,您可以使用 file <file_name>
命令检查输出文件类型。 Chrome 文件将显示为 WebM
而 Firefox 输出将显示为 Ogg data, Opus audio
.