Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
25.05.2014, 15:10     TextToSpeech, как вызвать speak несколько раз подряд? #1
С основами разобрался... "говорить" умею...
Пользуюсь 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"

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

Как вызвать другой activity в android ? Android
Android как вызвать несколько функции
Android Edit text как вызвать клавиатуру виртуальную
Android Как в Android вызвать сообщение?
Как из своего Андроид-приложения вызвать другое Android
Android Работа с TextToSpeech
Android Как вызвать Notification в Broadcast Receiver?
Android Как вызвать другой результат try-catch в методе?
Android Автоповорот запускает несколько раз activity
Android Как вызвать другое активити в контексном меню
Как по нажатию кнопки несколько раз выводить текст в TextView в Android Studio? Android
Android Как вызвать postInvalidate() из static метода?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
qvazar
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 37
26.05.2014, 16:12     TextToSpeech, как вызвать speak несколько раз подряд? #2
Здесь нужно использовать UtteranceProgressListener, который уведомляет о завершении работы метода speak.
http://developer.android.com/referen...sListener.html
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
26.05.2014, 22:14  [ТС]     TextToSpeech, как вызвать speak несколько раз подряд? #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));
При этом кнопка подвешивается до конца разговора и не знаю как будет себя вести при длиных фразах
... но если знаете как сделать правильно - отпишитесь!
qvazar
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 37
26.05.2014, 22:36     TextToSpeech, как вызвать speak несколько раз подряд? #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);
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
27.05.2014, 03:24  [ТС]     TextToSpeech, как вызвать speak несколько раз подряд? #5
Цитата Сообщение от qvazar Посмотреть сообщение
По идее, в методе speak 3-м
Увы, так и не понял как это привязать к tts...

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

Воткнул в сервис - каждые 15 минут нормой говорит текущее время. А каждый час громко... теперь опять дня 3-4 тесты "на выносливость"... пока успешно работает...
Yandex
Объявления
27.05.2014, 03:24     TextToSpeech, как вызвать speak несколько раз подряд?
Ответ Создать тему
Опции темы

Текущее время: 19:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru