Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

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

25.05.2014, 15:10. Просмотров 1096. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос TextToSpeech, как вызвать speak несколько раз подряд? (Программирование Android):

как вызвать несколько функции - Программирование Android
Добрый день подскажите пожалуйста как можно вызвать функции в цикле for я делаю программу для тренировки есть 3 время: время...

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

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

Автоповорот запускает несколько раз activity - Программирование Android
В приложении воспроизводиться звук с помощью MediaPlayer при срабатывании определенных событий. Если перевернуть телефон то звук начинает...

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

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

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 / 43
Регистрация: 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 / 43
Регистрация: 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
Сообщений: 2
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_
76 / 75 / 8
Регистрация: 08.08.2013
Сообщений: 612
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
Привет! Вот еще темы с ответами:

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

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

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

Вызвать скрипт несколько раз - jQuery
Всем доброго дня!) Eсть такой скрипт он работает но не совсем так как нужно &lt;script type=&quot;text/javascript&quot;&gt; ...


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

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

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