Методы для настройки синтезированной речи

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

Некоторые усовершенствованные методы, описанные в этой главе, поддерживаются только синтезом речи Углерода API, несмотря на то, что любое приложение, имеющее доступ к платформе Прикладных служб, может использовать их. Если Вы не решили, который API использовать, необходимо считать Синтез речи Углерода и Какао APIs, Сравненный для обнаружения, который API поддерживает уровень настройки, Вы хотите реализовать. Другие методы, описанные в этой главе, включают использование встроенных речевых команд и других текстовых модификаторов, которые доступны всем приложениям.

Скорректируйте настройки речевого канала Используя синтез речи углерода API

Синтез речи Углерода API позволяет Вам добираться и атрибуты заранее составленной речи, такие как уровень и объем, и указывать другие настройки на речевых каналах, таких как режим ввода. В дополнение к нескольким функциям, фокусирующимся на определенных атрибутах, синтез речи Углерода, который API определяет GetSpeechInfo и SetSpeechInfo функции, реагирующие на речевой канал с помощью атрибута, установки или другого значения, указанного в селекторном параметре. В этом разделе описывается можно использовать специфичные для атрибута функции и SetSpeechInfo функция для корректировки речевых атрибутов и других настроек на речевых каналах.

Синтез речи Углерода API определяет следующие функции, чтобы получить и установить уровень и атрибуты подачи на речевом канале:

Например, приложение могло бы получить новое речевое значение уровня от пользователя и использовать его для изменения речевого уровня, используемого речевым каналом, как показано ниже:

/* fRateField is associated with a button in the UI and fCurSpeechChannel is a pointer to a speech channel structure created earlier in the application. */
Fixed theNewValue   = [fRateField doubleValue] * 65536.0;
theErr = SetSpeechRate(fCurSpeechChannel, theNewValue);

Похожим способом приложение может использовать SetSpeechPitch функционируйте для установки атрибута подачи речевого канала в новое значение. Чтобы получить или установить другие речевые атрибуты и настройки на речевом канале, однако, Вы используете GetSpeechInfo и SetSpeechInfo функции с надлежащими селекторами. Одно исключение к этому является атрибутом уровня, который может быть получен и устанавливает использование любого GetSpeechRate и SetSpeechRate упомянутые выше функции или SetSpeechInfo функция с soRate селектор, как показано ниже:

/* As above, fRateField is associated with a button in the UI and fCurSpeechChannel is a pointer to a speech channel structure created earlier in the application. */
Fixed theNewValue   = [fRateField doubleValue] * 65536.0;
theErr = SetSpeechInfo(fCurSpeechChannel, soRate, &theNewValue);

Селекторы, определенные в синтезе речи Углерода API, реагируют на широкий диапазон свойств, связанных с речевыми каналами. Селекторы делятся на следующие категории:

Используйте встроенные речевые команды для подстраивания разговорного вывода

Как описано в Речевом Качестве Управления Используя Встроенные Речевые Команды, Вы используете встроенные команды для подстраивания произношения отдельных слов в тексте, который приложение передает синтезатору. Даже при использовании только нескольких встроенных речевых команд, описанных в этом разделе можно значительно увеличить понятность разговорного вывода приложения. Этот раздел обеспечивает обзор встроенного речевого синтаксиса команды, перечисляет доступные команды и иллюстрирует, как использовать их для достижения различных эффектов.

Обратите внимание на то, что некоторым встроенным речевым командам обеспечил функциональные эквиваленты механизм селектора Углерода (для полного списка доступных селекторов, посмотрите менеджера по Синтезу речи Референса.) Это означает, что для достижения некоторых эффектов можно или вставить встроенную команду в текст, или можно передать эквивалентный селектор Углероду SetSpeechInfo функция. Если Вы используете SetSpeechInfo функция (описанный в Корректируют Настройки Речевого канала Используя Синтез речи Углерода API), эффект применяется ко всей речи, проходящей через текущий речевой канал согласно возможностям синтезатора. При использовании встроенной команды для достижения того же эффекта, однако, это применяется только к слову, которому сразу предшествует встроенная команда.

Встроенные речевые разделители команды

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

Значение по умолчанию начинается и заканчивается, строки разделителя команды, распознанные синтезатором MacinTalk, “[[“и “]] “, соответственно. Можно изменить эти строки при необходимости, но необходимо заботиться для использования печатаемых символов, что Вы не ожидаете видеть в тексте своих порядка подачи заявки. Кроме того, при изменении разделителей по умолчанию убедиться возвратить их к символам по умолчанию, когда Вы закончили с текстом, потому что изменение является персистентным для текущего речевого канала. Например, если Вы будете ожидать, что квадратные скобки появятся в тексте, то Вы будете отправлять к синтезатору, можно изменить разделители команды по умолчанию на строки, содержащие другие печатаемые символы, естественно не происходящие в тексте.

Можно отключить обработку всех встроенных команд путем установки обоих начинание и закончить разделители команды к двум байтам NUL. Вы могли бы хотеть сделать это, если Ваше приложение говорит текст, над которым Вы не имеете никакого контроля, и Вы абсолютно уверены, что текст не содержит встроенных команд. Для отключения обработки встроенных команд программно используйте soCommandDelimiter селектор с SetSpeechInfo функция, как показано ниже:

// Create a structure to hold the new delimiter values
DelimiterInfo MyNewDelimiters;
MyNewDelimiters.startDelimiter[0] = 0;
MyNewDelimiters.startDelimiter[1] = 0;
MyNewDelimiters.endDelimiter[0] = 0;
MyNewDelimiters.endDelimiter[1] = 0;
SetSpeechInfo(CurrentSpeechChannel, soCommandDelimiter, &MyNewDelimiters);

Обзор встроенного речевого синтаксиса команды

Все встроенные команды состоят из кода команды с 4 символами и параметра, включенного начинанием и строками разделителя команды конца. Например, emph команда требует параметра, говорящего синтезатору увеличивать или уменьшать акцент, с которым можно произнести следующее слово, как показано ниже:

[[emph +]] + параметр говорит синтезатору увеличивать акцент для следующего слова.

Больше чем одна команда может произойти в единственной паре строк разделителя, если они разделяются точками с запятой, как показано ниже:

[[emph +; rate 165]] Вместе, эти команды говорят синтезатору произносить следующее слово или фразу с увеличенным акцентом и на уровне 165 слов в минуту.

Параметр может состоять из строки, числового типа или типа операционной системы, и может сопровождаться +, или - символы (точный формат параметра зависит от команды, с которой это связано). Некоторые команды позволяют Вам использовать параметр для указания или абсолютного значения или относительного значения. Например, volm команда позволяет Вам указывать определенный объем или сумму, которой можно увеличить или уменьшить текущий объем, как показано ниже:

[[volm 0.3]] Это наборы команд объем, с которым следующее слово произнесено к 0,3.

[[volm +0.1]] Эта команда увеличивает объем, с которым следующее слово произнесено 0,1.

Синтезатор речи игнорирует весь пробел во встроенной команде, таким образом, можно вставить столько пробелов, сколько необходимо сделать текст команды более читаемым.

Кроме того, этот документ использует следующие символы для выражения синтаксиса встроенных речевых команд (эти символы не появляются в фактических встроенных речевых командах):

  • Символы <and> включают элементы, представляющие логические единицы, такие как строка, символ, целое число или действительное значение. При вставке встроенной команды в текст Вы заменяете логическую единицу фактическим значением. Например, Вы могли бы заменить»<RealValue>“с 3.0. Для точных определений каждой логической единицы см. формальное описание синтаксиса в Синтаксисе Встроенных Речевых Команд.

  • | символ означает “или" и появляется между элементами в списке возможных элементов, любой, единственный которого может использоваться. Например, emph команда принимает или + символ или - символ для его параметра. Поэтому синтаксис emph команда выражена как emph + | -.

  • [И] символы включают дополнительный элемент или список элементов. Например, rate команда принимает, что дополнительное добавление + или - символ к его числовому параметру указывает изменение относительно текущей стоимости. Поэтому синтаксис rate команда выражена как rate [+ | -] <RealValue>.

  • Элементы, сопровождаемые символом замещающего знака (...), могут быть повторены один или несколько раз.

OS X встроенные речевые команды

Таблица 3-1 описывает встроенные речевые команды, их параметры, эквивалентные селекторы информации о речи (если они существуют), и в которых версиях OS X команды доступны. Синтаксис каждой команды в Таблице 3-1 выражен с помощью соглашений, описанных в Обзоре Встроенного Речевого Синтаксиса команды.

Таблица 3-1  Встроенные речевые команды

Команда

Синтаксис и описание

Селектор

char

char NORM | LTRL

Наборы команд текстового режима говорящий слово режим речевого канала. Когда NORM параметр используется, синтезатор пытается автоматически преобразовать слова в речь. Это - наиболее основная функция синтезатора. Когда LTRL параметр используется, синтезатор говорит отдельные символы каждого слова, число и символ после команды (все другие встроенные команды обычно обрабатываются). Например, чтобы заставить синтезатор произносить слово «кошка» как «CAT», Вы включали бы следующее в текстовый буфер или строку:

[[char LTRL]] cat [[char NORM]]

SoCharacterMode

cmnt

cmnt [<Character>...]

Команда комментария проигнорирована синтезаторами речи. Это позволяет Вам добавить произвольное содержание к текстовому буферу, который никогда не будет включаться в разговорный вывод. Обратите внимание на то, что сам текст комментария должен быть включен в начинании и разделителях команды конца cmnt команда.

[[cmnt This is a comment that will be ignored by the synthesizer.]]

Ни один

ctxt

ctxt [WSKP | WORD | NORM | TSKP | TEXT]

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

Команда контекста распознает два режима: пословно и фрагмент текста. В обоих режимах Вы используете надлежащий параметр «пропуска» (WSKP или TSKP) идентифицировать текст, обеспечивающий контекст и WORD или TEXT параметр для идентификации слова или фразы, произношение которой затронуто контекстом. Синтезатор анализирует всю фразу или предложение для определения корректного произношения слова или фразы, но не говорит части текста, отмеченного, как “пропущено “. Используйте [[ctxt NORM]] команда для сигнализации возврата к обрабатывающему ввод режиму по умолчанию.

В пословно режиме синтезатор анализирует выбор полного текста для определения части речи (такой как существительное или глагол) указанного слова. Синтезатор произносит слово согласно своей части речи, но это не делает интонации или корректировок продолжительности произношения. Например, слово «координирует», объявлен по-другому в зависимости от того, используется ли оно в качестве существительного или глагола. Два предложения ниже иллюстрируют, как использовать команду контекста для сообщения синтезатора который произношение слова использовать:

[[ctxt WSKP]] GPS provides [[ctxt WORD]] coordinates. [[ctxt NORM]]

[[ctxt WSKP]] The post office [[ctxt WORD]] coordinates [[ctxt WSKP]] its deliveries. [[ctxt NORM]]

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

[[ctxt TSKP]] Your [[ctxt TEXT]] first step [[ctxt TSKP]] should be to relax. [[ctxt NORM]]

[[ctxt TSKP]] To relax should be your [[ctxt TEXT]] first step. [[ctxt NORM]]

Ни один

dlim

dlim <BeginDelimiter> <EndDelimiter>

Команда разделителя изменяет последовательности символов, указывающие начало и конец всех последующих встроенных речевых команд. Новые разделители вступают в силу после списка команд, содержащего dlim команда была полностью обработана. Если строки разделителя пусты, ошибка сгенерирована. Если Вы хотите отключить встроенную обработку команды для остатка от текстового буфера, можно передать два байта NUL в BeginDelimiter и EndDelimiter параметры.

[[dlim $$ $$]

soCommandDelimiter

emph

emph + | -

Команда акцента заставляет синтезатор произносить следующее слово с большим или меньшим акцентом, чем это в настоящее время использует. + параметр увеличивает акцент и - акцент уменьшений параметра.

Например, для подчеркивания слова «не» в следующей фразе используйте emph команда следующим образом:

Do [[emph +]] not [[emph -]] over tighten the screw.

Ни один

inpt

inpt TEXT | PHON | TUNE

Командные коммутаторы режима ввода обрабатывающий ввод режим к текстовому режиму, режиму фонемы или TUNE форматируют режим. Обратите внимание на то, что некоторые синтезаторы могут определить дополнительные режимы речевого ввода, которые можно использовать. Обрабатывающий ввод режим по умолчанию является текстовым, и необходимо всегда использовать [[inpt TEXT]] команда для возвращения к текстовому режиму после того, как Вы закончены, обеспечив содержание в одном из других режимов. В режиме фонемы синтезатор интерпретирует символы как представление фонем (перечисленный в Фонемах). В режиме формата TUNE синтезатор распознает тот же набор фонем, но также и интерпретирует дополнительную информацию, указывающую точный разговорный контур или мелодию, для слов. Для получения дополнительной информации о формате TUNE, посмотрите Использование Формат TUNE для Предоставления Сложных Контуров Подачи.

Например, для предоставления фонематического представления имени, которое часто неправильно произносят синтезаторы можно использовать inpt команда следующим образом:

My name is [[inpt PHON]] AY1yIY2SAX [[inpt TEXT]].

soInputMode

nmbr

nmbr NORM | LTRL

Наборы команд режима числа говорящий число режим синтезатора. NORM параметр заставляет синтезатор говорить номер 46 как «сорок шесть», тогда как LTRL параметр заставляет синтезатор говорить то же число как “четыре шесть “.

Например, чтобы прояснить, что следующее 7-разрядное число является телефонным номером, можно использовать nmbr команда, чтобы сказать синтезатору говорить каждую цифру отдельно, следующим образом:

Please call me at [[nmbr LTRL]] 5551990 [[nmbr NORM]].

soNumberMode

pbas

pbas [+ | -] <RealValue>

Базовая команда подачи изменяет текущую речевую подачу для речевого канала к указанному действительному значению. Если значению подачи предшествуют + или - символ, речевая подача корректируется относительно ее текущей стоимости. Базовые значения подачи всегда являются положительными числами в диапазоне 1 000 - 127 000.

soPitchBase

pmod

pmod [+ | -] <RealValue>

Команда модуляции подачи изменяет диапазон модуляции для речевого канала, на основе указанного действительного значения глубины модуляции.

soPitchMode

rate

rate [+ | -] <RealValue>

Речевые наборы команд уровня речевой уровень на речевом канале к указанному действительному значению. Речевые уровни падают в диапазоне 0.000 к 65 535,999, который переводит в диапазон 50 - 500 слов в минуту. Если уровню предшествуют + или - символ, речевой уровень увеличен или уменьшен относительно его текущей стоимости.

soRate

rset

rset <32BitValue>

Команда сброса сбрасывает речь речевого канала и приписывает значениям по умолчанию. Параметр не имеет никакого эффекта; это должно быть установлено в 0.

soReset

slnc

slnc <32BitValue>

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

ни один

sync

sync <32BitValue>

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

Можно использовать sync команда для инициирования обратного вызова время от времени кроме определенных встроенными обратными вызовами (такими как фонема и сделанные речью обратные вызовы). Например, Вы могли бы хотеть выполнить некоторую пользовательскую обработку каждый раз, когда на дате говорят для выделения ее места на графической временной шкале. Чтобы сделать это, Вы определили бы процедуру обратного вызова синхронизации и значения refcon, и вставили бы a sync команда после каждой даты в тексте, следующим образом:

In 1066 [[sync 0x000000A1]], William the Conqueror invaded England and by 1072 [[sync 0x000000A2]], the whole of England was conquered and united.

soSyncCallback

vers

vers <32BitValue>

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

ни один

volm

volm [+ | -] <RealValue>

Наборы команд динамического диапазона речевых сигналов динамический диапазон речевых сигналов на текущем речевом канале к указанному действительному значению. Если значению объема предшествуют + или - символ, динамический диапазон речевых сигналов увеличен или уменьшен относительно его текущей стоимости.

soVolume

xtnd

xtnd <OSType> [<Parameter> ...]

Специфичное для синтезатора xtnd команда позволяет другим специфичным для синтезатора командам быть встроенными в текст. Первый параметр (OSType) должен быть создатель ID синтезатора. Остающиеся дополнительные параметры специфичны для синтезатора.

soSynthExtension

Встроенные речевые ошибки команды

В то время как встроенные речевые команды обрабатываются, ошибки можно было бы обнаружить и сообщить Вашему приложению. Если Вы включаете ошибочные обратные вызовы с помощью SetSpeechInfo функция с soErrorCallBack селектор, Ваша ошибочная процедура обратного вызова будет выполняться один раз для каждой ошибки, обнаруживающейся (для получения дополнительной информации об ошибочном обратном вызове, посмотрите SpeechErrorProcPtr). Если Вы не включаете ошибочные обратные вызовы, можно все еще получить информацию об этих ошибках путем вызова GetSpeechInfo функция с soErrors селектор.

Во время обработки встроенных речевых команд могут быть обнаружены следующие ошибки:

Код результата

Значение

Описание

badParmVal

-245

Значение параметра недопустимо

badCmdText

-246

Встроенный синтаксис команды или проблема параметра

unimplCmd

-247

Встроенная команда не реализована на синтезаторе

unimplMsg

-248

Нереализованное сообщение

badVoiceID

-250

Указанная речь не была предварительно загружена

badParmCount

-252

Неправильное число встроенных аргументов команды

Используйте модификаторы фонемы для корректировки произношения

Как описано в Представлениях Речи, платформа Синтеза речи позволяет Вам представлять некоторых или все слова в строке или буфере как фонемы. При предоставлении фонематического представления слова Вы указываете точную комбинацию звуков, которые Вы хотите, чтобы синтезатор объявил. Кроме того, можно добавить модификаторы фонемы, чтобы увеличить или уменьшить напряжение, с которым объявлены фонемы и слова.

Вспомните, что фонемы представлены комбинациями символов верхнего регистра или символов нижнего регистра, таких как OW для длинного звука «o» в английском слове “судно “. (Другие языки используют различные фонемы и символы фонемы; этот документ внимание на набор североамериканских английских фонем синтезатор MacinTalk распознает.) Полный набор фонем перечислен в Фонемах.

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

В фонематическом представлении слова или фразы, можно вставить модификаторы, позволяющие Вам корректировать напряжение, которое синтезатор помещает в слова и слоги. Эти модификаторы вызывают просодическими средствами управления.

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

Таблица 3-2 перечисляет доступные просодические символы управления и описывает, как они изменяют отдельные фонемы. Если требуется слушать разговорную версию какого-либо из примеров в Таблице 3-2, можно скопировать его в текстовый документ Редактирования, предшествовать ему с [[inpt PHON]] команда, и выбирает Speech> Start Speaking Text от пункта меню Services.

Таблица 3-2  Просодические символы управления и описания

Категория

Действие

Символ

Описание и пример

Лексическое напряжение

Основное напряжение

1

Отмечает основное напряжение в слове

Например, слово «разработчик» произнесено с основным напряжением на втором слоге, как показано ниже:

dIHv1EHlAXpAXr

Вторичное напряжение

2

Отмечает вторичное напряжение в слове

Например, слово «приложение» произнесено с основным напряжением на третьем слоге и вторичным напряжением на первом слоге, как показано ниже:

2AEplIHk1EYSIXn

Повреждения слога

Метка слога

= (равный)

Слог Знаков повреждается в слове

Например, слово «дешево» произнесено с тонким повреждением слога между «дешевым» и «ly». Чтобы гарантировать, что синтезатор произносит это слово правильно (а не с повреждением слога между «chea» и «сгибом»), можно вставить метку слога, как показано ниже:

C1IYp=lIY

Выдающееся положение Word

Снятый стресс

~ (тильда)

Отмечает слова, у которых нужно снять стресс в предложении

У слов, переносящих минимальную информацию, можно снять стресс для уменьшения их выдающегося положения в предложении. Например, в предложении, “Что находится в сумке? “, слова «в» и неважного, относительно «Какой», и «сумка». Поэтому «в» и банка быть отмеченным как не нуждающийся в напряжении, как показано ниже:

_w1UXt _1IHz ~2IHn ~nAX _b1AEg?

Нормальное напряжение

_ (подчеркивание)

Отмечает слова, которые должны получить нормальное напряжение

Слова, переносящие информацию, должны быть произнесены с нормальным напряжением для дифференциации их от менее важных слов. Например, в предложении, “Что находится в сумке? “, слова, “Что “, ““, и «сумка», должен говориться с нормальным напряжением, потому что они передают больше информации слушателю, чем слова «в» и ““. Поэтому эти переносящие информацию слова могут быть отмечены как нуждающийся в нормальном напряжении, как показано ниже:

_w1UXt _1IHz ~2IHn ~nAX _b1AEg?

Решительное напряжение

+ (плюс)

Отмечает слова, требующие особого внимания

Самые важные слова в предложении должны получить решительное напряжение, чтобы заставить их стоять из остальной части предложения. Например, в предложении “Никогда не делают этого снова! “, слово, «которому» можно придать дополнительное значение для привлечения внимания к нему, как показано ниже:

~dOWnt ~1EHvAXr ~d1UW +DAEt _AXg1EHn!

Используйте пунктуацию правильно

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

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

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

Табличные 3-3  Эффекты знаков препинания на синтезированной речи

Символ

Эффект на подачу

Эффект на синхронизацию

,

Повышение подачи

Короткая пауза следует

(

Запустите диапазон сокращенной подачи

Короткая пауза следует

)

Диапазон конца сокращенной подачи

Короткая пауза следует

.

Падение подачи

Пауза следует

"

Разверните диапазон подачи

Короткая пауза предшествует вводной кавычке и следует за заключительной кавычкой

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

Используйте формат TUNE для предоставления сложных контуров подачи

В дополнение к поддержке режима обработки ввода фонемы, синтезатор MacinTalk, доступный в OS X v10.2 и более поздние поддержки режим обработки ввода TUNE. Этот режим принимает директивы в формате TUNE, позволяющем Вам предоставлять сложный контур подачи или мелодию, с которой нужно говорить на слове или фразе. Такая мелодия может представлять подачу и изменения речевого уровня, которые Вы слышите, когда лицо говорит выразительным способом. Например, взрослые, говорящие с маленькими детьми часто, варьируются подача своей речи намного больше, чем они делают при разговоре с другими взрослыми. Как описано в Модификаторах Фонемы Использования для Корректировки Произношения модификаторы фонемы могут использоваться для корректировки напряжения, помещенного в определенные фонемы, но Вы не можете использовать их для порождения многократных изменений в подаче во время произношения единственной фонемы. Чтобы сделать это, необходимо использовать формат TUNE.

Apple обеспечивает Повторение После Меня инструмент разработчика, чтобы помочь Вам создать набор символов, описывающих мелодию. Используя Повторение После Меня приложение (расположенный в /Developer/Applications/Utilities/Speech), можно записать произнесение, показывающее желаемый контур подачи, и используйте это для формирования любого другого произнесения в приложении.

Подобный пути Вы вводите и выходите из режима обработки ввода фонемы, Вы используете inpt встроенная команда для включения и выключения режима обработки ввода TUNE. В частности Вы вставляете [[inpt TUNE]] перед содержанием в TUNE форматируют и вставляют [[inpt TEXT]] после него. Формат TUNE распознает тот же набор символов фонемы, используемых в режиме обработки ввода фонемы (см. Фонемы для описания этих символов).

Формат TUNE определяет синтаксис команды, который Вы используете для указания подачи и атрибутов продолжительности для каждой фонемы. Каждая фонема может сопровождаться парой фигурных скобок, включая единственный атрибут продолжительности, которому предшествует символ «D», и произвольное число атрибутов подачи, которым предшествует символ “P. “атрибут продолжительности, указывает общую продолжительность фонемы в миллисекундах. Каждый атрибут подачи состоит из пары чисел, разделенных двоеточием. Первое число является десятичным значением, указывающим подачу в герц (Гц), и второе число является целым числом, указывающим расположение той подачи в фонеме, выраженной как целочисленный процент общей продолжительности фонемы.

Для иллюстрирования синтаксиса формата TUNE рассмотрите предложение, “Действительно ли Вы уверены, что чистили зубы? “Произношение по умолчанию этого предложения совершенно понятно, но интонация является неинтересной. (При чтении этого документа в Safari, Предварительном просмотре или XCode, выберите “Are you sure you brushed your teeth? “и выберите Speech> Start Speaking Text от пункта меню Services для слушания произношения по умолчанию.) Предполагают, что Вы хотите, чтобы это предложение говорилось, поскольку родитель мог бы говорить его с дочерним элементом с акцентом на «верный» и преувеличенное повышение подачи через конец предложения. Используя Повторение После Меня приложение, можно записать лицо, говорящее предложение таким образом, применить получающуюся подачу и информацию о продолжительности к тексту, и получить представление в формате TUNE. После этого процесса Вы могли бы закончить с чем-то подобным следующему:

[[inpt TUNE]]
~
AA {D 120; P 176.9:0 171.4:22 161.7:61}
r {D 60; P 166.7:0}
~
y {D 210; P 161.0:0}
UW {D 70; P 178.5:0}
_
S {D 290; P 173.3:0 178.2:8 184.9:19 222.9:81}
1AX {D 280; P 234.5:0 246.1:39}
r {D 170; P 264.2:0}
~
y {D 200; P 276.9:0 274.9:17 271.0:50}
UW {D 40; P 265.0:0 264.3:50}
_
b {D 140; P 263.6:0 263.5:13 263.3:60}
r {D 110; P 263.1:0 260.4:43}
1UX {D 30; P 256.8:0 256.8:6}
S {D 190; P 256.1:0}
t {D 20; P 252.0:0 253.6:47}
~
y {D 30; P 255.5:0 257.8:45}
AO {D 40; P 260.6:0 260.0:56}
r {D 40; P 259.5:0}
_
t {D 190; P 251.3:0 250.0:16 245.9:68}
1IY {D 260; P 243.4:0 248.1:8 286.1:72 288.5:84}
T {D 220; P 291.6:0 262.8:27 220.0:67 184.8:100}
? {D 300}
[[inpt TEXT]]

Для слушания этой версии предложения выберите строки выше (убедиться включать “[[inpt TUNE]]‘‘вначале и “[[inpt TEXT]]“в конце), скопируйте их и вставьте их в текстовый документ Редактирования. Удостоверьтесь, что все строки все еще выбраны и затем выбирают Speech> Start Speaking Text от пункта меню Services в текстовом меню Edit.

Формат TUNE также включает дополнительные настройки, описывающие начинающееся значение и диапазон подачи, выраженной в герц и речевом уровне, выраженном в словах в минуту. Можно использовать эти настройки для утверждения подачи и условий уровня, имевших силу, когда Вы создали мелодию. Если любая из этих настроек будет иметь ненулевые значения, то синтезатор будет масштабировать подачу и значения атрибута продолжительности, которые Вы предоставляете для фонем согласно речевым условиям в действительности во время синтеза. Это походит на перемещение песни к различному ключу и игре его в различном темпе. Если обе из этих настроек отсутствуют, синтезатор интерпретирует подачу и значения атрибута продолжительности как литеральные значения, которые должны быть воспроизведены точно, который походит на игру песни в ключе и музыкального размера, в котором это было составлено.

Синхронизируйте речь со специализированными действиями

Как упомянуто в Уведомлениях, Обратных вызовах и Речевой Синхронизации, можно синхронизировать разговорный вывод приложения с другими задачами в приложении. И Какао и синтез речи Углерода, APIs обеспечивает механизмы, которые можно использовать для получения уведомлений, когда, например, слово или фонема собирается говориться или просто говорился. В этом разделе описывается можно получить эти уведомления и некоторые способы, которыми Вы могли бы использовать их.

NSSpeechSynthesizer класс определяет несколько методов делегата, которые можно использовать для синхронизации задач со связанными с речью действиями. Например, можно реализовать speechSynthesizer:willSpeakWord:ofString метод делегата выделить слово, поскольку на этом говорят. Для примера реализации, делающей это, см. Перечисление 2-2. NSSpeechSynthesizer класс также определяет speechSynthesizer:willSpeakPhoneme и speechSynthesizer:didFinishSpeaking методы делегата, которые можно использовать для обнаружения, когда фонема собирается говориться и когда NSSpeechSynthesizer объект закончил говорить, соответственно. Перечисление 2-2 включает реализацию speechSynthesizer:didFinishSpeaking метод делегата, сбрасывающий курсор к началу строки текста и повторно включающий кнопки в окне приложения.

API синтеза речи Углерода определяет несколько типов функции обратного вызова, которые можно использовать, чтобы создать и установить функции обратного вызова в речевом канале. Для каждого события, на которое Вы хотите ответить, Вы создаете функцию обратного вызова, придерживающуюся прототипа, определенного указателем обратного вызова (см. менеджера по Синтезу речи Референса по этим прототипам). Затем Вы устанавливаете каждую функцию обратного вызова в речевом канале путем передачи надлежащего селектора SetSpeechInfo функция, как показано ниже:

// Install MyWordCallback callback function in the current speech channel
error = SetSpeechInfo(currentSpeechChannel, soWordCallBack, MyWordCallback);

Когда менеджер по Синтезу речи встречается с одним из событий, обработанных этими обратными вызовами, оно вызывает функцию обратного вызова, которую Вы установили, позволив Вам синхронизировать пользовательскую обработку с тем речевым событием. Шесть типов функции обратного вызова определили в синтезе речи Углерода, API упоминается ниже, каждый сопровождаемый селектором, который Вы используете для установки функции обратного вызова:

Обратный вызов

Селектор

SpeechWordProcPtr

soWordCallBack

SpeechPhonemeProcPtr

soPhonemeCallBack

SpeechDoneProcPtr

soSpeechDoneCallBack

SpeechErrorProcPtr

soErrorCallBack

SpeechSyncProcPtr

soSyncCallBack

SpeechTextDoneProcPtr

soTextDoneCallBack

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

Синтез речи Углерода API использует SpeechErrorProcPtr указатель для вызова ошибочной функции обратного вызова речевого канала, когда это встретится с синтаксическими ошибками в тексте встроенные команды буфера (см. Встроенные Речевые Ошибки Команды для списка возможных ошибок). Если существуют ошибки во встроенном пользовательском предоставлении команд, в дополнение к помощи Вам найти такие ошибки во время разработки приложений, этот обратный вызов позволяет Вам отображать предупреждение или выполнять некоторое другое действие.

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

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

Избегите перекрестных помех

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

В то время как VoiceOver работает, существует автоматический арбитражный механизм на месте, заставляющий весь другой разговорный вывод останавливаться, когда VoiceOver начинает говорить. Поскольку VoiceOver обеспечивает интерфейс доступности для OS X, и слабовидящие пользователи полагаются на него, чтобы переместиться и управлять системой, является надлежащим дать приоритет ему над другими типами разговорного вывода.

В то время как VoiceOver не работает, однако, там не существует никакой арбитражный механизм. Поэтому это - хорошая идея для Вашего приложения, чтобы установить, говорят ли другое приложение или процесс в настоящее время прежде, чем начать говорить. И синтез речи Углерода и Какао APIs обеспечивает способ сделать это.

Если Вы используете Какао NSSpeechSynthesizer класс для создания разговорного вывода можно вызвать isAnyApplicationSpeaking метод класса узнать, производят ли другое приложение или системный компонент (такой как VoiceOver) в настоящее время речь. Этот метод возвращает булево значение, которое Ваше приложение может использовать для решения, когда является надлежащим говорить. В зависимости от потребностей Вашего приложения Вы могли бы использовать этот метод следующим образом:

if ([NSSpeechSynthesizer isAnyApplicationSpeaking]) {
    // Wait.
} else {
    [_mySpeechSynthesizer startSpeakingString:myTextToSpeak];
}

При использовании синтеза речи Углерода API Вы используете комбинацию двух функций, чтобы определить, говорит ли в настоящее время какой-либо другой компонент приложения или системы. Во-первых, используйте SpeechBusySystemWide функция для получения общего количества речевых каналов (включая приостановленные речевые каналы), которые в настоящее время синтезируют речь на компьютере. Это включает речевые каналы, которые менеджер по Синтезу речи автоматически создает в ответ на SpeakString функционируйте и все речевые каналы, которые использует Ваше приложение. Чтобы узнать, существуют ли другие приложения или процессы, в настоящее время производящие речь, поэтому, необходимо вычесть речевые каналы, которые приложение использует от числа речевых каналов, от которых Вы добираетесь SpeechBusySystemWide. Для получения общего количества речевых каналов, связанных с приложением, используйте SpeechBusy функция, как показано ниже:

short totalChannels, myTotalChannels;
totalChannels = SpeechBusySystemWide();
myTotalChannels = SpeechBusy();
if ((totalChannels - myTotalChannels) > 0) {
    // Wait.
} else {
    SpeakText(mySpeechChannel, myTextToSpeak, strlen(myTextToSpeak));
}

Четыре способа улучшить разговорный вывод

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

При просмотре этого документа в Safari, Предварительном просмотре или XCode, можно слушать любой пример в этом разделе путем выбора его и затем выбора Speech> Start Speaking Text от пункта меню Services в Меню приложения. Если требуется экспериментировать с выборками, один способ сделать, это должно ввести или скопировать и вставить их в текстовое Окно редактирования. После внесения изменений, и Вы хотите слушать результат, выбрать его и выбрать Speech> Start Speaking Text от пункта меню Services в текстовом меню Edit.

Скорректируйте произношение неприятных слов

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

Несмотря на то, что можно выбрать отдельные фонемы и создать фонематическое представление слова «вручную», обычно более эффективно запуститься с фонематического представления синтезатора по умолчанию и скорректировать его по мере необходимости. Это вызвано тем, что синтезатор часто неправильно произносит только одну или две фонемы, одним словом, что означает, что остающиеся фонемы точны.

Например, произношение по умолчанию имени «Мэттиас» помещает напряжение в первый слог и объявляет первое тем же как в английском слове “родительский элемент “. (Фонематическое представление этого произношения m1AAtIYIXs.) Для слушания произношения по умолчанию слушайте разговорную версию следующего предложения:

My name is Matthias.

Если бы Вы хотели изменить произношение так, чтобы напряжение было на втором слоге, и первое ““ походит в «приблизительно», то Вы изменили бы фонематическое представление имени к mAXt1IYIXs. Чтобы услышать, как это изменяет произношение синтезатора, слушайте разговорную версию следующего предложения:

My name is [[inpt PHON]]mAXt1IYIXs[[inpt TEXT]].

Позвольте пользователю нагнать

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

Добавление пауз к синтезированной речи является прежде всего вопросом вставки модулей тишины в определенных местах в тексте. Можно сделать это любым из следующих способов:

  • Используйте надлежащую пунктуацию в предложениях. Корректное использование запятых, двоеточий и точек с запятой так же важно для слушателей, как это для читателей.

    Слушайте обе версии предложения ниже:

    Today I feel well yesterday I felt terrible.

    Today I feel well; yesterday I felt terrible.

    Вторая версия передает сопоставление двух состояний условия докладчика намного более ясно, чем первая версия.

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

    Слушайте следующее длинное предложение:

    After you insert a section break, you can use the layout tool (located in the Tools menu) to format the new section, which can have different margins and numbers of columns than other sections in the document.

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

    After you insert a section break, you can use the layout tool to format the new section. The layout tool is located in the Tools menu. Each section can have different margins and numbers of columns than other sections in the document.

  • Используйте slnc (тишина) встроила речевую команду. Можно добавить произвольную сумму тишины где угодно в тексте путем вставки [[slnc x]] команда (где x много миллисекунд).

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

    Don't forget to bring your hat, sunglasses, sandals, and towel.

    Теперь слушайте то же предложение, с 400 миллисекундами тишины, вставленной между перечисленными элементами, и заметьте слушание каждого элемента более отчетливо:

    Don't forget to bring your hat, [[slnc 400]] sunglasses, [[slnc 400]] sandals, [[slnc 400]] and towel.

Сосредоточьте внимание пользователя

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

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

On May tenth, you have a meeting in Cupertino. On June tenth, you have a meeting in Tokyo. On July tenth, you have a meeting in Paris.

Теперь слушайте эти три предложения со встроенными командами, подчеркивающими важные слова и преуменьшающими роль менее - важные, повторные слова:

On May tenth, you have a meeting in Cupertino. On [[emph +]] June [[emph -]] tenth, you [[emph -]] have a [[emph -]] meeting in [[emph +]] Tokyo. On [[emph +]] July [[emph -]] tenth, you [[emph -]] have a [[emph -]] meeting in [[emph +]] Paris.

Оживите его!

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

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

Например, произношение по умолчанию предложения “Извините, Дэйв, я не могу сделать этого прямо сейчас “. является эмоционально мягким. Для предоставления слушателям впечатления, что динамик, возможно, немного опечален, но тем не менее непримирим Вы могли бы использовать формат TUNE для создания следующего произнесения:

[[inpt TUNE]]
~
s {D 250; P 212.0:0 212.0:35 212.0:54 212.0:85 212.0:96}
1AA {D 190; P 232.0:0 218.0:35 222.0:80}
r {D 80; P 216.0:0}
IY {D 150; P 177.0:0 162.0:29 162.0:68 162.0:77 162.0:90 162.0:100}
, {D 20}
~
d {D 60; P 162.0:0 162.0:36 162.0:57 160.0:93}
1EY {D 350; P 162.0:0 150.0:27 150.0:41 150.0:70}
v {D 30; P 150.0:0 150.0:29 150.0:52 150.0:67 150.0:90 150.0:100}
, {D 510}
~
2AY {D 140; P 173.0:0 196.0:45}
~
k {D 100; P 196.0:0 196.0:95}
AE {D 180; P 198.0:0 232.0:56}
n {D 80; P 232.0:0}
t {D 20; P 232.0:0 232.0:38}
~
d {D 40; P 232.0:0 232.0:85 208.0:92}
1UW {D 180; P 210.0:0 232.0:32 253.0:60 245.0:76}
~
D {D 60; P 245.0:0 186.0:92}
AE {D 240; P 186.0:0 168.0:37}
t {D 30; P 155.0:0 155.0:60 155.0:93}
~
r {D 70; P 155.0:0 149.0:53}
1AY {D 180; P 157.0:0 137.0:61}
t {D 40; P 128.0:0 132.2:56 135.0:94}
~
n {D 80; P 129.0:0 153.0:31 147.0:94}
1AW {D 340; P 147.0:0 140.8:22 169.2:88 148.0:100}
. {D 780}
[[inpt TEXT]]