Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
1

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

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

Author24 — интернет-сервис помощи студентам
С основами разобрался... "говорить" умею...
Пользуюсь 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2014, 15:10
Ответы с готовыми решениями:

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

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

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

Как считать текст из файла несколько раз подряд в программе?
В общем, делал упражнение и у меня программа коряво написана так, что получается нужно использовать...

6
1 / 1 / 0
Регистрация: 08.12.2010
Сообщений: 37
26.05.2014, 16:12 2
Здесь нужно использовать UtteranceProgressListener, который уведомляет о завершении работы метода speak.
http://developer.android.com/r... tener.html
1
420 / 357 / 47
Регистрация: 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
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
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
27.05.2014, 03:24  [ТС] 5
Цитата Сообщение от qvazar Посмотреть сообщение
По идее, в методе speak 3-м
Увы, так и не понял как это привязать к tts...

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

Воткнул в сервис - каждые 15 минут нормой говорит текущее время. А каждый час громко... теперь опять дня 3-4 тесты "на выносливость"... пока успешно работает...
0
0 / 0 / 0
Регистрация: 08.07.2015
Сообщений: 5
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
91 / 86 / 12
Регистрация: 08.08.2013
Сообщений: 667
06.05.2017, 11:41 7
Tester64, а по русски умеет балакать?
0
06.05.2017, 11:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2017, 11:41
Помогаю со студенческими работами здесь

Вызвать скрипт несколько раз
Всем доброго дня!) Eсть такой скрипт он работает но не совсем так как нужно &lt;script...

Вызвать класс параллельно несколько раз
У меня есть класс некоторого NPC который хаотично двигается по карте, как я могу заспаунить...

Вызвать несколько раз mmenu с одинаковыми настройками?
Доброго времени суток. Вызывается mmenu с настройками pupup. 5 форм, настройки одинаковые. Как...

Вероятность выпадения решки несколько раз подряд
Добрый День! В математике не силен, передо мной встала вот такая задачка: Мне нужно вывести...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru