Der say
Befehl von OS X ist für einige Aufgaben nützlich (z. B. die Benachrichtigung von Skype, wenn ein Kontakt online geschaltet wird), spricht jedoch einige Namen falsch aus. Gibt es eine Möglichkeit zu lehren say
, ein Wort anders auszusprechen?
Versuchen Sie zum Beispiel:
say "Hi, Joel Spolsky"
Das "alte" klingt eher nach "Ball" als nach "alt". Ich möchte eine Ausnahme hinzufügen, die "Spolsky so aussprechen" sagt, anstatt zu versuchen, neue Sprachregeln zu lehren. Ich wette, es gibt einen Weg, wie Apple "iphone" aussprechen kann.
Update - Nach einigen Recherchen habe ich Folgendes gelernt:
- Text-to-Speech wird aufgeteilt, indem der Text in Phoneme umgewandelt wird. Anschließend werden die Phoneme mithilfe einer Stimme in Audio umgewandelt. Das Ändern der Stimme wirkt sich nicht auf die Phoneme aus.
- Der Sprachsynthese-Manager verfügt über einige Funktionen zum Umwandeln von Text in Phoneme und eine Methode zum Registrieren eines Sprachwörterbuchs , mit dem neue Text-Phonem-Zuordnungen hinzugefügt werden. Apples Sprachwörterbuch muss jedoch in binärer Form vorliegen - ich habe kein plist-XML gefunden.
- Unter Verwendung
dtrace
beim Laufensay
, fand ich einige interessante in /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources geöffneten Dateien. Dies ist wahrscheinlich das Sprachwörterbuch, aber sie sind alle binär, mit Ausnahme von Homophones (XML). Das Hinzufügen von Einträgen zu Homophones hat keine Auswirkung - es wird wahrscheinlich in der Sprachausgabe verwendet. Sie sind auch von Apple mit Code signiert. Wenn Sie sie ändern, funktionieren möglicherweise einige Programme nicht mehr.- PrefixDictionary
- CartNames
- CartLite
- SymbolDictionary
- Homophone
- Es gibt Möglichkeiten , Textversionen von Elementen der Anwendungsoberfläche hinzuzufügen, damit VoiceOver funktioniert. Ein Großteil davon erhält ein Entwickler kostenlos, aber es gibt knifflige Dinge . Hier scheint der Standard darin zu bestehen, nach Bedarf eine phonetische Schreibweise zu verwenden.
Meine Vermutungen sind:
say
ist eine leichte Codeschicht über dem Sprachsynthese-Manager. Es wäre für die Apple-Entwickler einfach, eine Befehlszeilenoption hinzuzufügen, um den Pfad zu einer Sprachwörterbuch-Liste für die alternative Phonemzuordnung zu nehmen, aber sie taten es nicht. Es kann ein nützliches Open-Source-Projekt sein, um ein besseres zu schreibensay
.- Skype verwendet wahrscheinlich den Sprachsynthese-Manager direkt und lässt keine Haken, um die Aussprache der Namen meiner Freunde zu ändern, außer sie phonetisch zu buchstabieren, was albern ist.
- Der einfachste Weg, eine Kommandozeilenversion zu
say
erstellen, ist der Vorschlag von JRobert.
Hier ist meine schnelle Implementierung unter Verwendung des Schreibvorschlags von Doug Harris:
#!/bin/sh
echo $@ | tr '[A-Z]' '[a-z]' |
sed "s/spolsky/spowlsky/g" |
/usr/bin/say
Zum Schluss noch ein paar lustige Kommandozeilen-Sachen:
# 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'
. Die Liste der Stimmen finden Sie in den Systemeinstellungen -> Sprache -> Text to Speech. Das Problem liegt bei der Phonemübersetzung, nicht bei der Sprachsynthese. Wenn Sie die Bibliothek direkt anrufen, können Sie benutzerdefinierte Phoneme festlegen: developer.apple.com/mac/library/documentation/Carbon/Reference/… Durchsuchen meiner Festplatte, um festzustellen, ob die Apple-Entwickler eine .plist verwendet haben ...
say
mit verwendet-v
?