首页 文章

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

提问于
浏览
31

我在Android上使用了语音识别功能,我喜欢它 . 这是我的客户最受好评的功能之一 . 但是,格式有些限制 . 你必须调用识别器意图,让它将转录的录音发送到谷歌,并等待文本回来 .

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

有没有什么方法可以发送音频剪辑进行语音处理?

3 回答

  • 3

    我找到了一个能够很好地进行语音识别和录音的解决方案 . 这是我创建的一个简单的Android项目的link,以显示解决方案的工作原理 . 此外,我在项目中放置了一些打印屏幕来说明应用程序 .

    我将尝试简要解释我使用的方法 . 我在该项目中结合了两个功能: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个链接 .

  • 10

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

    如果这是您想要查看的内容,请在http://b.android.com提交功能请求 . 这也与现有的issue 4541相关 .

  • 1

    据我所知,仍无法直接向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来定义自己的语音识别服务,但这超出了本答案的范围:)

相关问题