我正在使用Speech 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的最低建议音频质量是多少? Google对不同的设置做了研究吗?
第二,这两个样本使用不一定排成一行的不同对象设置质量。例如,AudioFormat
同时包含16BIT
和8BIT
模式,而RecognitionConfig.AudioEncoding
仅包含LINEAR16
选项。虽然RecognitionConfig.AudioEncoding
包含一个FLAC
选项(建议),但在将FLAC
留在原处的同时打开AudioFormat.ENCODING_PCM_16BIT
似乎会中断数据流。
如何使所有这些协同工作,我最好的低带宽选项是什么?
答案 0 :(得分:1)
我无法为您提供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);
对于您来说可能并不完美,但它是一个不错的起点。祝你好运!