Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
1

TextToSpeech, как вызвать speak несколько раз подряд?

25.05.2014, 15:10. Просмотров 1354. Ответов 6
Метки нет (Все метки)

С основами разобрался... "говорить" умею...
Пользуюсь tts.speak("hello!", TextToSpeech.QUEUE_FLUSH, null);

Теперь хочу вызывать несколько несколько раз эту функцию подряд! Но срабатывает лишь последний раз!

Пользуюсь tts.speak("1", TextToSpeech.QUEUE_FLUSH, null);
Пользуюсь tts.speak("2", TextToSpeech.QUEUE_FLUSH, null);
Пользуюсь tts.speak("3, TextToSpeech.QUEUE_FLUSH, null);
...но слышу только "3"

Понимаю что это связано с сервисом говорилки и заменой произносимой фразы... Но как это обойти? Как вмешаться в этот порядок? Пока что вынужден делать ручную паузу на примерное время произошения фразы...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2014, 15:10
Ответы с готовыми решениями:

Как вызвать несколько функций?
Добрый день подскажите пожалуйста как можно вызвать функции в цикле for я...

Как по нажатию кнопки несколько раз выводить текст в TextView в Android Studio?
Помогите вывести текст в textview при нажатии на одну и ту же кнопку ? Нажал -...

Работа с TextToSpeech
Доброго времени суток! Есть тут кто мне поможет! TTS имеет свои локальные языки...

RecyclerView создается несколько раз подрят
Суть проблемы: Есть TabbedActivity ней 6 вкладок в каждой фрагмент со своим...

Автоповорот запускает несколько раз activity
В приложении воспроизводиться звук с помощью MediaPlayer при срабатывании...

6
qvazar
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 37
26.05.2014, 16:12 2
Здесь нужно использовать UtteranceProgressListener, который уведомляет о завершении работы метода speak.
http://developer.android.com/referen...sListener.html
1
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
26.05.2014, 22:14  [ТС] 3
qvazar Спасибо за идею... уже десяток источников перерыл, но примеры пока не сработали!
Можете выложить простейший рабочий пример?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                tts.setOnUtteranceProgressListener(new UtteranceProgressListener(){
                    @Override
                    public void onStart(String utteranceId) {
                        //
                    }
 
                    @Override
                    public void onDone(String utteranceId) {
                        Log.i("Востанавливаем");
                    }
 
                    @Override
                    public void onError(String utteranceId) {
                        //
                    }
 
                });
                tts.speak(Voice_Text, TextToSpeech.QUEUE_FLUSH, null);
Не выводит в лог...

Нашел еще такое:
Java
1
2
3
4
5
6
7
                tts.setOnUtteranceCompletedListener(new TextToSpeech.OnUtteranceCompletedListener() {
                    @Override
                    public void onUtteranceCompleted(String utteranceId) {
                        Log.i("Востанавливаем 2");
                    }
                });
                tts.speak(Voice_Text, TextToSpeech.QUEUE_FLUSH, null);
Тоже не срабатывает...

Добавлено через 2 минуты
Я так понял что можно использовать
Java
1
tts.speak(inputText, TextToSpeech.QUEUE_ADD, null); // вместо QUEUE_FLUSH
Но мне нужно именно ПОЙМАТЬ когда закончили говорит - для следующей операции!

Добавлено через 4 часа 0 минут
знаю что не правильно, но нашел такое решение:
Java
1
2
3
4
5
                // ждем пока закончим говорить
                boolean speakingEnd = tts.isSpeaking();
                do {
                    speakingEnd = tts.isSpeaking();
                } while ((speakingEnd));
При этом кнопка подвешивается до конца разговора и не знаю как будет себя вести при длиных фразах
... но если знаете как сделать правильно - отпишитесь!
0
qvazar
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 37
26.05.2014, 22:36 4
По идее, в методе speak 3-м параметром вместо null нужно указать KEY_PARAM_UTTERANCE_ID, который позволит соотнести объект TextToSpeech и UtteranceProgressListener:
Java
1
2
HashMap<String, String> params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, utteranceId);
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
27.05.2014, 03:24  [ТС] 5
Цитата Сообщение от qvazar Посмотреть сообщение
По идее, в методе speak 3-м
Увы, так и не понял как это привязать к tts...

Поставил задачу проговаривать некоторые слова увеличивая громкость на максимум с последующим сбиванием на прошлую громкость. Кое-как добился... "1" нормой, "2" громко, "3" снова норма... правда вручную задаю на 1 сек таймер ожидания...

Воткнул в сервис - каждые 15 минут нормой говорит текущее время. А каждый час громко... теперь опять дня 3-4 тесты "на выносливость"... пока успешно работает...
0
sapeg
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 3
06.05.2017, 09:39 6
Пользуюсь tts.speak("2", TextToSpeech.QUEUE_FLUSH, null);
Пользуюсь tts.speak("3, TextToSpeech.QUEUE_FLUSH, null);

Вместо : QUEUE_FLUSH используйте QUEUE_ADD
0
_Night_Scream_
81 / 78 / 11
Регистрация: 08.08.2013
Сообщений: 638
06.05.2017, 11:41 7
Tester64, а по русски умеет балакать?
0
06.05.2017, 11:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2017, 11:41

Как вызвать функцию несколько раз подряд?
Здравствуйте! В ячейке А1 есть функция, к примеру СЛУЧМЕЖДУ (1,4), в нужный...

Как проиграть звук несколько раз подряд?
Точнее - как заставить играть каждый раз до конца? ...

Как вызвать несколько раз метод после его окончания
Здравствуйте, нужно по нажатию на кнопку вызвать метод к примеру 5 раз. Но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru