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

14

Der sayBefehl 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:

  1. 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.
  2. 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.
  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 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
  4. 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:

  1. sayist 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 schreiben say.
  2. 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.
  3. Der einfachste Weg, eine Kommandozeilenversion zu sayerstellen, 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
Whitlock
quelle
Haben Sie versucht, die Stimme ändern saymit verwendet -v?
Studer
2
Keine Auswirkung auf die Aussprache: 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 ...
jwhitlock

Antworten:

8

Sie können auch genau die Phoneme eingeben, die Sie sagen möchten. Die Syntax ist nicht so kompliziert.

Ex:

PHON hAAIH.

Weitere Informationen finden Sie unter folgendem Link: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1

Bruno Carvalho
quelle
1
Sie können Repeat After Me verwenden, um die phonetische Syntax zu generieren. Es ist unter developer.apple.com/downloads verfügbar .
Lri
Repeat After Me ist Teil von Auxiliary Tools for Xcode .
Daniel Beck
1
Das hat bei mir geklappt: Sag 'Hallo, Joel. Ich frage mich, ob dies und die phonetischen Felder im Adressbuch den Trick machen: macdailynews.com/2011/10/20/…
jwhitlock
Wo würden Sie diese Phoneme eingeben?
Burhan Ali
6
  • Erstellen Sie eine Liste von Wortpaaren [spolsky spowlsky; Joel Jole; ...].
  • Erstellen Sie ein Skript in Ihrer bevorzugten Skriptsprache, das Wörter in seiner 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 in Ihrem $ PATH früher erscheint als "/ usr / bin".
  • Fügen Sie Ihrer Wortpaarliste Rechtschreibvarianten hinzu, wenn Sie mehr Wörter finden, die anders ausgesprochen werden sollen.

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

JRobert
quelle
3

Die Antwort von @ bruno-carvalho beantwortete diese Frage für mich. Aber ich musste auch nach dem Tag suchen [[inpt TEXT]], damit der Befehl say wieder normal zum Lesen (Sprachsynthetisieren) von Text zurückkehrte. Beispielsweise:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Wenn Sie dies zur Antwort hinzufügen, werden hoffentlich nachfolgende Leser dieser Frage davon profitieren.

D. Woods
quelle
2

Ich glaube nicht, dass du kannst. Sie können versuchen, die Standardstimme in den Systemeinstellungen auf eine andere zu setzen, oder Sie können eingeben, wie die Aussprache erfolgen soll. Zum Beispiel "Hallo, Jole Spole Himmel."

Nick McCurdy
quelle
1
wie wäre es mit "Spowlsky"?
Doug Harris
2

Dies ist eine unglückliche Einschränkung, da Apple anscheinend den größten Teil des Weges dorthin zurücklegt. Benutzer von VoiceOver können mithilfe des VoiceOver-Dienstprogramms (Sprache-> Aussprache) problemlos ihre eigenen Aussprachen einfügen. Die VoiceOver-Einstellungen scheinen jedoch nicht für den Befehl "say" oder das Menü "Bearbeiten-> Sprache -> Sprache starten" in Safari und anderen von Apple bereitgestellten Anwendungen zu gelten.

Ken
quelle
0

Es gibt keine Möglichkeit, dem sayProgramm beizubringen, Wörter anders auszusprechen. Wie oben vorgeschlagen, ist die einfachste Möglichkeit, die gewünschte Aussprache zu erhalten, die Rechtschreibung Ihrer Wörter anzupassen, bis sie die gewünschte Bedeutung haben.

Mistiry
quelle