Отправляет email-рассылки с помощью сервиса Sendsay

Юмор, кино и компьютеры

  Все выпуски  

Юмор, кино и компьютеры


Синтез речи на Android

 

Давно (лет 10 назад) я занимался синтезом речи - программировал его (через Windows SAPI и собственный движок) и вообще активно испытывал генерацию речи. Потом занялся другим. А сейчас посмотрел, что есть для синтеза в Android. Если кратко, то абсолютно ничего не изменилось. Ничего не стандартизовано.

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

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

Если вставлять слова на другом языке, то прочитать их с близким к оригиналу произношением и тем же голосом нельзя. То есть, например, английский текст читается только с очень сильным русским акцентом, что не всегда уместно, либо другим диктором. Это не всегда ужасно, но достигнуть именно нужного звучания ни в одной программе невозможно (в тех, которые я смотрел, если кто-то знает ту, где это реально - напишите).

При этом работа правильной системы синтеза голоса должна быть очень проста. Голосовой движок получает набор звуков (например, в системе IPAASCII, это запись транскрипции всех языков сочетанием английских букв и некоторых базовых символов), их частоты, длительности и громкости (включая меняющиеся во время произнесения звука, если требуется), опции. А обратно выдаёт массив амплитуд (грубо говоря, wav-файл) и, возможно, массив с положением губ в каждый момент для анимации, а также массив с позицией звуков в исходном тексте (для подсвечивания читаемого места и синхоонизации с графикой).

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

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

Это необходимо, например, при создании аудиокниг, озвучивании видеороликов или игр, в компьютерном пении и так далее.

Кстати, в Android до сих пор очень мало голосов. По сути два (если не считать небольшие вариации, которые почти не слышны) на движке Google, и около четырёх (тоже с минимальными вариациями) на ещё одном бесплатном движке, плюс есть один платный движок для русского языка. Этого мало для многих применений.

Почти всё остальное - частные движки, встроенные в программы, то есть недоступные остальным программистам и пользователям. В то же время, использований хорошего синтеза речи множество, например, можно так озвучивать игры. Это не очень критично для обычных реплик (можно использовать записанные актёрами варианты), но важно для динамического контента (например, для возможной вставки чисел в реплику или для использования чатбота внутри игры).


В избранное