用录制的声音片段在android上进行语音识别?

ffscu2ro  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(465)

我在android上使用过语音识别功能,我喜欢它。这是我的客户最称赞的功能之一。但是,格式有些限制。你必须调用识别器intent,让它将录音发送到google,然后等待文本返回。
我的一些想法需要在我的应用程序中录制音频,然后将剪辑发送到谷歌进行转录。
有没有什么办法我可以发送一个音频剪辑处理语音到文本?

hpxqektj

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个链接。

mdfafbf1

mdfafbf12#

据我所知,仍然没有办法直接发送一个音频剪辑到谷歌转录。然而,froyo(api级别8)引入了speechrecognizer类,它提供了对语音识别服务的直接访问。因此,例如,您可以开始播放音频片段,并让您的活动启动语音识别器在后台侦听,该识别器将在完成后将结果返回给用户定义的侦听器回调方法。
以下示例代码应该在活动中定义,因为speechrecognizer的方法必须在主应用程序线程中运行。此外,您还需要将录制音频权限添加到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来定义自己的语音识别服务,但这超出了此答案的范围:)

k97glaaz

k97glaaz3#

不幸的是现在不是。android语音识别服务目前唯一支持的接口是 RecognizerIntent ,这不允许您提供自己的声音数据。
如果这是您希望看到的内容,请在http://b.android.com. 这也与现有的4541号问题有着密切的关系。

相关问题