Поддержка SSML в Android TTS? - PullRequest
       72

Поддержка SSML в Android TTS?

1 голос
/ 17 июня 2020

Этот вопрос задавали несколько лет go, но, надеюсь, все изменилось ...

Может ли кто-нибудь указать мне какие-либо подробности о том, какие версии Android поддерживают какое подмножество SSML в его механизме преобразования текста в речь?

Я провел несколько экспериментов с использованием Flutter-TTS, который представляет собой просто слой, передающий текст, который будет озвучен, в службу TTS базовой платформы.

Некоторое неизвестное подмножество SSML действительно работает с более новым Android - например, этот SSML

<speak>before<break time="5s"/>after</speak>

действительно создает пятисекундную паузу между словами в API 27 и API 29. Это действительно так. не работает с API 21, но, по крайней мере, он изящно справляется с этим, просто игнорируя все теги. Я еще не тестировал другие уровни API. Я также пробовал теги prosody , phoneme и lang - похоже, они не работают.

1 Ответ

1 голос
/ 19 июня 2020

Пока метод speak () класса TextToSpeech принимает только Strings или CharSequence (которые затем передаются в речевой механизм), и пока Android не вводит новый метод, такой как TextToSpeech. speakSSML () в какой-то будущей версии Android (и обеспечить, чтобы все движки поддерживали его) ...

... затем способ, которым индивидуальная речь движки обрабатывают эти строки будут уникальными для них и в конечном итоге непредсказуемыми, потому что вы не знаете, какой движок (или его версию) пользователь мог установить и / или выбрать для использования в своих настройках до времени выполнения.

Конечно, определенный движок вскоре может заявить, что полностью поддерживает SSML, и похоже, что движок Google (если это то, с чем вы тестируете) начинает экспериментировать с ним. Даже если они в конечном итоге полностью поддержат его, вам придется предложить пользователю перенастроить / установить конкретную версию этого механизма в вашем приложении.

Я подозреваю, что причина, по которой вы видите, что он поддерживается, - это потому что вы тестируете "сетевые голоса" движка Google, которые перекликаются с tts облака Google.

Я не думаю, что Android уровень API должен иметь к этому какое-либо отношение, это просто будет ли у пользователя установлен "xyz engine ver 234123.21314" или нет.

Преобразование текста в речь Google Cloud поддерживает его , хотя ... и поскольку вы уже переход на кроссплатформенность с использованием Flutter, это может быть лучшим способом go ... но, конечно, для этого требуется активная сеть.

...