33

我在 Android 上使用过语音识别功能,我喜欢它。这是我的客户最受赞誉的功能之一。但是,格式有些限制。您必须调用识别器意图,让它将录音发送到谷歌,然后等待文本返回。

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

有什么方法可以发送音频剪辑以将语音处理为文本?

4

3 回答 3

11

我得到了一个可以很好地进行语音识别和录音的解决方案。这是我创建的一个简单 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 个链接。

于 2014-04-17T21:22:31.270 回答
3

As far as I know there is still no way to directly send an audio clip to Google for transcription. However, Froyo (API level 8) introduced the SpeechRecognizer class, which provides direct access to the speech recognition service. So, for example, you can start playback of an audio clip and have your Activity start the speech recognizer listening in the background, which will return results after completion to a user-defined listener callback method.

The following sample code should be defined within an Activity since SpeechRecognizer's methods must be run in the main application thread. Also you will need to add the RECORD_AUDIO permission to your 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);
    }

You can also define your own speech recognition service by extending RecognitionService, but that is beyond the scope of this answer :)

于 2013-02-19T20:20:37.620 回答
3

不幸的是,此时不是。Android 的语音识别服务目前唯一支持的接口是RecognizerIntent,它不允许您提供自己的声音数据。

如果这是您希望看到的,请在http://b.android.com提交功能请求。这也与现有问题 4541切线相关。

于 2010-02-23T19:49:41.930 回答