Минимально приемлемое качество звука для Google Speech API (и как его настроить)

Я работаю с 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, похоже, прерывает поток.

Как мне заставить все это работать вместе и каковы мои лучшие варианты с низкой пропускной способностью?


person Wesley    schedule 06.10.2018    source источник


Ответы (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); 

Возможно, это не идеально для вас, но хорошее место для начала. Удачи!

person Geordie Wicks    schedule 06.10.2018
comment
У вас много фонового шума или это тихая обстановка? - person Wesley; 06.10.2018
comment
Полностью зависит от того, мы используем его в приложении, которое используется в реальной жизни, поскольку люди обычно используют свои телефоны, так что это сильно отличается. - person Geordie Wicks; 07.10.2018