Методы для настройки синтезированной речи
В этой главе описываются, как подстроить речь, которую генерирует Ваше приложение. Это обеспечивает инструкции для использования синтеза речи 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, реагируют на широкий диапазон свойств, связанных с речевыми каналами. Селекторы делятся на следующие категории:
Селекторы атрибута, указывающие речевой атрибут, такой как объем или уровень, что речевой канал должен использовать при генерации речи.
Все селекторы атрибута работают с обоими
GetSpeechInfo
иSetSpeechInfo
функции. Как альтернатива использованию селектора атрибута сSetSpeechInfo
функция, можно использовать эквивалентную встроенную речевую команду для установки речевого атрибута (см. Таблицу 3-1 для больше об этих командах). В настоящее время доступные селекторы в этой категории:soRate
soPitchBase
soPitchMod
soVolume
Селекторы режима ввода, указывающие режим, такой как фонема или символ, что речевой канал должен использовать при обработке текста.
Все селекторы режима ввода работают с обоими
GetSpeechInfo
иSetSpeechInfo
функции. Как альтернатива использованию селектора мод сSetSpeechInfo
функция, можно использовать эквивалентную встроенную речевую команду для указания обрабатывающего ввод режима (см. Таблицу 3-1 для больше об этих командах). В настоящее время доступные селекторы в этой категории:soInputMode
soCharacterMode
soNumberMode
Селекторы обратного вызова, связывающие с речевым каналом определенную с помощью приложения функцию обратного вызова, которую вызовут, когда определенное речевое событие происходит, такие как заключение речи.
Все селекторы обратного вызова работают с только
SetSpeechInfo
функция. Один селектор обратного вызова,soSyncCallBack
, имеет связанную встроенную речевую команду, которую можно использовать для инициирования обратного вызова к процедуре обратного вызова синхронизации (см. Таблицу 3-1 для больше об этой команде). В настоящее время доступные селекторы в этой категории:soTextDoneCallBack
soSpeechDoneCallBack
soSyncCallBack
soErrorCallBack
soPhonemeCallBack
soWordCallBack
Информационные селекторы, предоставляющие информацию о текущем речевом канале и синтезаторе, связанном с ним, таком как набор символов фонемы, распознанных синтезатором.
Все информационные селекторы работают только с
GetSpeechInfo
функция. Нет никаких встроенных речевых команд, эквивалентных информационным селекторам. В настоящее время доступные селекторы в этой категории:soStatus
soErrors
soSynthType
soRecentSync
soPhonemeSymbols
Устанавливая селекторы, указывающие установку речевого канала, такую как текущая речь.
Некоторые селекторы установки работают с обоими
GetSpeechInfo
иSetSpeechInfo
функции, другие с толькоSetSpeechInfo
функция. Один селектор установки,soCommandDelimiter
, имеет эквивалентную встроенную речевую команду, которую можно использовать для изменения строк разделителя команды по умолчанию (см. Таблицу 3-1 для больше об этой команде). В настоящее время доступные селекторы в этой категории:soCurrentVoice
soCommandDelimiter
soReset
soRefCon
soSynthExtension
soOutputToFileWithCFURL
Используйте встроенные речевые команды для подстраивания разговорного вывода
Как описано в Речевом Качестве Управления Используя Встроенные Речевые Команды, Вы используете встроенные команды для подстраивания произношения отдельных слов в тексте, который приложение передает синтезатору. Даже при использовании только нескольких встроенных речевых команд, описанных в этом разделе можно значительно увеличить понятность разговорного вывода приложения. Этот раздел обеспечивает обзор встроенного речевого синтаксиса команды, перечисляет доступные команды и иллюстрирует, как использовать их для достижения различных эффектов.
Обратите внимание на то, что некоторым встроенным речевым командам обеспечил функциональные эквиваленты механизм селектора Углерода (для полного списка доступных селекторов, посмотрите менеджера по Синтезу речи Референса.) Это означает, что для достижения некоторых эффектов можно или вставить встроенную команду в текст, или можно передать эквивалентный селектор Углероду 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 выражен с помощью соглашений, описанных в Обзоре Встроенного Речевого Синтаксиса команды.
Команда | Синтаксис и описание | Селектор |
---|---|---|
|
Наборы команд текстового режима говорящий слово режим речевого канала. Когда
|
|
|
Команда комментария проигнорирована синтезаторами речи. Это позволяет Вам добавить произвольное содержание к текстовому буферу, который никогда не будет включаться в разговорный вывод. Обратите внимание на то, что сам текст комментария должен быть включен в начинании и разделителях команды конца
| Ни один |
|
Даже если никакие другие слова в окружающей фразе или предложении не произнесены, команда контекста позволяет Вам идентифицировать контекст слова, чтобы помочь синтезатору генерировать корректное произношение того слова. Поскольку произношение слов может отличаться в зависимости от контекста, в котором они появляются, можно использовать команду контекста для указания произношения, используемого в определенном контексте. Команда контекста распознает два режима: пословно и фрагмент текста. В обоих режимах Вы используете надлежащий параметр «пропуска» ( В пословно режиме синтезатор анализирует выбор полного текста для определения части речи (такой как существительное или глагол) указанного слова. Синтезатор произносит слово согласно своей части речи, но это не делает интонации или корректировок продолжительности произношения. Например, слово «координирует», объявлен по-другому в зависимости от того, используется ли оно в качестве существительного или глагола. Два предложения ниже иллюстрируют, как использовать команду контекста для сообщения синтезатора который произношение слова использовать:
В режиме фрагмента текста синтезатор анализирует выбор полного текста для определения части речи и интонации и продолжительности указанного слова или фразы. Например, различному произношению фразы «первый шаг» сообщает контекст, предоставленный окружающими словами в следующих двух предложениях:
| Ни один |
|
Команда разделителя изменяет последовательности символов, указывающие начало и конец всех последующих встроенных речевых команд. Новые разделители вступают в силу после списка команд, содержащего [ |
|
|
Команда акцента заставляет синтезатор произносить следующее слово с большим или меньшим акцентом, чем это в настоящее время использует. + параметр увеличивает акцент и - акцент уменьшений параметра. Например, для подчеркивания слова «не» в следующей фразе используйте
| Ни один |
|
Командные коммутаторы режима ввода обрабатывающий ввод режим к текстовому режиму, режиму фонемы или TUNE форматируют режим. Обратите внимание на то, что некоторые синтезаторы могут определить дополнительные режимы речевого ввода, которые можно использовать. Обрабатывающий ввод режим по умолчанию является текстовым, и необходимо всегда использовать Например, для предоставления фонематического представления имени, которое часто неправильно произносят синтезаторы можно использовать
|
|
|
Наборы команд режима числа говорящий число режим синтезатора. Например, чтобы прояснить, что следующее 7-разрядное число является телефонным номером, можно использовать
|
|
|
Базовая команда подачи изменяет текущую речевую подачу для речевого канала к указанному действительному значению. Если значению подачи предшествуют + или - символ, речевая подача корректируется относительно ее текущей стоимости. Базовые значения подачи всегда являются положительными числами в диапазоне 1 000 - 127 000. |
|
|
Команда модуляции подачи изменяет диапазон модуляции для речевого канала, на основе указанного действительного значения глубины модуляции. |
|
|
Речевые наборы команд уровня речевой уровень на речевом канале к указанному действительному значению. Речевые уровни падают в диапазоне 0.000 к 65 535,999, который переводит в диапазон 50 - 500 слов в минуту. Если уровню предшествуют + или - символ, речевой уровень увеличен или уменьшен относительно его текущей стоимости. |
|
|
Команда сброса сбрасывает речь речевого канала и приписывает значениям по умолчанию. Параметр не имеет никакого эффекта; это должно быть установлено в |
|
|
Команда тишины заставляет синтезатор генерировать тишину для конкретного количества миллисекунд. Вы могли бы хотеть вставить дополнительную тишину между двумя предложениями, чтобы позволить слушателям полностью поглощать значение первого. Обратите внимание на то, что точная синхронизация тишины будет варьироваться среди синтезаторов. | ни один |
|
Команда синхронизации заставляет процедуру обратного вызова синхронизации приложения выполняться. Обратный вызов сделан, поскольку аудио, соответствующее следующему слову, начинает звучать. 32-разрядное значение установлено приложением и передается процедуре обратного вызова. Можно использовать
|
|
|
Команда версии формата говорит синтезатор речи, встроивший версию формата команды, будет использоваться всеми последующими встроенными речевыми командами. | ни один |
|
Наборы команд динамического диапазона речевых сигналов динамический диапазон речевых сигналов на текущем речевом канале к указанному действительному значению. Если значению объема предшествуют + или - символ, динамический диапазон речевых сигналов увеличен или уменьшен относительно его текущей стоимости. |
|
|
Специфичное для синтезатора |
|
Встроенные речевые ошибки команды
В то время как встроенные речевые команды обрабатываются, ошибки можно было бы обнаружить и сообщить Вашему приложению. Если Вы включаете ошибочные обратные вызовы с помощью SetSpeechInfo
функция с soErrorCallBack
селектор, Ваша ошибочная процедура обратного вызова будет выполняться один раз для каждой ошибки, обнаруживающейся (для получения дополнительной информации об ошибочном обратном вызове, посмотрите SpeechErrorProcPtr
). Если Вы не включаете ошибочные обратные вызовы, можно все еще получить информацию об этих ошибках путем вызова GetSpeechInfo
функция с soErrors
селектор.
Во время обработки встроенных речевых команд могут быть обнаружены следующие ошибки:
Код результата | Значение | Описание |
---|---|---|
|
| Значение параметра недопустимо |
|
| Встроенный синтаксис команды или проблема параметра |
|
| Встроенная команда не реализована на синтезаторе |
|
| Нереализованное сообщение |
|
| Указанная речь не была предварительно загружена |
|
| Неправильное число встроенных аргументов команды |
Используйте модификаторы фонемы для корректировки произношения
Как описано в Представлениях Речи, платформа Синтеза речи позволяет Вам представлять некоторых или все слова в строке или буфере как фонемы. При предоставлении фонематического представления слова Вы указываете точную комбинацию звуков, которые Вы хотите, чтобы синтезатор объявил. Кроме того, можно добавить модификаторы фонемы, чтобы увеличить или уменьшить напряжение, с которым объявлены фонемы и слова.
Вспомните, что фонемы представлены комбинациями символов верхнего регистра или символов нижнего регистра, таких как OW для длинного звука «o» в английском слове “судно “. (Другие языки используют различные фонемы и символы фонемы; этот документ внимание на набор североамериканских английских фонем синтезатор MacinTalk распознает.) Полный набор фонем перечислен в Фонемах.
Поскольку синтезатор не имеет никакого надежного способа обнаружить различие между символами, представляющими фонемы и символы, представляющие слова, необходимо утвердить надлежащий режим. Существует два способа, которыми можно сделать это:
В Вашем приложении используйте
soPhonemeMode
селектор сSetSpeechInfo
функция, чтобы сказать текущему речевому каналу обрабатывать последующий текст как фонемы. Это - изменение режима для речевого канала, что означает, что он интерпретирует весь текст как фонемы, пока Вы не вызоветеSetSpeechInfo
функция сsoTextMode
селектор, для возврата к значению по умолчанию, относящийся к обработке текстов режим (или до завершений речевого канала). Для примеров того, как использовать эту функцию, посмотрите, Корректируют Настройки Речевого канала Используя Синтез речи Углерода API.В Вашем текстовом буфере или строке, предшествуйте фонематическому представлению слова или фразы с
[[inpt PHON]]
встроенная речевая команда и следует за ним с[[inpt TEXT]]
команда. Это заставляет синтезатор переключаться на режим обработки ввода фонемы для содержания после[[inpt PHON]]
команда и переключатель назад снова, когда это встречается[[inpt TEXT]]
команда.
В фонематическом представлении слова или фразы, можно вставить модификаторы, позволяющие Вам корректировать напряжение, которое синтезатор помещает в слова и слоги. Эти модификаторы вызывают просодическими средствами управления.
В отличие от встроенных речевых команд, просодические средства управления не требуют строк разделителя команды, и они не позволяют параметры. Поскольку просодические средства управления допустимы только в фонематическом представлении текста, символы, представляющие их, состоят из символов, не использующихся для представления фонем. Для использования просодических символов управления в фонематическом представлении текста поместите надлежащий символ перед фонемой, которую Вы хотите изменить. Эффект просодического символа управления ограничивается фонемой, сразу следующей за ним; это не имеет никакого эффекта ни на какие последующие фонемы.
Таблица 3-2 перечисляет доступные просодические символы управления и описывает, как они изменяют отдельные фонемы. Если требуется слушать разговорную версию какого-либо из примеров в Таблице 3-2, можно скопировать его в текстовый документ Редактирования, предшествовать ему с [[inpt PHON]]
команда, и выбирает Speech> Start Speaking Text от пункта меню Services.
Категория | Действие | Символ | Описание и пример |
---|---|---|---|
Лексическое напряжение | Основное напряжение | 1 | Отмечает основное напряжение в слове Например, слово «разработчик» произнесено с основным напряжением на втором слоге, как показано ниже:
|
Вторичное напряжение | 2 | Отмечает вторичное напряжение в слове Например, слово «приложение» произнесено с основным напряжением на третьем слоге и вторичным напряжением на первом слоге, как показано ниже:
| |
Повреждения слога | Метка слога | = (равный) | Слог Знаков повреждается в слове Например, слово «дешево» произнесено с тонким повреждением слога между «дешевым» и «ly». Чтобы гарантировать, что синтезатор произносит это слово правильно (а не с повреждением слога между «chea» и «сгибом»), можно вставить метку слога, как показано ниже:
|
Выдающееся положение Word | Снятый стресс | ~ (тильда) | Отмечает слова, у которых нужно снять стресс в предложении У слов, переносящих минимальную информацию, можно снять стресс для уменьшения их выдающегося положения в предложении. Например, в предложении, “Что находится в сумке? “, слова «в» и неважного, относительно «Какой», и «сумка». Поэтому «в» и банка быть отмеченным как не нуждающийся в напряжении, как показано ниже:
|
Нормальное напряжение | _ (подчеркивание) | Отмечает слова, которые должны получить нормальное напряжение Слова, переносящие информацию, должны быть произнесены с нормальным напряжением для дифференциации их от менее важных слов. Например, в предложении, “Что находится в сумке? “, слова, “Что “, ““, и «сумка», должен говориться с нормальным напряжением, потому что они передают больше информации слушателю, чем слова «в» и ““. Поэтому эти переносящие информацию слова могут быть отмечены как нуждающийся в нормальном напряжении, как показано ниже:
| |
Решительное напряжение | + (плюс) | Отмечает слова, требующие особого внимания Самые важные слова в предложении должны получить решительное напряжение, чтобы заставить их стоять из остальной части предложения. Например, в предложении “Никогда не делают этого снова! “, слово, «которому» можно придать дополнительное значение для привлечения внимания к нему, как показано ниже:
|
Используйте пунктуацию правильно
Знаки препинания не являются встроенными командами, но они появляются в тексте и могут влиять на просодию синтезированной речи некоторыми похожими способами. В этом разделе описывается англоязычные синтезаторы, вероятно, интерпретируют знаки препинания.
По большей части знаки препинания влияют на подачу синтезированной речи и продолжительность пауз. Например, период в конце предложения обычно заставляет синтезатор понижать подачу и вставлять паузу. Большинство синтезаторов речи стремится подражать паузам и изменениям в подаче человеческих динамиков в ответ на знаки препинания, таким образом, Вы получите лучшие результаты путем акцентирования текста согласно стандартным грамматическим правилам.
Таблица 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
, 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]] |