Es ist schon erstaunlich, dass dieser kleine MacOS-Befehl vielen Benutzerinnen und Benutzern von Macs unbekannt ist, obwohl er schon immer zu MacOS gehörte, sogar Teile der Parametrisierung und einige Stimmen schon vor dem Unix-basierten Mac-Betriebssystem vorhanden waren. Ich spreche hier vom Terminal Befehl ’say’. Deshalb möchte ich einen kleinen Beitrag diesem Befehl mehr Öffentlichkeit geben.
Nützlich ist ’say’ überall dort, wo man Sprache einsetzen möchte, selbst aber nicht unbedingt meint eine angenehme Sprecherstimme hat und lieber auf eine Stimme zurückgreift, die trotz aller Verbesserungen im Laufe der Jahre immer noch etwas künstlich klingt.
Die ersten Schritte
Und so funktioniert es: Nach dem Start des Terminals funktioniert der einfachste Aufruf so:
say Ich kann auch sprechen
Und so funktioniert es: Nach dem Start des Terminals funktioniert der einfachste Anruf wie folgt:
say Ich kann auch sprechen
Der Mac verwendet die Stimme, die in den Einstellungen als Sprecherstimme eingestellt ist. Bei mir war das nach der Installation meines Macs Anna, die sehr künstlich klingt. Es ist jedoch möglich, bessere Versionen der Standardstimmen oder andere Stimmen herunterzuladen.
Ein entsprechender Dialog findet sich hinter dem DropDown-Menü bei der Systemstimme unter dem Menüpunkt „Stimmen verwalten”
Apple bietet dabei eine Vielzahl von Stimmen in den verschiedensten Sprachen an.
Um eine dieser Stimmen zu verwenden, muss nicht unbedingt die Standardstimme geändert werden, der Befehl ’say’ kennt auch einen Parameter, mit dem eine Stimme ausgewählt werden kann.
say -v Ralph Ich kann auch sprechen
Das klingt komisch, weil Ralph eine amerikanische Stimme ist. Es sollte also stattdessen eher folgender Befehl eingegeben werden:
say -v Ralph "I'm able to speak whole sentences"
Einen Überblick über alle Sprachen, die eingesetzt werden können bekommt man mit der Eingabe des Befehls:
say -v '?'
Anscheinend sind nicht alle Sprachen, die in den Spracheinstellungen des Systems möglich sind, auch in der Kommandozeile einstellbar. So ist es mir bisher nicht gelungen, die Siri-Stimmen mit dem Parameter ‑v auszuwählen. Auch einige Stimmen, wie z.B. die en_US Stimme Nicky, konnte ich nicht auswählen.
Wenn es mehrere Qualitätsstufen einer Stimme gibt, muss diese entsprechend aufgerufen werden. Ich habe z.B. zwei unterschiedliche Qualitässtufen der deutsche Stimme Anna auf dem Rechner:
say -v '?' |grep Anna
Anna de_DE # Hallo, ich heiße Anna und ich bin eine deutsche Stimme.
Anna (Premium) de_DE # Hallo, ich heiße Anna und ich bin eine deutsche Stimme.
Wenn ich also Anna (Premium) verwenden will muss ich den gesamten Namen in Anführungszeichen angeben, also:
say -v 'Anna (Premium)' Hallo, ich heiße Anna und ich bin eine deutsche Stimme.
Wieder einmal habe ich mit ChatGPT den folgenden Befehl erstellt, der alle verfügbaren Sprachen anzeigt und mit ihrem Beispielsatz ausspricht (einfach kopieren und in das Terminal einfügen (Ctrl‑C bricht die Schleife ab):
say -v '?' | while IFS= read -r line;
do
voice=$(echo "$line" | awk '{gsub(/[a-z]{2}_[A-Z]{2}.*$/,""); gsub(/ *$/,""); print $0}');
phrase=$(echo "$line" | awk -F "#" '{print $2}');
echo "($voice) $phrase";
say -v "$voice" "$voice: $phrase";
done
Dateien als Eingabe und Sound-Dateien als Ausgabe
Anstatt den Text ins Terminal einzutippen, kann man auch eine Textdatei als Eingabe nutzen. Und das geht so:
say -f testtext.txt
Allerdings wird die Struktur des Textes dabei nicht erkannt, daher werden ggf. vorhandene Überschriften und Ansätze nicht mit den entsprechenden Pausen versehen. Falls man das möchte, gibt es unten noch einen weiterführenden Hinweis.
Wenn die Befehlszeile dann auch noch einem ‑o Parameter versehen wird, entsteht eine Audio-Datei:
say -v 'Anna' -o audio.aiff -f testtext.txt
Es muss dabei unbedingt auch eine Stimme angegeben werden, denn diese fehlt, meckert das System. Das AIFF Audioformat ist als Voreinstellung gesetzt. Wer dies ändern möchte, findet auf der „man”-Seite (man say
im Terminal eingeben) weitere Einstellmöglichkeiten, die neben dem Format, auch andere Parameter wie z.b. die Sprechrate und vieles mehr beeinflussen.
Weiterführendes
Die oben genannten Parameter beeinflussen die gesamte Sprach-Ausgabe eines Textes. Wenn man innerhalb der Textes den Sprachfluss beeinflussen möchte muss sogenannte ‘embedded speech commands’ verwenden. Einige Beispiel sind:
[[emph +]]
Der + Parameter gibt dem Sprach-Synthesizer die Anweisung, die Betonung des folgenden Wortes zu erhöhen.
Es können mehrere Befehle innerhalb eines solchen Kommandos angegeben werden, wenn sie durch Semikolons getrennt sind, wie unten gezeigt:
[[emph +; rate 165]]
Diese Befehle veranlassen die Sprachausgabe, das folgende Wort oder den folgenden Ausdruck mit erhöhter Betonung und mit einer Geschwindigkeit von 165 Wörtern pro Minute zu sprechen.
[[volm 0.3]] Dieser Befehl setzt das Lautstärke, mit dem das folgende Wort gesprochen wird, auf 0.3.
[[volm +0.1]] Dieser Befehl erhöht die Lautstärke, mit dem das folgende Wort gesprochen wird, um 0.1.
Weitere Infos zu diesen Embedded Speech Commands finden sich in den Speech Synthesis Programming Guide direkt an dieser Stelle
Die Dokumentation befindet sich im archivierten Apple Entwickler Dokumentation. Bereich. Das kann bedeuten, das es vielleicht bald Änderungen in der Ansteuerung geben könnte. So soll es mit den Apple Betriebssystemen, die im Herbst 2023 herauskommen, z.B. möglich sein die eigenes Stimme zu synthetisieren. Ob dadurch dann auch Änderungen beim ’say’-Befehl ergeben, werde ich zu gegebener Zeit nachtragen.
Hier auch noch ein weiterer Link der die Verwendung dieser Text-To-Speech Möglichkeiten in AppleScript aufzeigt.
Schreibe einen Kommentar