当前位置: 首页 > 知识库问答 >
问题:

录制/保存语音识别意图中的音频

景光赫
2023-03-14

我想保存/录制Google识别服务用于语音转文本操作的音频(使用识别意图或语音识别器)。

我经历了很多想法:

>

使用了媒体录制器:不工作。这破坏了语音识别。mic只允许一次操作

在执行语音到文本API复制临时音频文件之前,尝试查找识别服务在何处保存该文件,但未成功

我几乎绝望了,但我只是注意到Google Keep应用程序正在做我需要做的事情!我使用logcat调试了一点keep应用程序,该应用程序还调用“RecognizerIntent.ACTION\u RECOGNIZE\u SPEECH”(就像我们开发人员一样)来触发语音转换为文本。但是,keep是如何保存音频的?它可以是隐藏API吗?谷歌是否“作弊”?

共有3个答案

芮琛
2023-03-14

我从这里得到了这个答案,我检查了日期,发现它是在你发帖几天后发布的,所以我想你错过了。Android语音识别与录音同时进行

一个家伙说:

我有一个很好的解决方案来进行语音识别和录音。这里(https://github.com/katchsvartanian/voiceRecognition)是我创建的一个简单的Android项目的链接,以显示该解决方案的工作原理。此外,我在项目内部放置了一些打印屏幕来说明应用程序。

我将简要解释一下我使用的方法。我在该项目中结合了两个功能:谷歌语音API和Flac录音。

Google Speech API是通过HTTP连接调用的。Mike Pultz提供了有关API的更多详细信息:

“(……)新的[谷歌]API是一种全双工流式API。这意味着,它实际上使用了两个HTTP连接—一个POST请求将内容上传为“实时”分块流,另一个GET请求访问结果,这对于更长的音频样本或流式音频更有意义。“”

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

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

因此,可以录制flac声音,将其发送到Google语音API,获取文本,然后播放刚刚录制的声音。

我创建的项目具有使其工作的基本原则,并且可以针对特定情况进行改进。为了让它在不同的场景中工作,有必要获得一个Google语音API密钥,该密钥是通过加入Google Chromium开发组获得的。我在那个项目中留下了一把钥匙,只是为了表明它正在工作,但我最终会删除它。如果有人需要更多信息,请告诉我,因为我无法在这篇文章中放置超过2个链接。

詹斌蔚
2023-03-14

上次我检查时,Google保留了这些额外设置:

  • android。演讲额外的GET\u AUDIO\u格式:音频/AMR

这些没有作为Android留档的一部分记录下来,所以它们不构成Android应用编程接口。此外,谷歌保留不依赖识别器意图来考虑这些附加功能。如果谷歌普及和记录这些附加功能,那当然很好。

要想知道Google Keep在调用RecognizerIntent时设置了哪些额外功能,请实现一个响应RecognizerIntent的应用程序,并打印出它收到的所有额外功能。您还可以安装Kõnele(http://kaljurand.github.io/K6nele/),它是RecognizerIntent的一个实现。当Google Keep推出Kõnele时,长按扳手形状的设置图标。这显示了有关调用方的一些技术细节,还包括传入的额外内容。

@Iftah的回答解释了Google Keep是如何将录音返回给RecognitiverIntent的调用者的。

萧自珍
2023-03-14

@卡雷尔的回答几乎是完整的-产生的音频是意图。getData()并可以使用内容解析器读取

不幸的是,返回的AMR文件质量很低——我无法找到获得高质量录音的方法。我尝试过的除“音频/AMR”之外的任何值在intent.getData()中都返回null。

如果你找到一种方法来获得高质量的录音-请评论或添加答案!

public void startSpeechRecognition() {
   // Fire an intent to start the speech recognition activity.
   Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
   // secret parameters that when added provide audio url in the result
   intent.putExtra("android.speech.extra.GET_AUDIO_FORMAT", "audio/AMR");
   intent.putExtra("android.speech.extra.GET_AUDIO", true);

   startActivityForResult(intent, "<some code you choose>");
}

// handle result of speech recognition
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // the resulting text is in the getExtras:
    Bundle bundle = data.getExtras();
    ArrayList<String> matches = bundle.getStringArrayList(RecognizerIntent.EXTRA_RESULTS)
    // the recording url is in getData:
    Uri audioUri = data.getData();
    ContentResolver contentResolver = getContentResolver();
    InputStream filestream = contentResolver.openInputStream(audioUri);
    // TODO: read audio file from inputstream
}
 类似资料:
  • 我在设计一个可以同时录制语音和将语音转换为文本的应用程序时遇到了这个bug。我使用Google API进行语音识别部分,并使用audioRecorder对象进行录音。它没有成功,因此我转而使用onBufferReceived()来检索过程中的字节(当用户说话时)。Google API代码现在是我代码的onResults()部分,它可以在没有UI的情况下进行语音识别。 这是代码

  • 我正在开发一个语音识别应用程序,用户会在其中说一句话或任何东西,然后将其转换为文本......(语音到文本的转换通过谷歌进行) 我的问题是,,,当这个人说话时,保存或记录他的声音(语音)的文件/缓冲区在哪里?(在谷歌收购并转换之前) 并且是否可以持有此文件或缓冲区?

  • 我正在开发一个功能,当按下一个按钮时,它将启动语音识别,同时将记录用户所说的话。代码如下: 我一步一步地制作了这个应用程序,起初这个应用程序没有录音功能,语音识别效果非常好。 在我多次测试并认为语音识别正常后,我开始使用合并录音功能。 然后,我进行了测试,一旦按下按钮\u start,甚至在我试图说话之前,就会立即出现ERROR3音频信息。 我播放录音。语音也被正确记录和保存。 发生什么事了?为什

  • 由于连接到不同的API,我目前正在开发一个工具,允许我阅读所有的通知。 它工作得很好,但现在我想用一些声音命令来做一些动作。 就像当软件说“一封来自Bob的邮件”时,我想说“阅读”或“存档”。 我的软件是通过一个节点服务器运行的,目前我没有任何浏览器实现,但它可以是一个计划。 在NodeJS中,启用语音到文本的最佳方式是什么? 我在它上面看到了很多线程,但主要是使用浏览器,如果可能的话,我希望在一

  • 语音识别是以语音为研究对象,通过语音信号处理和模式识别让机器自动识别和理解人类口述的语言。语音识别技术就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令的高技术。语音识别是一门涉及面很广的交叉学科,它与声学、语音学、语言学、信息理论、模式识别理论以及神经生物学等学科都有非常密切的关系。语音识别技术正逐步成为计算机信息处理技术中的关键技术,语音技术的应用已经成为一个具有竞争性的新兴高技术产

  • 识别简单的语句。