当前位置: 首页 > 知识库问答 >
问题:

是否可以向Bing语音识别发送实时数据?

庄智
2023-03-14

我正在编写一个应用程序,它应该接收音频并将其发送到Bing识别API以获取文本。我使用了服务库,它可以使用wav文件。因此,我编写了自己的流类来从麦克风或网络(RTP)接收音频,并将其发送到识别API。当我在音频流前面添加WAV头时,它会工作几秒钟。

调试表明,识别api读取表单流的速度比音频源(16k samplerate,16位,mono)填充的速度快。

所以我的问题是:有没有办法将识别api与实时(连续)音频流一起使用?

我知道有一个麦克风客户端的例子,但它只适用于麦克风,我需要它用于不同的源。

共有3个答案

龙晟睿
2023-03-14

添加有关此主题的其他支持信息:流实现必须支持并发读/写操作,并在没有数据时阻塞。

邢承弼
2023-03-14

如果您想使用麦克风以外的源,您可以通过调用Speech认可服务工厂CreateDataClient方法来使用Data认可客户端类。一旦您有了客户端对象,您就可以从任何来源获取音频——麦克风、网络、从文件中读取等——并将其发送给客户端的SendAudio方法进行处理。当您收到每个音频缓冲区时,您会对SendAudio进行新调用。

当您使用SendAudio发送音频时,您将以客户端的OnPartialResponse事件的形式实时(或关闭)收到部分识别结果。

发送完音频后,您通过调用EndAudio向客户端发出信号,表示您已准备好获得最终识别结果。然后,您应该会收到来自客户端的包含最终识别假设的On响应接收事件。

赫连飞沉
2023-03-14

我找到了解决问题的办法。我编写了一个从流继承的类,该类缓冲输入,并在调用Read方法时等待,其缓冲区为空。这可以防止识别器停止,因为read方法始终返回一个值

public class AudioStream : Stream {
private AutoResetEvent _waitEvent = new AutoResetEvent(false);

internal void AddData(byte[] buffer, int count) {
    _buffer.Add(buffer, count);
    // Enable Read
    _waitEvent.Set();
}
public override int Read(byte[] buffer, int offset, int count) {
    int readCount = 0;
    if ((_buffer.Empty) {
        // Wait for input
        _waitEvent.WaitOne();
    }
    ......
    // Fill buffer from _buffer;

    _waitEvent.Reset();
    return length;
}
protected override void Dispose(bool disposing) {
    // Make sure, that there is no waiting Read
    // Clear buffer, dispose wait event etc.
}
......

}

由于音频数据是连续接收的,因此读取方法的“挂起”时间不会超过几毫秒(例如,RTP包的接收时间为20毫秒)。

 类似资料:
  • 我正在开发一个用于实时翻译的Python应用程序。我需要实时识别语音:当用户说话时,它会自动将这段音频发送到谷歌语音API并返回文本。因此,我希望在说话时立即显示已识别的文本。 我发现了流式语音识别,但似乎我仍然需要先录制完整的语音,然后将其发送到服务器。此外,没有关于如何在Python中使用它的示例 是否可以使用Google Speech API执行此操作?

  • A.我正在努力实现的目标。 允许在网络浏览器内进行实时语音识别的网络应用程序(像这样)。 B.我目前正在考虑使用的技术来实现A。 JavaScript 节点。js WebRTC 微软语音API或Pocketsphinx。js或其他东西(不能使用Web语音API) C.非常基本的工作流程 Web浏览器建立到节点服务器的连接(服务器充当信令服务器,还提供静态文件) D.问题 将节点。js是否适合实现C

  • 当我单击下一页时,它显示错误。当我在没有的情况下运行查询时,分页效果很好。任何解决这个问题的建议都是很好的。 这是整个分页代码: 单击next按钮时,它无法获得和。 如何将数据发送到搜索的第2页?

  • 问题内容: 是否可以从数组向JavaScript函数发送可变数量的参数? 我最近写了很多Python,能够接受并发送varargs是一个很棒的模式。例如 是否有可能在JavaScript发送待处理数组 作为 参数数组? 问题答案: 更新 :从ES6开始,您可以在调用函数时简单地使用 传播语法 : 由于ES6还希望将参数视为数组,因此还可以在参数列表中使用传播语法,例如: 并且可以将其与常规参数结合

  • 由于连接到不同的API,我目前正在开发一个工具,允许我阅读所有的通知。 它工作得很好,但现在我想用一些声音命令来做一些动作。 就像当软件说“一封来自Bob的邮件”时,我想说“阅读”或“存档”。 我的软件是通过一个节点服务器运行的,目前我没有任何浏览器实现,但它可以是一个计划。 在NodeJS中,启用语音到文本的最佳方式是什么? 我在它上面看到了很多线程,但主要是使用浏览器,如果可能的话,我希望在一

  • 语音识别是以语音为研究对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语言。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术。语音识别是一门涉及面很广的交叉学科,它与声学、语音学、语言学、信息理论、模式识别理论以及神经生物学等学科都有非常密切的关系。语音识别技术正逐步成为计算机信息处理技术中的关键技术,语音技术的应用已经成为一个具有竞争性的新兴高技术产