Как я могу изменить, как команда "сказать" в OS X произносит слово?
OS X's say
Команда полезна для некоторых задач (таких как Skype'уведомлять меня, когда контакт подключается к сети), но она произносит некоторые имена неправильно. Есть ли способ научить say
произнести слово по-другому?
Например, попробуйте:
say "Hi, Joel Spolsky"
"Ол" звучит как "мяч", а не "старый". Я хотел бы добавить исключение, которое говорит: "Произносите Спольски, как это", а не пытаться учить новым языковым правилам. Бьюсь об заклад, есть способ, так как он может произносить "iphone", как хочет Apple.
Обновление - после некоторых исследований вот что я узнал:
- Преобразование текста в речь делится между превращением текста в фонемы, а затем фонемы превращаются в звук с помощью голоса. Изменение голоса не влияет на фонемы.
- Диспетчер синтеза речи имеет некоторые функции для преобразования текста в фонемы и метод регистрации речевого словаря, который будет добавлять новые карты текстовых фонем. Тем не менее, речевой словарь Apple должен быть в двоичном виде - я не нашел никакого plist XML.
- С помощью
dtrace
во время бегаsay
Я нашел несколько интересных файлов, открытых в /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Вероятно, это речевой словарь, но все они двоичные, кроме гомофонов, то есть XML. Добавление записей в Homophones ничего не делает - это, вероятно, используется в преобразовании речи в текст. Они также имеют код, подписанный Apple - их изменение может помешать работе некоторых программ.- PrefixDictionary
- CartNames
- CartLite
- SymbolDictionary
- Омофоны
- Есть способы добавить текстовые версии элементов интерфейса приложения, чтобы VoiceOver работал, многие из которых разработчик получает бесплатно, но есть некоторые хитрости. Стандарт здесь, кажется, должен использовать фонетическое правописание как необходимый.
Мои догадки:
say
это легкий слой кода поверх Менеджера синтеза речи. Разработчикам Apple было бы легко добавить параметр командной строки, чтобы указать путь к списку речевого словаря для сопоставления альтернативных фонем, но они этого не сделали. Это может быть полезным проектом с открытым исходным кодом, чтобы написать лучшеsay
,- Skype, вероятно, использует Speech Synthesis Manager напрямую, не оставляя зацепок для изменения способа произнесения имен моего друга, кроме фонетического произношения, что глупо.
- Самый простой способ сделать версию командной строки
say
как предложил Джроберт.
Вот моя быстрая реализация, используя предложение орфографии Дуга Харриса:
#!/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 ответов
Ну, вы также можете ввести именно те фонемы, которые вы хотите сказать. Синтаксис не так сложен.
Пример:
[[inpt PHON]] ХААИ.
Проверьте эту ссылку, чтобы узнать больше: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1
- Создайте список пар слов [spolsky spowlsky; Джоэл Джоул; ...].
- Создайте сценарий на вашем любимом языке сценариев, который заменяет слова в списке параметров в соответствии с вашим списком пар слов и передает измененный список параметров в "/usr/bin/say".
- Сделайте скрипт исполняемым, назовите его "say" и поместите в папку, которая появляется в вашем $PATH раньше, чем "/usr/bin".
- Добавьте варианты правописания в свой список пар слов, так как вы найдете больше слов, которые вы хотите произнести по-разному.
Ваше новое слово будет работать как старое, но с вашим предпочтительным произношением.
Ответ @bruno-carvalho ответил на этот вопрос для меня. Но мне также нужно было выследить тег [[inpt TEXT]]
чтобы команда say вернулась к чтению (синтезированию речи) текста в обычном режиме. Например:say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?
Надеюсь, добавление этого в ответ поможет последующим читателям этого вопроса.
Я не думаю, что ты можешь. Вы можете попробовать установить другой голос по умолчанию в системных настройках, или вы можете напечатать, как вы хотите, чтобы вещи произносились. Например, "Привет, Джоул Споул Скай".
Это досадное ограничение, учитывая, что Apple, кажется, большую часть пути туда. Пользователи VoiceOver могут легко вставлять свои собственные произношения с помощью утилиты VoiceOver (Speech-> произношение). Но настройки VoiceOver, похоже, не применяются к команде "сказать" или к меню "Правка" ->"Речь" ->"Начать речь" в Safari и других приложениях Apple.
Нет способа "научить" say
Программа произносить слова по-разному. Как указывалось выше, самый простой способ получить желаемое произношение - это настроить написание слов, пока оно не произнесет их так, как вы хотите.