首页 > 解决方案 > 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包含a16BIT8BITmode,而RecognitionConfig.AudioEncoding只包含一个LINEAR16选项。虽然RecognitionConfig.AudioEncoding包含一个FLAC选项(推荐),FLAC但在离开AudioFormat.ENCODING_PCM_16BIT原地时打开似乎会中断流。

我如何让这一切一起工作,我最好的低带宽选择是什么?

标签: androidkotlingoogle-speech-api

解决方案


我无法使用 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); 

可能不适合您,但这是一个很好的起点。祝你好运!


推荐阅读