say
Polecenie OS X jest przydatne do niektórych zadań (takich jak Skype „powiadamiaj mnie, gdy kontakt wejdzie w tryb online), ale niepoprawnie wymawia niektóre nazwy. Czy istnieje sposób nauczenia say
wymawiania słowa w inny sposób?
Na przykład spróbuj:
say "Hi, Joel Spolsky"
„OL” brzmi bardziej jak „piłka” niż „stara”. Chciałbym dodać wyjątek, który mówi „wymawiaj Spolsky w ten sposób”, zamiast próbować uczyć nowych zasad językowych. Założę się, że istnieje sposób, ponieważ może wymówić „iPhone”, jak chce Apple.
Aktualizacja - po kilku badaniach dowiedziałem się:
- Funkcja zamiany tekstu na mowę jest dzielona między zamianę tekstu na fonemy, a następnie fonemy zamieniane są na dźwięk za pomocą głosu. Zmiana głosu nie wpływa na fonemy.
- Speech Synthesis Menedżer ma pewne funkcje dla toczenia tekst fonemów , oraz sposób rejestracji słownika mowy , które będą dodawać nowe mapy text-fonemy. Jednak słownik mowy Apple musi być w formie binarnej - nie znalazłem żadnego plist XML.
- Korzystanie
dtrace
podczas jazdysay
, znalazłem kilka ciekawych plików otwartych w /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Jest to prawdopodobnie słownik mowy, ale wszystkie są binarne, z wyjątkiem homofonów, czyli XML. Dodanie wpisów do homofonów nic nie robi - prawdopodobnie jest używane w mowie i tekście. Są również podpisane przez Apple kodem - ich zmiana może uniemożliwić działanie niektórych programów.- PrefixDictionary
- CartNames
- CartLite
- SymbolDictionary
- Homofony
- Istnieją sposoby dodawania tekstowych wersji elementów interfejsu aplikacji, dzięki czemu VoiceOver działa, z których wiele deweloper otrzymuje za darmo, ale są trudne . Wydaje się, że w tym przypadku standardem jest pisownia fonetyczna.
Moje domysły to:
say
to lekka warstwa kodu na szczycie Menedżera syntezy mowy. Deweloperom Apple byłoby łatwo dodać opcję wiersza poleceń, aby przejść ścieżkę do listy słownika mowy dla alternatywnego mapowania fonemów, ale nie zrobili tego. Pisanie lepszego może być użytecznym projektem typu open sourcesay
.- Skype prawdopodobnie korzysta bezpośrednio z Menedżera syntezy mowy, nie pozostawiając żadnych haczyków, aby zmienić sposób wymawiania nazwisk mojego przyjaciela, poza pisaniem ich fonetycznie, co jest głupie.
- Najprostszym sposobem na wykonanie wersji wiersza poleceń
say
jest zasugerowanie JRobert.
Oto moja szybka implementacja, używając sugestii pisowni Douga Harrisa:
#!/bin/sh
echo $@ | tr '[A-Z]' '[a-z]' |
sed "s/spolsky/spowlsky/g" |
/usr/bin/say
Na koniec kilka fajnych rzeczy z wiersza poleceń:
# 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'
. Lista głosów znajduje się w Preferencjach systemowych -> Mowa -> Tekst na mowę. Problem polega na tłumaczeniu fonemów, a nie na syntezie głosu. Jeśli bezpośrednio wywołujesz bibliotekę, możesz ustawić niestandardowe fonemy: developer.apple.com/mac/library/documentation/Carbon/Reference/... Przeszukując mój dysk, aby sprawdzić, czy twórcy Apple użyli .plist ...
say
używasz-v
?