Синтезатор речи. Теперь и на русском

    Меня всегда огорчало, что в Android не было синтезатора речи на русском. Изначально выбор языков был ограничен английским, испанским, французским, немецким и итальянским. Существовали отдельные коммерческие движки, а также производители могли добавить в свои устройства какой-нибудь движок с нужным языком, видимо договорившись с разработчиком. Но хотелось поддержки из коробки от самой «корпорации добра».

    Вчера, включив WiFi на своем телефоне в метро, увидел, что на аппарат прилетело несколько обновлений, в том числе и Синтезатор речи Google с поддержкой русского языка. Сначала я не обратил внимания на данное обстоятельство, а сегодня вдруг подумал, а не могу ли использовать теперь движок с русским языком в своём приложении?
    Набросал простенький пример с кнопкой, чтобы услышать фразу из классики: «А Васька слушает да ест».

    // Если этот код работает, его написал Александр Климов,
    // а если нет, то не знаю, кто его писал.
    
    package ru.alexanderklimov.tts;
    
    import java.util.Locale;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.speech.tts.TextToSpeech;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MainActivity extends Activity implements
    		TextToSpeech.OnInitListener {
    
    	private Button mButton;
    	private TextToSpeech mTTS;
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		mTTS = new TextToSpeech(this, this);
    
    		mButton = (Button) findViewById(R.id.button1);
    		
    		mButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				String text = "А Васька слушает да ест";
    		                mTTS.speak(text, TextToSpeech.QUEUE_FLUSH, null);
    			}
    		});
    	}
    
    	@Override
    	public void onInit(int status) {
    		// TODO Auto-generated method stub
    		if (status == TextToSpeech.SUCCESS) {
    			
    			Locale locale = new Locale("ru");
    
    			int result = mTTS.setLanguage(locale);
    			//int result = mTTS.setLanguage(Locale.getDefault());
    
    			if (result == TextToSpeech.LANG_MISSING_DATA
    					|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
    				Log.e("TTS", "Извините, этот язык не поддерживается");
    			} else {
    				mButton.setEnabled(true);
    			}
    
    		} else {
    			Log.e("TTS", "Ошибка!");
    		}
    
    	}
    	
    
    	@Override
    	public void onDestroy() {
    		// Don't forget to shutdown mTTS!
    		if (mTTS != null) {
    			mTTS.stop();
    			mTTS.shutdown();
    		}
    		super.onDestroy();
    	}
    }
    


    Запустив приложение, услышал родную речь, произнесённую женским голосом.
    Сначала я использовал локаль по умолчанию Locale.getDefault(). Для большинства российских пользователей это сработает, но некоторые пользователи оставляют на телефоне другую локаль, поэтому решил явно указать Locale(«ru»). Наверное, так правильнее.
    Если к вам обновление Синтезатора речи Google ещё не прилетело, то можете скачать с Google Play по адресу https://play.google.com/store/apps/details?id=com.google.android.tts.
    Support the author
    Share post

    Comments 15

      +6
      Лучше тестировать на фразе «Да, хозяин, будет сделано» :-)
        0
        Часто ошибается с ударениями. Интересно, есть ли какой-нибудь способ заставить его правильно говорить «замОк от зАмка»?
          +1
          А именно так не пробовали писать?
            +2
            А ведь это хорошая идея — попробовать :)
            С третьего раза нужный вариант нашел
            Замо'к от за'мка — вот этот вариант читается именно так, как я хотел!
              0
              Я помню, раньше с гугловым синтезатором игрался и нашёл этот вариант.
                0
                Со словом «говори'лка» не помогло, всё равно говорит «га'варилка».(
                  0
                  Да, странно… я попробовал несколько вариантов, пока лидирует такой: говори+лка — растягивает и, при этом ударение становится правильным и слово понятным.
                    0
                    Интересно… У меня честно говорит «говори-плюс-лка» и, кстати, готовится очень долго по сравнению с английским.
                      0
                      Это очень странно. Я так понимаю, что русский синтез доступен только в последней версии гугл-сервисов, так что разные версии у нас быть не может. А у вас оффлайн-база скачана? У меня да. Кстати, долгую инициализацию наблюдаю только при первом обращении. Дальше мгновенно.
            0
            Очень хорошо, что добавили русский язык. Однако, как человек, прослушавший более 100 книг голосом Милены из VocalizerEx, могу сказать что гугловскому TTS до Милены далеко. Что такое интонация и выражение, гугловский движок вообще не знает, а также есть заметная пауза перед чтением очередного предложения. Однако для озвучивания каких-либо действий и коротких фраз, думаю, он вполне подойдет. А может, еще допилят.
              0
              Соглашусь с вами по поводу голоса Милены из VocalizerEx, но…
              Книги слушать все равно тяжело. А вот озвучивание событий в приложении, голосом от гугла, волне терпимо.
              К примеру в навигационном приложении OsmAnd.
              Большим плюсом «родного» синтезатора являются его размер. Порядка 25 мегабайт против 150 и больше от Милены.Плюс простота настройки, для неопытных.
              0
              Привет, Александр. Спасибо за уроки по Андроиду. Учусь по ним. Очень не хватает внимания на среду Android Studio в твоих уроках.

              По сабжу: я провёл собственный research насчёт синтеза речи. Гугловский самый лучшый. Но у меня был такой юзкейс: нужно начитывать книгу (либо из Play книги, либо из Cool Reader) находясь оффлайн. Чего я только не перепробовал. Скачивал голосовые данные (как Low так и Hi) и женского, и мужского голосов. Так вот, только потом до меня дошло, что russian speech работает только с подключенным интернетом. А значит весь юзкейс ломается. Записывать в аудиофайл при интернете не вариант — ведь иногда нужно вернуться на пару предложений или страниц назад.
              Но по качеству он самый лучший. В итоге для оффлайна остановился на SVOX. Он похуже, но терпимый, и работает в оффлайне.
                0
                Вау, действительно появилась поддержка русского! Жаль, голос не такой приятный. Он какой-то напряжённый что-ли. Тот, что был при онлайне был лучше.
                0
                Посоветуйте доступный синтезатор речи, желательно открытый или хотя бы бесплатный. Нужен для написания своих Джарвисов.
                  +1
                  RHVoice

                  Работыет под Win и Linux, бесплатный и опенсорсный, весит мало, работает просто отлично.

                  Собрал текущий RHVoice-v0.4-a3 из репозитария github.com/Olga-Yakovleva/RHVoice

                  В комплекте:
                  RHVoice-language-English-v1.1-setup.exe
                  RHVoice-language-Esperanto-v1.0-setup.exe
                  RHVoice-language-Georgian-v1.0-setup.exe
                  RHVoice-language-Russian-v1.1-setup.exe
                  RHVoice-v0.4-a3-setup.exe
                  RHVoice-voice-English-Alan-v1.0-setup.exe
                  RHVoice-voice-English-CLB-v1.0-setup.exe
                  RHVoice-voice-Esperanto-Spomenka-v1.0-setup.exe
                  RHVoice-voice-Georgian-Natia-v1.0-setup.exe
                  RHVoice-voice-Russian-Aleksandr-v1.0-setup.exe
                  RHVoice-voice-Russian-Anna-v1.0-setup.exe
                  RHVoice-voice-Russian-Elena-v1.0-setup.exe
                  RHVoice-voice-Russian-Irina-v1.0-setup.exe

                  rghost.ru/56077732

                  Only users with full accounts can post comments. Log in, please.