Wie kann ich ändern, wie der Befehl "say" von OS X ein Wort ausspricht?

5691
jwhitlock

Der sayBefehl von OS X ist für einige Aufgaben hilfreich (z. B. wenn Skype mich benachrichtigt, wenn ein Kontakt online ist), einige Namen werden jedoch falsch ausgesprochen. Gibt es eine Möglichkeit zu lehren say, ein Wort anders auszusprechen?

Versuchen Sie zum Beispiel:

say "Hi, Joel Spolsky" 

Das 'ol' klingt eher nach 'Ball' als nach 'alt'. Ich möchte eine Ausnahme hinzufügen, die "Spolsky so ausdrücken" aussagt, anstatt zu versuchen, neue Sprachregeln zu vermitteln. Ich wette, es gibt einen Weg, da es "iPhone" aussprechen kann, wie Apple es will.


Update - Nach einigen Recherchen habe ich Folgendes gelernt:

  1. Text-to-Speech besteht darin, den Text in Phoneme umzuwandeln. Anschließend werden die Phoneme mit einer Stimme in Audio umgewandelt. Das Ändern der Stimme wirkt sich nicht auf die Phoneme aus.
  2. Der Sprachsynthesemanager verfügt über einige Funktionen zur Umwandlung von Text in Phoneme und eine Methode zum Registrieren eines Sprachwörterbuchs, mit dem neue Textphonemkarten hinzugefügt werden. Apples Sprachwörterbuch muss jedoch in binärer Form vorliegen. Ich habe keine plist-XML-Datei gefunden.
  3. Unter Verwendung dtracebeim Laufen say, 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 bewirkt nichts - es wird wahrscheinlich in Sprache-zu-Text verwendet. Sie sind auch von Apple signierter Code - das Ändern dieser Programme kann dazu führen, dass einige Programme nicht funktionieren.
    • PrefixDictionary
    • CartNames
    • CartLite
    • SymbolDictionary
    • Homophone
  4. Es gibt verschiedene Möglichkeiten, Textversionen von Elementen der Anwendungsoberfläche hinzuzufügen, sodass VoiceOver funktioniert. Eine Menge davon, die ein Entwickler kostenlos erhält, aber es gibt knifflige Teile . Der Standard scheint hier zu sein, bei Bedarf eine phonetische Schreibweise zu verwenden.

Meine Vermutungen sind:

  1. sayist eine leichte Codeschicht über dem Sprachsynthesemanager. Es wäre für die Apple-Entwickler einfach, eine Befehlszeilenoption hinzuzufügen, um den Pfad zu einer Sprachwörterbuch-Plist für alternatives Phonem-Mapping zu bringen, was aber nicht der Fall war. Es kann ein nützliches Open-Source-Projekt sein, um ein besseres zu schreiben say.
  2. Skype verwendet wahrscheinlich den Sprachsynthesemanager direkt und lässt keinen Haken, um die Aussprache der Namen meines Freundes zu ändern, außer, sie phonetisch zu schreiben, was dumm ist.
  3. Der einfachste Weg, eine Kommandozeilenversion zu sayerstellen, ist der Vorschlag von JRobert.

Hier ist meine schnelle Implementierung mit Doug Harris 'Vorschlag zur Rechtschreibung:

#!/bin/sh echo $@ | tr '[A-Z]' '[a-z]' | sed "s/spolsky/spowlsky/g" | /usr/bin/say 

Zum Schluss noch ein paar lustige Kommandozeilen:

# 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 
13
Haben Sie versucht, die Stimme zu ändern, die "say" mit "-v" verwendet? Studer vor 13 Jahren 0
Keine Auswirkung auf die Aussprache: `say -v alex 'Spolsky'; sag -v vicki 'Spolsky'; sagen -v schlecht "Spolsky Spolsky Spolsky Spolsky Spolsky Spols". Die Liste der Stimmen finden Sie unter Systemeinstellungen -> Sprache -> Text zu Sprache. Das Problem liegt bei der Phonemübersetzung, nicht bei der Sprachsynthese. Wenn Sie die Bibliothek direkt aufrufen, können Sie benutzerdefinierte Phoneme festlegen: http://developer.apple.com/mac/library/documentation/Carbon/Reference/Speech_Synthesis_Manager/Reference/reference.html#//apple_ref/c/func/ UseSpeechDictionary Durchsuchen meiner Festplatte, ob die Apple-Entwickler eine .plist verwendet haben ... jwhitlock vor 13 Jahren 2

6 Antworten auf die Frage

8
Bruno Carvalho

Well you can also input the exactly phonemes you want to be said. The syntaxe is not so complicated.

Ex:

[[inpt PHON]] hAAIH.

Check this link to learn more: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1

Sie können Repeat After Me verwenden, um die phonetische Syntax zu generieren. Es ist verfügbar unter [developer.apple.com/downloads (http://developer.apple.com/downloads). user495470 vor 11 Jahren 1
* Repeat After Me * ist Teil von * Auxiliary Tools für Xcode *. Daniel Beck vor 11 Jahren 0
This worked for me: say 'Hi, Joel [[inpt PHON]]spOWl skIY.' I wonder if this plus phonetic fields in Address book will do the trick: http://macdailynews.com/2011/10/20/use-phonetic-names-to-get-iphone-4ss-siri-to-pronounce-names-correctly/ jwhitlock vor 11 Jahren 1
Wo würden Sie diese Phoneme eingeben? Burhan Ali vor 7 Jahren 0
6
JRobert
  • Erstellen Sie eine Liste von Wortpaaren [spolsky spowlsky; joel jole; ...].
  • Erstellen Sie ein Skript in Ihrer bevorzugten Skriptsprache, das Wörter in der Parameterliste entsprechend Ihrer Wortpaarliste ersetzt und die geänderte Parameterliste an "/ usr / bin / say" übergibt.
  • Machen Sie das Skript ausführbar, nennen Sie es "say" und legen Sie es in einem Ordner ab, der früher in Ihrem $ PATH erscheint als "/ usr / bin".
  • Fügen Sie der Wortpaarliste Rechtschreibvarianten hinzu, wenn Sie mehr Wörter finden, die Sie anders ausdrücken möchten.

Ihr neues Wort funktioniert wie das alte Wort, jedoch mit Ihrer bevorzugten Aussprache.

3
D. Woods

@ bruno-carvalho's Antwort hat diese Frage für mich beantwortet. Aber ich musste auch das Tag aufspüren [[inpt TEXT]], um den say-Befehl zu erhalten, um normal zum Lesen (Sprachsynthetisieren) von Text zurückzukehren. Zum Beispiel:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Wenn Sie dies der Antwort hinzufügen, helfen Sie hoffentlich späteren Lesern dieser Frage.

2
Nick McCurdy

Ich glaube nicht, dass du das kannst. Sie können versuchen, die Standardstimme in den Systemeinstellungen auf eine andere zu setzen, oder Sie geben die Art der Aussprache ein. Zum Beispiel "Hallo, Jole Spole Sky."

wie wäre es mit "Spowlsky"? Doug Harris vor 13 Jahren 1
2
Ken

Dies ist eine unglückliche Einschränkung, da Apple den Großteil des Weges dort zu sein scheint. Benutzer von VoiceOver können mithilfe des VoiceOver-Dienstprogramms (Sprache -> Aussprache) problemlos ihre eigene Aussprache einfügen. Die VoiceOver-Einstellungen scheinen jedoch nicht auf den Befehl "say" oder das Menü "Bearbeiten -> Sprache ->" Sprache starten "in Safari und anderen von Apple bereitgestellten Anwendungen anzuwenden.

0
Mistiry

Es gibt keine Möglichkeit, das sayProgramm zu "lehren", um Wörter anders auszusprechen. Wie oben vorgeschlagen, ist es am einfachsten, die gewünschte Aussprache zu erhalten, indem Sie die Schreibweise Ihrer Wörter anpassen, bis sie so angezeigt werden, wie Sie es möchten.