Принудительно Android TTS анализировать время как текст? - PullRequest
0 голосов
/ 02 апреля 2020

Я создаю приложение, которое говорит пользовательское сообщение, которое включает текущее время. Я заметил, что некоторые голоса, кажется, правильно анализируют время, то есть, когда я передаю строку типа «Время пришло 7:07», она фактически говорит это как «семь-семь».

Тем не менее, другие голоса настаивают на том, что «время теперь семь двоеточие ноль семь». Было бы достаточно просто написать функцию для ее анализа, но я пытаюсь найти что-то встроенное, чтобы мне не пришлось беспокоиться о локализации. Есть ли что-то, что я могу сделать в TTS (может быть, связана с атрибутной строкой?) Или даже в библиотеке Java, которая предоставит мне локализованную «текстовую» строку времени? Я перерыл документацию TTS и ничего не нашел, и все шаблоны форматирования времени Java, которые я видел, только для чисел, без слов.

1 Ответ

0 голосов
/ 03 апреля 2020

понял, что TtsSpan - это то, что нужно. Мне потребовалось некоторое время, чтобы получить правильный формат; Есть в основном ноль примеров того, как это сделать. Вот основы того, что сработало для меня, если кто-то еще сталкивался с этим с такой же потребностью (в kotlin):

var h:Int = Calendar.getInstance().get(Calendar.HOUR)
if (DateFormat.is24HourFormat(ApplicationContext))
    h = Calendar.getInstance().get(Calendar.HOUR_OF_DAY)
val m:Int = Calendar.getInstance().get(Calendar.MINUTE)
val whenStr = getFormattedTime() // internal function I'm using to format it visually
wholeString = message.replace("|TIME|",whenStr) // my time doesn't always appear at the same place in the custom message
val spannedMsg:Spannable = SpannableString(wholeString)
val span:TtsSpan = TtsSpan.TimeBuilder(h, m).build()
spannedMsg.setSpan(span, wholeString.inexOf(whenStr),wholeString.indexOf(whenStr) + whenStr.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
tts.speak(spannedMsg, TextToSpeech.QUEUE_FLUSH, params, "UTT_ID")

Согласно странице документации TtsSpan, есть много других вариантов, кроме от TimeBuilder, так что не забудьте проверить это, если вы ищете различные настройки - просто знайте, что нет никаких примеров кода.

...