say
Команда OS X корисна для деяких завдань (наприклад, повідомлення Skype повідомляє мене, коли контакт приходить в Інтернет), але вона вимовляє деякі імена неправильно. Чи є спосіб навчити say
вимовляти слово по-іншому?
Наприклад, спробуйте:
say "Hi, Joel Spolsky"
"Ol" звучить як "м'яч", а не "старий". Я хотів би додати виняток, який говорить "Вимовляй Спольського так", а не намагатися навчати нових лінгвістичних правил. Б'юсь об заклад, що існує спосіб, оскільки він може вимовляти "iphone" так, як Apple хоче.
Оновлення - Після деяких досліджень, ось що я дізнався:
- Текст у мові розбивається між перетворенням тексту на фонеми, а потім фонеми перетворюються на аудіо за допомогою голосу. Зміна голосу не впливає на фонеми.
- Синтез мова менеджер має деякі функції для повороту тексту в фонеми , і спосіб реєстрації словника мови , який додасть нові карти текст фонем. Однак словник мови Apple має бути у двійковій формі - я не знайшов жодного XML-списку.
- Використовуючи
dtrace
під час роботиsay
, я знайшов цікаві файли, відкриті в /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Це, мабуть, словник мови, але всі вони є бінарними, крім Homophones, що є XML. Додавання записів до Homophones нічого не робить - воно, ймовірно, використовується в мовленні до тексту. Вони також є кодом, підписаним Apple - зміна їх може перешкоджати роботі деяких програм.- ПрефіксD Dictionary
- CartNames
- CartLite
- СимволСловник
- Гомофони
- Існують способи додавання текстових версій елементів інтерфейсу програми, щоб 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
?