将FLAC或AMR_WB中的音频流传输到Google Speech API

时间:2018-10-06 03:22:22

标签: android kotlin google-speech-api

我需要在带宽较低的环境中运行Google Speech API。

根据对最佳做法的了解,似乎最好的选择是使用AMR_WB格式。

但是,以下代码不会产生任何异常,并且在var socket = Socket("https://192.168.113.157:8443/HLS_BACKEND/rtisTrackDataGIS"); socket.on("message", function(event){ var data = event.data; console.log(data);/////////////////////////////////// 方法中没有任何响应,但是API在onError(t: Throwable)方法中根本没有返回任何值。

如果我将onNext(value: StreamingRecognizeResponse).setEncoding()的格式从FLAC改回AMR_WB,一切正常。

AudioEmitter.kt

LINEAR16

MainActivity.kt

fun start(
            encoding: Int = AudioFormat.ENCODING_PCM_16BIT,
            channel: Int = AudioFormat.CHANNEL_IN_MONO,
            sampleRate: Int = 16000,
            subscriber: (ByteString) -> Unit
    )

1 个答案:

答案 0 :(得分:0)

Google不会识别您的数据,因为您告诉它数据为 FLAC AMR_WB 格式,而您一直在传递{{1 }}产生。

现在,为了使其正常工作,您有两种选择。首先是自己将数据转换为所需的格式,可能使用某些第三方库。第二个是使用Android库中的 MediaRecorder 。不幸的是,它仅支持写入类似文件的目标,因此您不能简单地用它替换 AudioRecorder ,但是this answer中描述了一种解决方法。