Як я можу змінити, як команда "сказати" OS X вимовляє слово?


14

sayКоманда OS X корисна для деяких завдань (наприклад, повідомлення Skype повідомляє мене, коли контакт приходить в Інтернет), але вона вимовляє деякі імена неправильно. Чи є спосіб навчити sayвимовляти слово по-іншому?

Наприклад, спробуйте:

say "Hi, Joel Spolsky"

"Ol" звучить як "м'яч", а не "старий". Я хотів би додати виняток, який говорить "Вимовляй Спольського так", а не намагатися навчати нових лінгвістичних правил. Б'юсь об заклад, що існує спосіб, оскільки він може вимовляти "iphone" так, як Apple хоче.


Оновлення - Після деяких досліджень, ось що я дізнався:

  1. Текст у мові розбивається між перетворенням тексту на фонеми, а потім фонеми перетворюються на аудіо за допомогою голосу. Зміна голосу не впливає на фонеми.
  2. Синтез мова менеджер має деякі функції для повороту тексту в фонеми , і спосіб реєстрації словника мови , який додасть нові карти текст фонем. Однак словник мови Apple має бути у двійковій формі - я не знайшов жодного XML-списку.
  3. Використовуючи dtraceпід час роботи say, я знайшов цікаві файли, відкриті в /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Це, мабуть, словник мови, але всі вони є бінарними, крім Homophones, що є XML. Додавання записів до Homophones нічого не робить - воно, ймовірно, використовується в мовленні до тексту. Вони також є кодом, підписаним Apple - зміна їх може перешкоджати роботі деяких програм.
    • ПрефіксD Dictionary
    • CartNames
    • CartLite
    • СимволСловник
    • Гомофони
  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]] hAAIH.

Перейдіть за цим посиланням, щоб дізнатися більше: 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 .
Лрі

Repeat After Me є частиною допоміжних інструментів для Xcode .
Даніель Бек

1
Це працювало для мене: скажи "Привіт, Джоель [[inpt PHON]] spOWl skIY". Цікаво, чи допоможе цей плюс фонетичні поля в адресної книзі: macdailynews.com/2011/10/20/…
jwhitlock

Де б ви ввели ці фонеми?
Бурхан Алі

6
  • Створіть список пар слів [spolsky spowlsky; joel jole; ...].
  • Створіть сценарій на своїй улюбленій мові сценаріїв, який підміняє слова у своєму списку параметрів відповідно до списку ваших пар слів і передає модифікований список параметрів на "/ usr / bin / say".
  • Зробіть сценарій виконуваним, назвіть його "сказати" і покладіть його в папку, яка з'явиться раніше у вашому $ PATH, ніж "/ usr / bin".
  • Додайте варіанти написання до списку пар пар, оскільки ви знайдете більше слів, які хотіли б вимовити по-різному.

Ваше нове слово буде працювати як старе, але з улюбленою вимовою.


3

@ bruno-carvalho відповів на це запитання для мене. Але мені також потрібно було шукати тег, [[inpt TEXT]]щоб отримати команду сказати, щоб нормально повернутися до читання (синтезування мови) тексту. Наприклад:
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.