Как правильно проанализировать файл WAV для использования с Android TTSAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как правильно проанализировать файл WAV для использования с Android TTS

Сообщение Anonymous »

Я пытаюсь создать движок TTS для службы TTS, работающей локально в моей сети.
Я использовал ИИ для создания основ и настройки движка с системой Android. Но мне не удалось заставить TTS нормально работать при чтении текста в программе для чтения книг.
Служба, которую я использую, возвращает файлы WAV, которые работают нормально. Но при их фрагментировании для добавления в TTS я продолжаю получать искажения и искаженный текст (например, отсутствие звука на старых ЭЛТ-телевизорах). Единственное, о чем я могу думать, это разбиение аудио при передаче к системному обработчику.
Вот основной цикл кода:

Код: Выделить всё

// This function is called when apps ask to convert TTS
// callback is an injected object to interact with the app asking for the TTS
override fun onSynthesizeText(
request: SynthesisRequest?,
callback: SynthesisCallback
) {
val text = request?.charSequenceText?.toString()
if (text.isNullOrEmpty()) {
callback.error()
return
}

runBlocking(Dispatchers.IO) {
try {
when (val result = repository.generateSpeech(text)) {
is TtsRepository.TtsResult.Success -> {
val audioData = result.audioData
val inputStream = audioData.byteStream()
// reading the WAV header
val headerBytes = ByteArray(44)
inputStream.read(headerBytes)
val wavInfo = parseWavHeader(headerBytes)
// finding the audio format, mostly for debugging
val audioFormat = when (wavInfo.bitsPerSample) {
8 -> AudioFormat.ENCODING_PCM_8BIT
16 -> AudioFormat.ENCODING_PCM_16BIT
24 -> AudioFormat.ENCODING_PCM_24BIT_PACKED
32 -> AudioFormat.ENCODING_PCM_32BIT
else -> AudioFormat.ENCODING_PCM_16BIT
}

val channelConfig = when (wavInfo.channels) {
1 -> 1
2 -> AudioFormat.CHANNEL_OUT_FRONT_LEFT or AudioFormat.CHANNEL_OUT_FRONT_RIGHT
else -> AudioFormat.CHANNEL_CONFIGURATION_INVALID
}

callback.start(wavInfo.sampleRate, audioFormat, 1)
Log.d(TAG, "TTS request started: ${wavInfo.sampleRate}Hz, ${wavInfo.channels}ch, ${wavInfo.bitsPerSample}bit")

val maxBufferSize = callback.maxBufferSize //  {
callback.error()
}
}
} catch (e: Exception) {
callback.error()
}
}
}

Известен ли способ обработки фрагментов? Я попробовал проверить в Интернете, но не смог найти четкого объяснения. Эта проблема возникает только с частью TTS, поскольку воспроизведение WAV-файла в ExoPlayer работает нормально


Подробнее здесь: https://stackoverflow.com/questions/798 ... ndroid-tts
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»