Как я могу изменить, как команда «сказать» в OS X произносит слово?


14

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

Вы пытались изменить голос, sayкоторый используете с -v?
Студер

2
Нет эффекта от произношения: 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 ...
jwhitlock

Ответы:


8

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

Пример:

[[inpt PHON]] ХААИ.

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


1
Вы можете использовать Repeat After Me для генерации фонетического синтаксиса. Это доступно от developer.apple.com/downloads .
Lri

Повторите после меня является частью вспомогательных инструментов для Xcode .
Даниэль Бек

1
Это сработало для меня: скажите «Привет, Джоэл [[inpt PHON]] spOWl skIY». Интересно, сработает ли это плюс фонетические поля в адресной книге: macdailynews.com/2011/10/20/…
jwhitlock

Где бы вы вводили эти фонемы?
Бурхан Али

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

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


1
как насчет "Spowlsky"?
Даг Харрис

2

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


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.