Компания
45,60
рейтинг
5 ноября 2013 в 11:19

Разработка → Синтезатор речи в iOS7

В iOS7 встроили синтезатор речи, теперь заставить свое приложение говорить вопрос пары строчек кода.

За синтез речи отвечает класс AVSpeechSynthesizer Достаточно передать ему текст обернутый в класс AVSpeechUtterance и текст будет прочитан смартфоном.

Голос зависит от локали, в том числе поддерживается русский. Речь звучит четко и приятно.

var speechSynthesizer = new AVSpeechSynthesizer ();
var speechUtterance =
  new AVSpeechUtterance ("Shall we play a game?");
speechSynthesizer.SpeakUtterance (speechUtterance);


голос по умолчанию с английской локалью
Это ссылка! Кликайте с Ctrl или Cmd, на хабре нельзя встроить звук. В нашем блоге разместил пост с виджетами Sound Cloud.

Речь настраивается с помощью параметров класса AVSpeechUtterance:
  • Rate — скорость проигрывания, чем больше тем быстрее от MinimumSpeechRate до MaximumSpeechRate.
  • Voice — объект класса AVSpeechSynthesisVoice зависит только от локали, голос один женский.
  • Volume — громкость голоса, от 0 до 1.0, по умолчанию 1.0 (самый громкий)
  • PitchMultiplier — высота голоса от 0.5 до 2.0, по умолчанию 1.0.


На мой взгляд, текст по умолчанию звучит слишком быстро. Установим максимальную скорость уменьшенную в 3.6 раза
var speechSynthesizer = new AVSpeechSynthesizer ();
var speechUtterance =
	new AVSpeechUtterance ("Shall we play a game?") {
		Rate = AVSpeechUtterance.MaximumSpeechRate / (float)3.6
	};
speechSynthesizer.SpeakUtterance (speechUtterance);

голос по умолчанию, макс скорость/3.6

Синтезатор речи в iOS7 поддерживает только женский голос в 35 локалях, среди них — русская.
['ar-SA', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'en-AU', 'en-GB', 'en-IE', 'en-US', 'en-ZA', 'es-ES', 'es-MX', 'fi-FI', 'fr-CA', 'fr-FR', 'hi-IN', 'hu-HU', 'id-ID', 'it-IT', 'ja-JP', 'ko-KR', 'nl-BE', 'nl-NL', 'no-NO', 'pl-PL', 'pt-BR', 'pt-PT', 'ro-RO', 'ru-RU', 'sk-SK', 'sv-SE', 'th-TH', 'tr-TR', 'zh-CN', 'zh-HK', 'zh-TW']


var speechSynthesizer = new AVSpeechSynthesizer ();
var speechUtterance =
	new AVSpeechUtterance ("Сыграем в игру?") {
		Rate = AVSpeechUtterance.MaximumSpeechRate / (float)4,
		Voice = AVSpeechSynthesisVoice.FromLanguage ("ru-RU")
	};
speechSynthesizer.SpeakUtterance (speechUtterance);

русский, четверть макс скорости

Русский голос звучит прекрасно, попробуем проиграть длинный текст.
Лермонтов «Парус», русский, четверть макс скорости

Есть огрехи, но на мой взгляд прекрасно. Подходит для боевого использования.

Варианты приложений с синтезом речи:
  • Приложения для слепых, например, навигация в помещениях совместно с iBeacon.
  • Аудио-гиды по музею/городу, синтезированная речь не так приятна как прочитанная людьми, но текст будет понятен.
  • Приложения для авто, скутера и велосипеда. Например, можно зачитывать последние твиты. Удобно когда едешь на велосипеде на работу.
  • Туристические приложения. Например, «спасибо», «пожалуйста», «здравствуйте» на популярных языках.


В Android синтез речи появился в 2009 году (1.6+), звучит отвратительно.


Подписывайтесь на наш хабра-блог. Каждый четверг полезные статьи о мобильной разработке, маркетинге и бизнесе мобильной студии.
Автор: @junk
Touch Instinct
рейтинг 45,60
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Похожие публикации

Комментарии (32)

  • +4
    В Android можно установить и другой TTS движок, например SVOX неплох
    Сравнивать сегодня с 2009м некорректно
    • 0
      я ни в коем случае не хотел обидеть Android.

      Мы делаем кросс-платформенные приложения на Xamarin и любой функционал рассматриваем будет ли он из коробки работать на обоих системах
      • +1
        Xamarin, а я-то думаю, откуда там var, new и круглые скобки :)
        • 0
          я ради разнообразия пишу и на том и на том, когда переключаешься на Objective C мозги потихоньку закипают
  • +6
    Что интересно в OS X синтез речи на русском языке меньше режет ухо, чем синтез английской речи, причина этого не ясна.
    Очень рад что синтез речи доехал и до iOS, но непонятно почему такое странное качество генерации, в OS X, вроде как получше, или мне кажется

    Парус, OS X 10.8

    • +1
      И вот кстати пример английской речи.
      Sail, OS X 10.8
    • +1
      а и правда приятнее, заслушался :)
    • 0
      Мне вот эти ребята нравятся

      soundcloud.com/nektovkepke/rnzqhshu3gnb
  • 0
    В Android синтез речи появился в 2009 году (1.6+), звучит отвратительно.

    В Symbian синтез речи появился в 2005 (с N70), звучал для того времени вполне.
    Чтобы что-нибудь сказать, было достаточно одной строки на питоне для S60. Забавно было при отладке использовать отзвучку вместо вывода в лог. Тыкаешь на телефоне кнопки — а он тебе рапортует, чем там программа занимается…
  • +3
    Синтез речи был бомбой в 1984 году на презентации Макинтоша. Сейчас это как-то… неинтересно, что ли.
    • 0
      не знаю донесу ли мысль. Но он на очень высоком уровне, можно строить на этом приложения, взять тексты и слепить гид по музею
      • +1
        будет стыд и позор музею :)
    • +1
      Тоже 84-й.

      7,14 МГц, 512 кб ОЗУ, многозадачность, оконный интерфейс. Был в шоке найдя в BASIC команду say, которой параметром можно было дать текст для проговаривания.
      • 0
        А у него еще и дикция хорошая!
        • 0
          Вот и думаешь, куда эти все гигагерцы и ядра уходят, чем заняты?
          • +5
            Сборкой мусора ;D
  • 0
    Ну синтезатор речи давно же был, с 5й версии вроде можно было просто выделить фрагмент текста, и телефон его проговаривал.
    Другое дело, что хорошо что в ios7 сделали наконец API для голоса.
  • +2
    Ради справедливости стоит сказать, что синтезатор речи появился ещё в iPhone OS 3 (или как уж там называлась платформа iPhone 3GS). iOS 7 просто доросла до появления открытого API.

    Вообще же синтез речи есть в любой современной мобильной платформе: Android, BlackBerry, Firefox, iOS, Tizen, Windows Phone. И открытые API для взаимодействия с TTS во многих из них появились много раньше iOS.

    Кроме того, пресловутая OS Android позволяет использовать альтернативные синтезаторы и соответственно разрабатывать их самостоятельно. Например, тот же голос Алёна от Acapela Group во многом более качественный, чем Милена от Nuance, которая используется в iOS.

    Кстати, тем, кто не сориентировался, советую загрузить в iOS полные версии голосов, потому что по умолчанию там так называемые «компактные», которые имеют звук 16 КГц, тогда как полные — 22 КГц. Только вот в iOS 7 общее качество звука синтезированной речи снизилось по сравнению с предыдущими версиями, что особенно заметно, если пользователь слышал, как было раньше.

    Правда iOS крута тем, что там очень много встроенных голосов под многие языки, тогда как Android в стандартной комплектации из коробки поддерживает только 6 языков и русского там нет. Русский из коробки ещё есть в BlackBerry и Windows Phone 8. Правда отдельные Android-смартфоны для российского рынка также сейчас включают русскоязычный голос, в частности это характерно для новых Samsung, где присутствует встроенный голос Наталья, правда довольно слабенький по качеству.

    Ну а вообще лучше поздно, чем никогда. Будет хорошо, если появление открытого API в iOS 7 приведёт к появлению интересных приложений.
    • 0
      Давным давно слушал сравнение Алёна с синтезатором речи в Linux было небо и земля, потом послушал Милену в варианте под OSX на мой взгляд переходы между словами получались гораздо чище. У вас случаем нет возможности сделать зачитку хоть того же Белеющего паруса Алёной, чтобы сравнить развитие?

      p.s. что раздражает в этих синтезаторах, когда в тексте появляется слово из другого языка, оно обычно читается по правилам основного, что заставляет уши сворачиваться в трубочку при озвучивании большинства технических текстов.
      • +1
        Вы в принципе и без установки голоса можете попробовать всё, что вам интересно. Сделать это можно здесь.

        Многоязычные тексты — это вообще проблема для синтезаторов. Как правило, в них для иностранных символов прописываются примерные правила чтения. Правда если это, например, английский голос, то кириллицу он может вообще не читать.

        Русскоязычные же голоса, решают эту проблему по-разному:

        1. Чтение прямой подстановкой русских звуков. «this is a test» как «тхис ис а тест». Например, так читают синтезаторы от «Сакрамент».
        2. Пытаются воспроизвести некое подобие английской речи, то есть слово раскладывается на транскрипционные значки, которым уже соответствуют комбинации русских звуков. «this is a test» как «зис из э тэст». Например, так работают синтезаторы от «Acapela Group», «Nuance» и др.
        3. А ещё бывает что-то среднее, когда синтезатор как-то пытается изменить произношение иностранного текста, но получается у него совсем что-то непохожее на английский или любой другой язык. «voice» как «войке» (так читает Катя от SVOX), «microsoft» как «мичрософт» (так читает Елена от Microsoft) и т.д.


        Но существует ещё такое решение, как переключение голосов в зависимости от языка текста. Как правило, язык текста просто определяется по кодам символов, то есть это работает для языков, имеющих разные алфавиты, например, так можно отличить английский, русский, арабский и иврит. Соответственно движок отправляет кириллицу на русский синтезатор, латиницу на английский, вязь на арабский, а ивритский алфавит на ивритский синтезатор.

        Но потребность в подобном автоматическом переключении — это достаточно редкий пользовательский сценарий, поэтому такие решения не очень распространены среди обычных людей, так как большинству просто не нужны.

        Ещё язык можно определять через предварительно наложенную на текст разметку. Самый очевидный пример — это HTML, где есть все соответствующие теги.

        К слову, в iOS такое автоматическое переключение есть, а вот под Android оно реализовано только в малоизвестном продукте для конкретной пары голосов в конкретном синтезаторе речи, которого даже нет в Play Market.
        • 0
          На сайте acapela я пробовал синтезатор, я могу конечно ошибаться, но субъективно он заметно хуже чем решение от Nuance.
          Касательно переключения, тут возникает проблема что голос будет отличаться. То есть теоретически наверное можно использовать один и тот же голос для разных языков, но почему то такого решения я нигде не видел.
          Еще интересно как формируются сами голоса, наверняка одних фонем недостаточно для такого качества, которое достигается в современных TTS движках.
          И да переход на английский звучит получше у решения от acapela, но общая реализация русского голоса хромает из за окончаний, они выдают уж больно металлический звук.
          • 0
            Нет, объективно Алёна от «Acapela Group» вполне игрок из той же весовой категории, что и Милена от «Nuance» (вернее наоборот, так как Алёна появилась раньше). Здесь уже в значительной степени дело вкуса пользователя.

            Кроме того, у Милены от «Nuance» есть ряд серьёзных проблем, в частности отдельные сочетания звуков читаются неправильно, а отдельные слова могут не произноситься или произноситься не полностью. Например, прочитайте Миленой слова «отмечено» или «задач» и обратите внимание на то, как она произносит звук [ч]. Это скорей белорусское, а не русское произношение. Ну или такое слова как «претензия». Оно будет прочитано «претэ». Причём с «претензией» — это какая-то ошибка на уровне движка, так как аналогичный косяк был ещё у более старого голоса Катерина от ScanSoft, который был предшественником Милены.

            А вот у Алёны таких явных косяков нет. Но я знаю людей, которым нравится Милена, но не нравится Алёна, и наоборот. В общем тут уже вопрос чисто индивидуальный. К тому же под Алёну существуют большие словари коррекции, где уже несколько лет люди целенаправленно поправляют её произношение для проблемных слов. Так что при подключении словаря можно значительно улучшить качество синтеза.

            При мультиязычном чтении и переключении на лету, голоса, действительно, будут отличаться. Более того, востребованным функционалом является отдельная настройка скорости голосов для разных языков, так как носитель русского может хорошо понимать русскую речь и хотеть более быстрого чтения, а вот английские слова для него чужие и их желательно читать медленнее. Однако разные голоса не всеми и не всегда считаются проблемой. Например я, когда работаю с разложением текста на русский и английский синтез порой использую связку вообще из мужского и женского голосов, хотя мог бы сделать хотя бы одинаковый пол, но я просто не считаю это проблемой. По крайней мере, мои требования к самому голосу как таковому приоритетнее, чем к его соответствию голосу для другого языка.

            Проблема сделать единый голос заключается в том, что для этого нужен двуязычный диктор, который должен будет начитать базу для обоих языков. Таких дикторов найти непросто, ну а поскольку функционал этот не очень востребован, то фирмы-производители с этим даже и не заморачиваются.

            В своё время я предлагал Василию Стрельникову поучаствовать в записи двуязычной базы для некоммерческого проекта по разработке синтезатора речи, но для него это, к сожалению, оказалось неинтересно. Ну а где ещё взять двуязычных дикторов лично я не знаю. Тогда как если бы удалось подготовить такую базу, то синтезатор можно было бы сделать. Это было бы уже дело отработанной техники.

            Если вам интересно, то я могу дать ссылку на open source проект на GitHub по разработки синтезатора речи, в т.ч. и русскоязычного. Именно в рамках этого проекта я и собирался использовать англо-русскую базу, которую предлагал записать Стрельникову.
            • 0
              Ну имя Милена, тоже ближе к белорусскому. И букву ч в начале она действительно не выговаривает. Интересно можно ли это как то поправить. Хотя сомневаюсь.

              Было бы очень интересно посмотреть проект на github'e :)
              • +1
                Ни в одной из около десятка реализаций Милены, которые мне приходилось видеть, я не встречал инструмента коррекции произношения, как, например, у синтезаторов «Acapela Group», где для этого есть специальный Lexicon Manager. Встречал только реализацию словаря замен, который просто перед отправкой текста на синтезатор изменяет набор символов, т.е. фокусы типа «км = километров», ну или в продвинутом случае замена на базе регулярных выражений.

                Подобными словарями иногда можно немного поправить произношение, в частности можно сделать замену «претензия» на «прет ензия», что более-менее решит проблему этого слова для синтезаторов Nuance, но всё это достаточно топорно. Механизм проблемы Милены с чтением «ч» я вообще не до конца понимаю, так как слово «задач» читается неправильно, а вот «грач» вполне нормально. Видимо там какие-то проблемы с анализом комбинации соседних букв.

                Open source проект, про который я говорил, называется RHVoice и базируется здесь.

                А вот пара уже собранных версий под Microsoft Speech API 5: 0.2.161 и менее отлаженная, но с бо́льшим числом голосов, 0.4 Alpha 1.

                Вообще ещё есть такой open source синтезатор, как eSpeak. В принципе он по-своему очень интересно сделан и читает более чем на пятидесяти языках практически одинаковым голосом, только вот качество этого голоса для неподготовленного пользователя ниже всякой критики. Любят его за другое. ;-)

                И RHVoice, и eSpeak распространяются на условиях GPL, так что имейте это ввиду.
                • 0
                  Касательно букв Ч меня больше беспокоят слова с ч вначале, вот послушайте запись про парус, которую я выкладывал выше.

                  Спасибо за ссылку, попробую поиграться на досуге, когда он будет. MSAPI не шибко интересует, в виду отсутствия его на других платформах. А вот собрать RHVoice под линукс надо попробовать. С Festival'ем когда то игрался, но качество по сравнению с Аленой это небо и земля. Так что все печально пока на ниве Opensource'a походу.
                  • 0
                    RHVoice под Linux автором в своё время точился, так что со сборкой проблем возникнуть не должно.

                    В принципе могу дать ссылку на уже готовые бинарные файлы, но они для подключения к Speech Dispatcher, а я сомневаюсь, что это вам подходит.
  • +1
    Там в настройках системы можно скачать улучшенный синтез речи (метров 200 на каждый язык). Получше звучать будет.
    • 0
      Основные > Универсальный доступ > Проговаривание > Голоса > Русский > Улучшенное качество
  • 0
    Кстати, уже начали делать приложения с синтезатором. Читалка аудиокниг (английский) itunes.apple.com/us/app/audio-tales/id701575885?ls=1&mt=8
    • 0
      Вот мне читатель нравится, но они не через API
      soundcloud.com/nektovkepke/rnzqhshu3gnb
      • 0
        Ну у голосов ЦРТ есть HTTP API, так что в проектах, где это не очень критично, можно использовать облачный синтез. В принципе, пока в iOS 7 не появился TTS API, многие приложения, типа каких-нибудь голосовых ассистентов, использовали облачный русский синтез от Google. Там используется голос Катя от SVOX (не путать с Катериной от ScanSoft).
  • 0
    Оказывается, можно запустить чтение книжки в ibooks целиком. только экран нельзя выключать.
    iphone-hacks.ru/kak-nastroit-funktsiyu-chteniya-knig-vsluh-v-ios-7/

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

Самое читаемое Разработка