在录制声音剪辑的Android上的语音识别?

我使用Android上的语音识别function,我喜欢它。 这是我的客户最受称赞的function之一。 但是,格式有些限制。 你必须调用识别器的意图,让它把录音发送到谷歌,并等待文本回来。

我的一些想法将需要在我的应用程序中录制audio,然后将剪辑发送到谷歌进行转录。

有没有什么办法可以发送一个audio片段来处理语音文本?

我有一个解决scheme,运行良好,有语音识别和录音。 这里是我创build的一个简单的Android项目的链接 ,以显示解决scheme的工作。 此外,我把一些打印屏幕内的项目来说明应用程序。

我会尝试简单地解释我使用的方法。 我在该项目中结合了两个function:Google Speech API和Flac录制。

Google Speech API通过HTTP连接进行调用。 Mike Pultz提供了关于API的更多细节:

“(…)新的[Google] API是一个全双工stream媒体API,这意味着它实际上使用两个HTTP连接 – 一个POST请求将内容上传为”实时“分块stream,第二个GET请求来访问结果,这对于更长的audio采样或者stream式audio更为合理。“

但是,这个API需要接收一个FLAC声音文件才能正常工作。 这让我们进入第二部分:Flac录音

我通过从一个名为AudioBoo的开源应用程序中提取和修改一些代码和库来实现Flac录制。 AudioBoo使用本地代码来logging和播放flac格式。

因此,您可以录制一个flac声音,将其发送到Google Speech API,获取文本,并播放刚录制的声音。

我创build的项目具有使其工作的基本原则,并可针对特定情况进行改进。 为了使它在不同的情况下工作,有必要获得谷歌语音API密钥,这是由谷歌铬开发组的一部分获得。 我在该项目中留下了一把钥匙,以显示它正在工作,但我最终将删除它。 如果有人需要更多关于它的信息,让我知道原因,我不能在这篇文章中超过2个链接。

不幸的是目前还没有。 Android的语音识别服务目前唯一支持的界面是RecognizerIntent ,它不允许您提供自己的声音数据。

如果这是您想要查看的内容,请在http://b.android.com上提交function请求。; 这也与现存的4541问题相关。

据我所知,还没有办法直接发送audio剪辑给谷歌转录。 但是,Froyo(API等级8)引入了SpeechRecognizer类,它提供了对语音识别服务的直接访问。 因此,例如,您可以开始播放audio剪辑,让您的Activity启动在后台侦听的语音识别器,这会在完成后将结果返回给用户定义的侦听器callback方法。

以下示例代码应在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); }
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来定义你自己的语音识别服务,但这超出了这个答案的范围:)