Потоковое аудио в FLAC или AMR_WB в Google Speech API - PullRequest
0 голосов
/ 06 октября 2018

Мне нужно запустить API речи Google в средах с небольшой пропускной способностью.

Судя по прочтению о передовых практиках, лучше всего использовать формат 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()

1 Ответ

0 голосов
/ 06 ноября 2018

Google не распознает ваши данные, потому что вы сообщаете, что они в формате FLAC или AMR_WB , в то время как вы продолжаете передавать необработанные несжатые аудиоблоки, которые AudioRecord.read() производит.

Теперь, чтобы заставить его работать, у вас есть два варианта.Первый - преобразовать данные в нужный формат самостоятельно, возможно, с помощью сторонней библиотеки.Второй - использовать MediaRecorder из библиотеки Android.К сожалению, он поддерживает только запись в место назначения, похожее на файл, поэтому вы не можете просто заменить AudioRecorder на него, но есть обходной путь, описанный в в этом ответе .

...