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);
}
3条答案
按热度按时间hpxqektj1#
我有一个解决方案,是工作良好,有语音识别和录音。下面是我创建的一个简单android项目的链接,展示了解决方案的工作情况。另外,我在项目中放置了一些打印屏幕来演示应用程序。
我要简单地解释一下我用的方法。我在那个项目中结合了两个特性:googlespeechapi和flac录音。
googlespeechapi是通过http连接调用的。mike pultz提供了有关api的更多详细信息:
“(…)新的[google]api是一个全双工流式api。这意味着,它实际上使用了两个http连接—一个post请求将内容作为“实时”分块流上载,另一个get请求访问结果,这对于较长的音频样本或流式音频更有意义。”
但是,这个api需要接收flac声音文件才能正常工作。这让我们进入第二部分:flac录音
我在那个项目中实现了flac录制,通过从一个名为audioboo的开源应用程序中提取和改编一些代码和库。audioboo使用本机代码录制和播放flac格式。
因此,可以录制flac声音,将其发送到googlespeechapi,获取文本,并播放刚刚录制的声音。
我创建的项目具有使其工作的基本原则,并且可以针对特定情况进行改进。为了使它在不同的场景中工作,有必要获得一个googlespeechapi密钥,该密钥是通过成为google chromium开发组的一部分获得的。我在那个项目中留下了一个键,只是为了显示它在工作,但我最终会删除它。如果有人需要更多的信息,让我知道,因为我不能在这个职位上放超过2个链接。
mdfafbf12#
据我所知,仍然没有办法直接发送一个音频剪辑到谷歌转录。然而,froyo(api级别8)引入了speechrecognizer类,它提供了对语音识别服务的直接访问。因此,例如,您可以开始播放音频片段,并让您的活动启动语音识别器在后台侦听,该识别器将在完成后将结果返回给用户定义的侦听器回调方法。
以下示例代码应该在活动中定义,因为speechrecognizer的方法必须在主应用程序线程中运行。此外,您还需要将录制音频权限添加到androidmanifest.xml中。
您还可以通过扩展recognitionservice来定义自己的语音识别服务,但这超出了此答案的范围:)
k97glaaz3#
不幸的是现在不是。android语音识别服务目前唯一支持的接口是
RecognizerIntent
,这不允许您提供自己的声音数据。如果这是您希望看到的内容,请在http://b.android.com. 这也与现有的4541号问题有着密切的关系。