我在 Android 上使用过语音识别功能,我很喜欢它。这是我的客户最受好评的功能之一。然而,格式有些限制。您必须调用识别器意图,让它将转录记录发送到谷歌,然后等待文本返回。
我的一些想法需要在我的应用程序中录制音频,然后将剪辑发送到谷歌进行转录。
有什么方法可以发送音频剪辑以进行语音转文本处理吗?
我得到了一个运行良好的解决方案,可以进行语音识别和录音。这是我创建的一个简单 Android 项目的链接,用于展示该解决方案的工作原理。另外,我在项目中放置了一些打印屏幕来说明该应用程序。
我将尝试简要解释我使用的方法。我在该项目中结合了两个功能:Google Speech API 和 Flac 录音。
Google Speech API 通过 HTTP 连接调用。 Mike Pultz 提供了有关 API 的更多详细信息:
“(...)新的 [Google] API 是一个全双工流 API。这意味着它实际上使用两个 HTTP 连接 - 一个 POST 请求将内容作为“实时”分块流上传,并且第二个 GET 请求来访问结果,这对于较长的音频样本或流音频更有意义。”
但是,该API需要接收FLAC声音文件才能正常工作。这让我们进入第二部分:Flac 录音
我通过从名为 AudioBoo 的开源应用程序中提取和改编一些代码和库,在该项目中实现了 Flac 录音。 AudioBoo 使用本机代码录制和播放 flac 格式。
因此,可以录制 flac 声音,将其发送到 Google Speech API,获取文本,然后播放刚刚录制的声音。
我创建的项目具有使其发挥作用的基本原则,并且可以针对特定情况进行改进。为了使其在不同的场景中工作,需要获得 Google Speech API 密钥,该密钥是通过加入 Google Chromium-dev 小组获得的。我在该项目中留下了一把钥匙只是为了表明它正在工作,但我最终会删除它。如果有人需要更多相关信息,请告诉我,因为我无法在这篇文章中放置超过 2 个链接。
不幸的是目前还没有。 Android 语音识别服务当前支持的唯一接口是
RecognizerIntent
,它不允许您提供自己的声音数据。
如果您希望看到此内容,请在 http://b.android.com 提交功能请求。这也与现有的 issue 4541 和 issue 36915103 有关。
据我所知,目前还没有办法直接将音频片段发送到Google进行转录。但是,Froyo(API 级别 8)引入了 SpeechRecognizer 类,该类提供对语音识别服务的直接访问。因此,例如,您可以开始播放音频剪辑,并让您的 Activity 启动在后台监听的语音识别器,这将在完成后将结果返回给用户定义的监听器回调方法。
以下示例代码应在 Activity 中定义,因为 SpeechRecognizer 的方法必须在主应用程序线程中运行。此外,您还需要将 RECORD_AUDIO 权限添加到 AndroidManifest.xml。
boolean available = SpeechRecognizer.isRecognitionAvailable(this);
if (available) {
SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this);
sr.setRecognitionListener(new RecognitionListener() {
@Override
public void onResults(Bundle results) {
// process results here
}
// define your other overloaded listener methods here
});
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
// the following appears to be a requirement, but can be a "dummy" value
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy");
// define any other intent extras you want
// start playback of audio clip here
// this will start the speech recognizer service in the background
// without starting a separate activity
sr.startListening(intent);
}
您还可以通过扩展 RecognitionService 来定义自己的语音识别服务,但这超出了本答案的范围:)