13

Команда say OS X полезна для некоторых задач (например, Skype, уведомляющих меня, когда контакт подключается к сети), но она произносит некоторые имена неправильно. Есть ли способ научить say произносить слово по-другому?

Например, попробуйте:

say "Hi, Joel Spolsky"

"Ол" звучит как "мяч", а не "старый". Я хотел бы добавить исключение, которое говорит: «Произносите Спольски, как это», а не пытаться учить новым языковым правилам. Бьюсь об заклад, есть способ, так как он может произносить "iphone", как хочет Apple.


Обновление - после некоторых исследований вот что я узнал:

  1. Преобразование текста в речь делится между превращением текста в фонемы, а затем фонемы превращаются в звук с помощью голоса. Изменение голоса не влияет на фонемы.
  2. Диспетчер синтеза речи имеет некоторые функции для преобразования текста в фонемы и метод регистрации речевого словаря, который будет добавлять новые карты текстовых фонем. Тем не менее, речевой словарь Apple должен быть в двоичном виде - я не нашел никакого plist XML.
  3. Используя dtrace во время работы say , я нашел несколько интересных файлов, открытых в /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Вероятно, это речевой словарь, но все они двоичные, кроме гомофонов, то есть XML. Добавление записей в Homophones ничего не делает - это, вероятно, используется в преобразовании речи в текст. Они также имеют код, подписанный Apple - их изменение может помешать работе некоторых программ.
    • PrefixDictionary
    • CartNames
    • CartLite
    • SymbolDictionary
    • Омофоны
  4. Есть способы добавить текстовые версии элементов интерфейса приложения, чтобы VoiceOver работал, многие из которых разработчик получает бесплатно, но есть некоторые хитрости. Стандарт здесь, кажется, должен использовать фонетическое правописание по мере необходимости.

Мои догадки:

  1. say легкий слой кода поверх менеджера синтеза речи. Разработчикам Apple было бы легко добавить параметр командной строки, чтобы указать путь к списку речевого словаря для сопоставления альтернативных фонем, но они этого не сделали. Это может быть полезным проектом с открытым исходным кодом, чтобы написать лучшее say .
  2. Skype, вероятно, использует Speech Synthesis Manager напрямую, не оставляя зацепок, чтобы изменить способ произнесения имен моего друга, кроме фонетического произношения, что глупо.
  3. Самый простой способ сделать версию say из командной строки - это то, как предложил JRobert.

Вот моя быстрая реализация, использующая предложение орфографии Дуга Харриса:

#!/bin/sh
echo $@ | tr '[A-Z]' '[a-z]' |
sed "s/spolsky/spowlsky/g" |
/usr/bin/say

Наконец, некоторые забавные вещи из командной строки:

# Apple is weird
sqlite3 /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources/Tuples .dump
# Get too much information about what files are being opened
sudo dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
# Just fun
say -v bad "Joel Spolsky Spolsky Spolsky Spolsky Spolsky, Joel Spolsky Spolsky Spolsky Spolsky Spolsky"
echo "scale=1000; 4*a(1)" | bc -l | say

6 ответов6

8

Ну, вы также можете ввести именно те фонемы, которые вы хотите сказать. Синтаксис не так сложен.

Пример:

[[inpt PHON]] ХААИ.

Проверьте эту ссылку, чтобы узнать больше: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1

6
  • Создайте список пар слов [spolsky spowlsky; Джоэл Джоул; ...].
  • Создайте скрипт на вашем любимом языке сценариев, который заменяет слова в списке параметров в соответствии с вашим списком пар слов и передает измененный список параметров в «/usr/bin/say».
  • Сделайте скрипт исполняемым, назовите его "say" и поместите в папку, которая появляется в вашем $ PATH раньше, чем «/usr/bin».
  • Добавьте варианты правописания в свой список пар слов, так как вы найдете больше слов, которые вы хотите произнести по-разному.

Ваше новое слово будет работать как старое, но с вашим предпочтительным произношением.

3

Ответ @ bruno-carvalho ответил на этот вопрос для меня. Но мне также нужно было выследить тег [[inpt TEXT]] чтобы заставить команду say вернуться к обычному чтению (синтезированию речи) текста. Например:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Надеюсь, добавление этого в ответ поможет последующим читателям этого вопроса.

2

Это досадное ограничение, учитывая, что Apple, кажется, большую часть пути туда. Пользователи VoiceOver могут легко вставлять свои собственные произношения с помощью утилиты VoiceOver (Speech-> произношение). Но настройки VoiceOver, похоже, не применяются к команде "сказать" или к меню "Правка" -> "Речь" -> "Начать речь" в Safari и других приложениях Apple.

2

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

0

Нет способа «научить» программу say произносить слова по-разному. Как указывалось выше, самый простой способ получить желаемое произношение - это настроить написание слов, пока оно не произнесет их так, как вы хотите.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .