Недавно я использовал Android TTS - я сохраняю файл в формате MP3 и воспроизводю его с помощью MediaPlayer, чтобы пользователи могли приостанавливать / возобновлять работу и т. д.
Все работает нормально, кроме случаев, когда у меня большой текст, он просто не работает.
Читал, что у android TTS лимит в 4000 CH? Что мне делать, чтобы обработать большой объем текста?
Ниже приведен код, который я использую для сохранения MP3.
Android.Speech.Tts.TextToSpeech textToSpeech;
...
textToSpeech = new Android.Speech.Tts.TextToSpeech(this, this, "com.google.android.tts");
...
textToSpeech.SynthesizeToFile(ReadableText, null, new Java.IO.File(System.IO.Path.Combine(documentsPath, ID + "_audio.mp3")), ID);
Ниже приведен код, который я использую для воспроизведения звука.
MediaPlayer MP = new MediaPlayer();
...
MP.SetDataSource(System.IO.Path.Combine(documentsPath, ID + "_audio.mp3"));
MP.Prepare();
MP.Start();
Это работает для небольшого количества текста, но не для большого текста.
Файл сохраняется (скорее всего, это просто поврежденный файл), потому что, когда я играю в него, я получаю следующую ошибку
setDataSoruceFD failed: status=0x80000000
Java Solution is also acceptable
К вашему сведению - вопрос о максимальном размере текста, поскольку я могу сгенерировать файл для меньшего текста.
Ваше здоровье
Возможный дубликат Файл Android TextToSpeech.synthesizeToFile () не создается
Протестировано еще раз, да, времени достаточно для обработки текста, я играю после сохранения файла.





В Android ASOP (по крайней мере, начиная с API-18) для TextToSpeech.MaxSpeechInputLength установлено значение 4000.
Примечание: OEM-производители могут изменить это значение в своем образе ОС, поэтому было бы разумно проверить это значение и не делать никаких предположений.
Примечание: вы назначаете выход с расширением .mp3, но по умолчанию созданные файлы будут отформатированы в формате .wav, некоторые речевые движки поддерживают другие форматы / битрейт / и т. д. но вы передаете значение null для параметров.
Если вы не хотите правильно объединить несколько волновых файлов, я бы рекомендовал вам разбить текст на более мелкие части и синтезировать несколько файлов.
Затем вы можете воспроизвести их последовательно (используя событие завершения MediaPlayer | прослушиватель).
Большое спасибо за ваш ответ, вы правы, мне придется разделить текст на файлы меньшего размера, что касается передачи type как null и сохранения wav как MP3, не могли бы вы пояснить, что вы имеете в виду? Также мне нравится идея проверки значения, поскольку вы сказали, что OEM-производители могут изменить значение, но, учитывая, что 4000 - это минимум, для согласованности, что вы думаете, если я просто буду придерживаться одного размера для всех устройств.
@aliusman stick with one size over all the devices Возможно, у вас все в порядке, или нет ;-)MaxSpeechInputLength был добавлен в API-18, чтобы разработчик мог проверить макс. длина доступна, лично Я бы использовал его на API18 + и предположил бы 4000 для более низких API, но в конце концов, выбор за вами ...
Спасибо, хотел бы пролить свет на Note: You are naming the output with an .mp3 extension, but by default the files created will be .wav formatted, some speech engines do support other formats/bitrate/etc. but you are passing null for the parameters., пожалуйста
@aliusman Различные движки TTS поддерживают разные параметры, некоторые из которых вы можете передать в params для сгенерированного типа голоса, высоты тона, скорости, формата и т. д., которые будут сгенерированы. Они зависят от движка TTS, поэтому в каком-то документе Google Android нет их основного списка, вам нужно посмотреть на сам движок, чтобы определить, какие дополнительные функции поддерживаются (если есть). В основном вы используете HashMap (или Bundle в версии SynthesizeToFile API-21 +), чтобы установить идентификатор высказывания для прослушивателя асинхронного обратного вызова, чтобы знать, когда файл будет создан.
Похоже, это асинхронный режим, но имеет ли это значение в моем случае?