从自己的声音文件语音到文本

Posted

技术标签:

【中文标题】从自己的声音文件语音到文本【英文标题】:Speech to Text from own sound file 【发布时间】:2011-10-22 19:55:11 【问题描述】:

您可能知道,使用 android API 实现语音到文本非常容易。您所要做的就是调用 API 的意图,它会为您返回文本。我的情况有点不同,我有一个预先录制的 3GPP 声音文件,我从用户那里录制并保存在 SD 卡上。我想知道是否可以像任何其他语音识别一样将其转录成文本。语音转文本 API 是否允许上传您自己的声音文件以进行处理?或者这是不可能的?

【问题讨论】:

【参考方案1】:

API 不允许这样做,但请参阅this blog post and its comments 了解潜在的解决方法。还要确保您的文件包含高质量的音频(至少 16 位和 16 kHz)以获得更好的转录。

另见:

Voice recognition on android with recorded sound clip?

【讨论】:

嗯,那篇文章确实证明它向服务器发送了一个声音文件并等待 JSON 返回。所以我想您在客户端需要做的就是将 3GPP 文件转换为 FLAC 并将其发布到服务器。希望就这么简单。 :) 此解决方法答案不再起作用。它依赖于 Google Speech v1 API,该 API 现在已被 Google 关闭。 Speech v2 API 需要一个密钥,根据我的经验,它变得不可预测(我认为应用程序每天可以发出的外部请求数量是有限的)【参考方案2】:

我得到了一个很好的解决方案,可以将声音文件中的语音转换为文本。这是我创建的一个简单 Android 项目的link,以显示解决方案的工作原理。另外,我在项目中放置了一些打印屏幕来说明应用程序。

我将尝试简要解释我使用的方法。我在该项目中结合了两个功能:Google Speech API 和 Flac 录音。

通过 HTTP 连接调用 Google Speech API。 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 个链接。

【讨论】:

我安装了 NDK,修复了很多路径和导入,但是你建议的项目不起作用。我不会仅仅因为现在整个事情都可能被弃用而投反对票......【参考方案3】:

目前无法将您自己的音频文件发送给 Google 进行处理,但您可以使用您的 Android 设备中的扬声器和麦克风将您的音频文件用作 Google 语音识别的输入。

首先,您的 SD 卡中必须有一个音频文件,然后使用以下步骤:

1) 使用您希望的任何名称创建方法

2) 在该方法中首先编写使用谷歌语音识别的代码

3) 在该代码之后编写使用扬声器播放音频文件的代码,然后将其作为谷歌语音识别的输入

 //code for google voice recognition
 Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
 intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
 intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
                        getString(R.string.speech_prompt));
 try 
      startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
  catch (ActivityNotFoundException a) 
 Toast.makeText(getApplicationContext(),
                            getString(R.string.speech_not_supported),
                            Toast.LENGTH_SHORT).show();

//code for playing the audio file which you wish to give as an input
    MediaPlayer mp = new MediaPlayer();
    try 
     mp.setDataSource(file); // here file is the location of the audio file you wish to use an input
        mp.prepare();
        mp.start();
     catch (Exception e) 
        e.printStackTrace();
    

参考我的博客 https://sureshkumarask.wordpress.com/2017/03/19/how-to-give-our-own-audio-file-as-an-input-to-any-speech-recognizer/

我已在我的博客中附上了 java 文件的链接。

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效 对不起,我已经解释清楚并提供了您所指的链接。谢谢你的评论..

以上是关于从自己的声音文件语音到文本的主要内容,如果未能解决你的问题,请参考以下文章

Android:在通话/SIP 期间播放声音文件或文本转语音

VC++基于微软语音引擎开发语音识别总结

从香蕉网下的CSS杀人语音提示怎么用

系统.语音和声音

使用腾讯语音合成技术生成有声书

有没有一款可以自己输入文字内容,随后可以转换成语音