将 FLAC 或 AMR_WB 中的音频流式传输到 Google Speech API
Posted
技术标签:
【中文标题】将 FLAC 或 AMR_WB 中的音频流式传输到 Google Speech API【英文标题】:Streaming Audio in FLAC or AMR_WB to the Google Speech API 【发布时间】:2019-03-11 12:58:46 【问题描述】:我需要在带宽较低的环境中运行 google Speech api。
根据阅读有关最佳实践的信息,似乎我最好的选择是使用 AMR_WB 格式。
但是,以下代码不会产生异常,我在 onError(t: Throwable)
方法中没有得到任何响应,但 API 在 onNext(value: StreamingRecognizeResponse)
方法中根本没有返回任何值。
如果我将.setEncoding()
中的格式从FLAC
或AMR_WB
更改回LINEAR16
,一切正常。
AudioEmitter.kt
fun start(
encoding: Int = AudioFormat.ENCODING_PCM_16BIT,
channel: Int = AudioFormat.CHANNEL_IN_MONO,
sampleRate: Int = 16000,
subscriber: (ByteString) -> Unit
)
MainActivity.kt
builder.streamingConfig = StreamingRecognitionConfig.newBuilder()
.setConfig(RecognitionConfig.newBuilder()
.setLanguageCode("en-US")
.setEncoding(RecognitionConfig.AudioEncoding.AMR_WB)
.setSampleRateHertz(16000)
.build())
.setInterimResults(true)
.setSingleUtterance(false)
.build()
【问题讨论】:
我认为问题可能来自您的sampleRate
或AudioEmitter
。当流识别中的编码类型为FLAC
时,尝试设置为44100、22050或11025。
也许你可以按照这个官方的故障排除程序? cloud.google.com/speech-to-text/docs/support#troubleshooting 定义问题的来源。
@aminography 我弄乱了这些设置,不幸的是它没有帮助。
@Bsquare 看了很多遍。已经尝试了我能找到的所有可能的设置组合,但仍然没有运气。看起来无论是在这里还是在云演讲论坛上,团队都完全脱离了参与。
您是否尝试将声音文件转换为 FLAC 或其他格式,只是为了检查它是否是您问题的关键?
【参考方案1】:
Google 不会识别你的数据,因为你告诉它数据是 FLAC 或 AMR_WB 格式,而你一直传递 AudioRecord.read()
的原始未压缩音频块产生。
现在,为了让它发挥作用,您有两个选择。首先是自己将数据转换为所需的格式,可能使用一些第三方库。第二种是使用 android 库中的 MediaRecorder。不幸的是,它只支持写入类似文件的目标,因此您不能简单地用它替换 AudioRecorder,但this answer 中描述了一种解决方法。
【讨论】:
以上是关于将 FLAC 或 AMR_WB 中的音频流式传输到 Google Speech API的主要内容,如果未能解决你的问题,请参考以下文章
如何通过套接字或框架将音频从 iPhone 的麦克风流式传输到 Mac/PC?
通过网络将系统音频流式传输到 Web 浏览器 (javascript)