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

TextToSpeech долгая инициализация - Android

Восстановить пароль Регистрация
Другие темы раздела
Android Требуемая версия Android - Зависит от устройства http://www.cyberforum.ru/android-dev/thread1781649.html
Сегодня когда пытался посмотреть версию известного приложения Viber увидел на его странице в маркете такую надпись Требуемая версия Android Зависит от устройства интересно 1). как с точки зрения разработка в Google Play Developer Console добиться такого для своих приложений? 2). с точки зрения простого пользователя всетаки как посмотреть миним. версию вайбера при этом не имея смартфона?...
Android Передать данные о местоположении в другой фрагмент У меня в активити 2 фрагмента в первом фрагменте определяются текущие координаты пользователя и делается запрос с этими координатами на сервер и эти же координаты нужны и второму фрагменту для его сетевого запроса. Как так сделать чтобы второй фрагмент тоже получил эти координаты(передать ему их как то)? Просто определять местоположение еще раз во втором фрагмент нет смысла да и это не... http://www.cyberforum.ru/android-dev/thread1781626.html
Android Можно ли хранить во ViewPager не только элементы (объекты), но и какую-то переменную?
Добрый вечер! Столкнулся с необходимостью использовать ViewPager и PagerAdapter. Подскажите пожалуйста, можно ли хранить во ViewPager не только элементы(объекты), но и какую-то переменную? Не очень хочется создавать еще один массив для переменных, а обращаться к ним через ViewPager. Думал для хранения строк и логических переменных вкладывать во ViewPager скрытые TextView и RadioButton...
Порядок создания компонентов Android
Есть вертикальный LinearLayout в нем 2 фрагмента(первый выше, второй - ниже) эту разметку я подключаю в активити. Какой из двух фрагментов будет создан раньше первый или второй или они создадутся одновременно?
Android Дождаться ответа от сервера http://www.cyberforum.ru/android-dev/thread1781556.html
public class Network { public static boolean isConnected = false; public static void isConnected(final Context context, String URL){ RequestQueue requestQueue = Volley.newRequestQueue(context); requestQueue.getCache().clear(); StringRequest stringRequest = new StringRequest(Request.Method.GET, URL, new Response.Listener<String>() { @Override ...
Android AssistContent не найден ? Написал простую программу изучая среду Android. Всё компилируется, и запускается на реальном смартфоне. Выполняя задание, которое написано в книге, я обнаружил, что если пользователь нажмёт сразу не вперёд, а, наоборот, назад.. то получается касяк т.к. происходит выход за пределы массива. Этот момент я обработал: mPrevButton = (Button) findViewById(R.id.prev_button); ... подробнее

Показать сообщение отдельно
RenatSayf
186 / 0 / 2
Регистрация: 15.03.2015
Сообщений: 9
16.07.2016, 21:23     TextToSpeech долгая инициализация
Привет всем!
Помогите решить проблему долгой инициализации TextToSpeech.
Ниже представлен код примера с использованием TextToSpeech на разных языках(En & Ru). Если поочередно кликать по кнопкам озвучки то задержка синтеза речи составляет 5 - 10 сек (я специально там таймер внедрил). Вопрос - это такая особенность андройдовского TextToSpeech-движка или я что-то неправильно делаю. Тестирую на реальном дивайсе ZTE Blade AF3, версия Android: KitKat 4.4.2. Может кто проверит на LolliPop или Marshmallow.
Честно говоря, разочарован googleвскими технологиями: на WindowsPhone8.1 аналогичный пример работает без всяких задержек.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.renat.example_ttspeech.MainActivity"
    >
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_weight="1"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="English"
        android:id="@+id/txt_view_en"
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="90dp"/>
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_weight="1"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Russian"
        android:id="@+id/txt_view_ru"
        android:layout_alignBottom="@+id/btn_ru"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>
 
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/linearLayout">
 
 
    </LinearLayout>
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Озвучить"
        android:layout_weight="1"
        android:id="@+id/btn_ru"
        android:layout_marginBottom="154dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Audio"
        android:layout_weight="1"
        android:id="@+id/btn_en"
        android:layout_alignBottom="@+id/txt_view_en"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"/>
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Next"
        android:id="@+id/btn_next"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="23dp"/>
 
    <Chronometer
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/chronometer"
        android:layout_above="@+id/btn_ru"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="50dp"
        android:textSize="40dp"/>
 
</RelativeLayout>
,

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
package com.example.renat.example_ttspeech;
 
import android.os.Build;
import android.os.SystemClock;
import android.speech.tts.TextToSpeech;
import android.speech.tts.UtteranceProgressListener;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;
import android.widget.Toast;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
 
public class MainActivity extends AppCompatActivity
{
    private TextView textViewEn;
    private TextView textViewRu;
    private Button buttonEn;
    private Button buttonRu;
    private Button buttonNext;
    private Chronometer chronometer;
    private TextToSpeech speech;
    private HashMap<String, String> map = new HashMap<String, String>();
    private ArrayList<Words> wordses;
    private Locale localeEn = Locale.US;
    private Locale localeRu = Locale.getDefault();
    private String logTag = "TTS";
    private int count = 0;
 
 
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        initViews();
 
        speech = new TextToSpeech(this, new TextToSpeech.OnInitListener()
        {
            @Override
            public void onInit(int status)
            {
                map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "text");
                if (status == TextToSpeech.SUCCESS)
                {
                    int resultRu = speech.isLanguageAvailable(localeRu);
                    if (resultRu == TextToSpeech.LANG_MISSING_DATA || resultRu == TextToSpeech.LANG_NOT_SUPPORTED)
                    {
                        Toast.makeText(MainActivity.this, localeRu.getDisplayName() + "язык не подерживается",Toast.LENGTH_SHORT).show();
                        buttonRu.setEnabled(false);
                    }
 
                    int resultEn = speech.isLanguageAvailable(localeEn);
                    if (resultEn == TextToSpeech.LANG_MISSING_DATA || resultEn == TextToSpeech.LANG_NOT_SUPPORTED)
                    {
                        Toast.makeText(MainActivity.this, localeEn.getDisplayName() + "язык не подерживается",Toast.LENGTH_SHORT).show();
                        buttonEn.setEnabled(false);
                    }
                }else
                {
                    Toast.makeText(MainActivity.this,"TextToSpeech - ошибка инициализации",Toast.LENGTH_SHORT).show();
                    buttonEn.setEnabled(false);
                    buttonRu.setEnabled(false);
                }
            }
        });
 
        speech.setOnUtteranceProgressListener(new UtteranceProgressListener()
        {
            @Override
            public void onStart(String s)
            {
                chronometer.stop();
            }
 
            @Override
            public void onDone(String s)
            {
 
            }
 
            @Override
            public void onError(String s)
            {
 
            }
        });
    }
 
    private void initViews()
    {
        wordses = new ArrayList<>();
        wordses.add(new Words("good", "хорошо"));
        wordses.add(new Words("red", "красный"));
        wordses.add(new Words("add", "добавить"));
        wordses.add(new Words("select", "выбрать"));
 
        textViewEn = (TextView) findViewById(R.id.txt_view_en);
        textViewRu = (TextView) findViewById(R.id.txt_view_ru);
        buttonEn = (Button) findViewById(R.id.btn_en);
        buttonRu = (Button) findViewById(R.id.btn_ru);
        buttonNext = (Button) findViewById(R.id.btn_next);
        chronometer = (Chronometer) findViewById(R.id.chronometer);
        buttonEn_OnClick();
        buttonRu_OnClick();
        buttonNext_OnClick();
 
        textViewEn.setText(wordses.get(0).getEnglish());
        textViewRu.setText(wordses.get(0).getRussian());
    }
 
    private void buttonNext_OnClick()
    {
        buttonNext.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                count++;
                if (count > wordses.size() - 1)
                {
                    count = 0;
                }
                textViewEn.setText(wordses.get(count).getEnglish());
                textViewRu.setText(wordses.get(count).getRussian());
            }
        });
    }
 
    private void buttonRu_OnClick()
    {
        buttonRu.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                chronometer.setBase(SystemClock.elapsedRealtime());
                chronometer.start();
                speech.setLanguage(localeRu);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                {
                    speech.speak(textViewRu.getText().toString(), TextToSpeech.QUEUE_ADD, null, "xxx");
                }else
                {
                    speech.speak(textViewRu.getText().toString(),TextToSpeech.QUEUE_ADD, map);
                }
            }
        });
    }
 
    private void buttonEn_OnClick()
    {
        buttonEn.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                chronometer.setBase(SystemClock.elapsedRealtime());
                chronometer.start();
                speech.setLanguage(localeEn);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
                {
                    speech.speak(textViewEn.getText().toString(),TextToSpeech.QUEUE_ADD, null, "xxx");
                } else
                {
                    speech.speak(textViewEn.getText().toString(),TextToSpeech.QUEUE_ADD, map);
                }
            }
        });
    }
 
 
}
Полный код приложения на Bitbucket: https://bitbucket.org/RenatSayf/example_ttspeech
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru