android - Google Speech API 的最低可通过音频质量(以及如何设置)
问题描述
我正在使用语音 API,并希望能够为低带宽环境配置服务。
我注意到示例代码中的两个位置配置了音频质量设置:
首先在 AudioEmitter.kt
fun start(
encoding: Int = AudioFormat.ENCODING_PCM_16BIT,
channel: Int = AudioFormat.CHANNEL_IN_MONO,
sampleRate: Int = 16000,
subscriber: (ByteString) -> Unit
)
然后在 MainActivity.kt
if (isFirstRequest.getAndSet(false)) {
builder.streamingConfig = StreamingRecognitionConfig.newBuilder()
.setConfig(RecognitionConfig.newBuilder()
.setLanguageCode("en-US")
.setEncoding(RecognitionConfig.AudioEncoding.LINEAR16)
.setSampleRateHertz(16000)
.build())
.setInterimResults(true)
.setSingleUtterance(false)
.build()
}
我有两个问题:
首先,语音 API 的最低推荐音频质量是多少?谷歌是否对不同的设置进行过研究?
其次,这两个样本设置了不同对象的质量,这些对象不一定对齐。例如,同时AudioFormat
包含a16BIT
和8BIT
mode,而RecognitionConfig.AudioEncoding
只包含一个LINEAR16
选项。虽然RecognitionConfig.AudioEncoding
包含一个FLAC
选项(推荐),FLAC
但在离开AudioFormat.ENCODING_PCM_16BIT
原地时打开似乎会中断流。
我如何让这一切一起工作,我最好的低带宽选择是什么?
解决方案
我无法使用 Google Speech API 为您提供帮助,但我使用 android 应用程序录制语音以用于科学分析,在我们的测试中,我们发现您可以在令人惊讶的低设置下进行录制,而不会失去对语音进行复杂分析的能力记录。这是我们已经确定的最小带宽但仍然可行的内容:
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setAudioChannels(1);
mediaRecorder.setAudioSamplingRate(8000);
mediaRecorder.setAudioEncodingBitRate(64000);
可能不适合您,但这是一个很好的起点。祝你好运!
推荐阅读
- android - 没有 Google Play 的 Android 动态交付
- java - 在抽象方法的覆盖中返回返回对象的子类
- swift - Swift Realm 删除对象错误-写入事务
- r - 如何在 R 中获取维基百科示例中逻辑回归模拟的 ggplot 图?
- javascript - Angular:视图表单中的 If / else 语句
- c++ - 类对数据结构的意义
- java - java - 如何在java Swing应用程序中将mysql本地数据库同步到在线(主机)数据库?
- kdb - 匹配连续条件的行的 KDB/Q 查询?
- ruby-on-rails - 在 Rails 中使用 ajax 时,注释部分无法正常工作
- qtp - 描述性编程不适用于 Webbutton 的不同机器