C# 使用Google语音到文本API在web应用程序中从麦克风捕获实时音频
我有一个带有语音输入表单的C#MVC web应用程序。我的意思是用户可以通过麦克风使用语音在文本框中输入值。我决定使用API来实现这一点。但我对使用谷歌语音到文本API来实现这一点有些怀疑C# 使用Google语音到文本API在web应用程序中从麦克风捕获实时音频,c#,asp.net-mvc,google-cloud-platform,speech-recognition,speech-to-text,C#,Asp.net Mvc,Google Cloud Platform,Speech Recognition,Speech To Text,我有一个带有语音输入表单的C#MVC web应用程序。我的意思是用户可以通过麦克风使用语音在文本框中输入值。我决定使用API来实现这一点。但我对使用谷歌语音到文本API来实现这一点有些怀疑 因为我试图在MVC Web应用程序中实现这一点,所以无法从服务器端代码访问mic设备。我想将语音转换成实时音频,并将输出文本显示到网页。解决此问题的一个方法是使用 您可以按照此操作来获取麦克风输入,还可以很好地解释如何使用WebSocket处理麦克风输入 以下是解释该概念的唯一sudo代码 它也大大简化了,因
因为我试图在MVC Web应用程序中实现这一点,所以无法从服务器端代码访问mic设备。我想将语音转换成实时音频,并将输出文本显示到网页。解决此问题的一个方法是使用 您可以按照此操作来获取麦克风输入,还可以很好地解释如何使用WebSocket处理麦克风输入 以下是解释该概念的唯一sudo代码强> 它也大大简化了,因为我不知道,例如,谷歌的API是否能够处理这样一个事实:你总是只发送语音输入的片段,等等。正如我所说,代码只给出了基本过程的大致概述,如果服务器离线,则没有逻辑等等 但是在
函数进程\u麦克风\u缓冲区(事件)
函数内部,您可以调用信号器
所以函数应该是这样的
function process_microphone_buffer(event) {
// you should handle this as a singelton
const connection = new signalR.HubConnectionBuilder().withUrl("/speechToTextHub ").build();
const microphone_output_buffer = event.inputBuffer.getChannelData(0);
connection.invoke("SendMicrophoneBuffer", microphone_output_buffer).catch(function (err) {
return console.error(err.toString());
});
}
在您的服务器上,您可以实现相应的集线器:
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
namespace SignalRChat.Hubs
{
public class SpeechToTextHub : Hub
{
public async Task SendMicrophoneBuffer(byte[] buffer)
{
var googleApi = new GoogleApi();
var speechToTextResult = await googleApi.GetTextFromSpeechAsync(buffer);
Context.Clients.Client(Context.ConnectionId).SendAsync("SpeechToTextResult", speechToTextResult);
}
}
}
在你的客户身上你有这样的东西
connection.on("SpeechToTextResult", function (textResult) {
console.log(textResult);
});
如果答案对于Stackoverflow来说过于笼统,我也可以删除它。
如果仍然有未解决的问题,我可以相应地扩展我的答案。解决此问题的一个方法是使用 您可以按照此操作来获取麦克风输入,还可以很好地解释如何使用WebSocket处理麦克风输入 以下是解释该概念的唯一sudo代码强> 它也大大简化了,因为我不知道,例如,谷歌的API是否能够处理这样一个事实:你总是只发送语音输入的片段,等等。正如我所说,代码只给出了基本过程的大致概述,如果服务器离线,则没有逻辑等等 但是在
函数进程\u麦克风\u缓冲区(事件)
函数内部,您可以调用信号器
所以函数应该是这样的
function process_microphone_buffer(event) {
// you should handle this as a singelton
const connection = new signalR.HubConnectionBuilder().withUrl("/speechToTextHub ").build();
const microphone_output_buffer = event.inputBuffer.getChannelData(0);
connection.invoke("SendMicrophoneBuffer", microphone_output_buffer).catch(function (err) {
return console.error(err.toString());
});
}
在您的服务器上,您可以实现相应的集线器:
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
namespace SignalRChat.Hubs
{
public class SpeechToTextHub : Hub
{
public async Task SendMicrophoneBuffer(byte[] buffer)
{
var googleApi = new GoogleApi();
var speechToTextResult = await googleApi.GetTextFromSpeechAsync(buffer);
Context.Clients.Client(Context.ConnectionId).SendAsync("SpeechToTextResult", speechToTextResult);
}
}
}
在你的客户身上你有这样的东西
connection.on("SpeechToTextResult", function (textResult) {
console.log(textResult);
});
如果答案对于Stackoverflow来说过于笼统,我也可以删除它。
如果仍有未解决的问题,我可以相应地扩展我的答案。您可以使用Signar将输入发送到服务器,调用Google API并将结果推回到客户端。@Darem非常感谢您的回答。你能推荐一些示例代码吗?这是微软官方网页上的。这是一个简单的聊天应用程序。但您可以将字符串输入替换为麦克风(字节)输入,并将其发送到后端。我希望这对你有帮助?你好@Darem,你能把你的评论作为一个答案发表吗?这样其他人就可以看到它了?@Alejandro我添加了我的评论作为一个anwser。你可以使用Signer将输入发送到你的服务器,调用Google API并将结果推回到客户端。@Darem非常感谢你的回复。你能推荐一些示例代码吗?这是微软官方网页上的。这是一个简单的聊天应用程序。但您可以将字符串输入替换为麦克风(字节)输入,并将其发送到后端。我希望这能对你有所帮助?你好@Darem,你能把你的评论作为一个答案发布出来,这样其他人就更容易看到了吗?@Alejandro我把我的评论添加为anwser。