say
Команда OS X полезна для некоторых задач (таких как 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
- это то, как предложил 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
say -v alex 'Spolsky' ; say -v vicki 'Spolsky'; say -v bad 'Spolsky Spolsky Spolsky Spolsky Spolsky Spols'
. Список голосов можно найти в Системных настройках -> Речь -> Текст в речь. Проблема в переводе фонем, а не в синтезе голоса. Если вы вызываете библиотеку напрямую, вы можете установить пользовательские фонемы: developer.apple.com/mac/library/documentation/Carbon/Reference/… Поиск на моем диске, чтобы увидеть, использовали ли разработчики Apple .plist ...
say
который используете с-v
?