Mac OS X - Ändern Sie schnell die Stimmen für Text-to-Speech


10

Ich liebe die Text-zu-Sprache-Funktion von Mac OS X. Da ich kein englischer Muttersprachler bin, freue ich mich sehr über alle zusätzlichen Sprachen, die seit dem Erscheinen von Lion hinzugefügt wurden. Ich verwende jedoch sowohl Englisch als auch meine Muttersprache (Deutsch). Das Ändern der Stimmen ist ein bisschen schmerzhaft. Es sind einfach zu viele Schritte erforderlich, um sich wohl zu fühlen.

Gibt es eine Möglichkeit, dies einfach zu machen? Ich suchte nach Abkürzungen, vielleicht irgendwo in der rechten Ecke nach einem Dropdown-Menü, alles wäre in Ordnung.

Da meine Suche nicht erfolgreich war, hoffe ich, hier auf SuperUser einige Ratschläge zu finden. Danke vielmals!

cu Roman


Ich bin auf einem Mac und habe Talkie erstellt: eine Text-zu-Sprache-Browser-Erweiterung mit automatischer Spracherkennung. Es ist alles Open Source, aber einige Funktionen sind in der kommerziellen Distribution Talkie Premium enthalten. Am einfachsten im Browser zu verwenden (mit Tastenkombinationen), aber Sie können es von jeder Anwendung aus über die Zwischenablage (Premium) verwenden. Könnte dir helfen! joelpurra.com/projects/talkie
Joel Purra

Antworten:


9

Ich habe FastScripts verwendet, um diesem Skript eine Verknüpfung zuzuweisen:

try
    set old to the clipboard as record
end try
try
    tell application "System Events" to keystroke "c" using command down
    delay 0.05
    say (the clipboard) using "Kyoko"
end try
try
    set the clipboard to old
end try

Sie können auch einen Dienst in Automator erstellen:

In 10.7 und 10.8 gibt es einen Fehler, bei dem die Verknüpfungen für Automator-Dienste nicht immer funktionieren, bis Sie den Mauszeiger über das Dienstemenü in der Menüleiste bewegen. WorkflowServiceRunner kann beim Sprechen von Text auch über 100% der CPU verwenden.

Eine andere Möglichkeit wäre die Verwendung von UI-Skripten, um zwischen zwei Stimmen zu wechseln:

tell application "System Preferences"
    reveal anchor "TTS" of pane "com.apple.preference.speech"
end tell
tell application "System Events" to tell process "System Preferences"
    tell pop up button 1 of tab group 1 of window 1
        click
        delay 0.1
        if value is "Alex" then
            click menu item "Victoria" of menu 1
        else
            click menu item "Alex" of menu 1
        end if
    end tell
end tell
quit application "System Preferences"

Das Ändern des SelectedVoiceID-Schlüssels in com.apple.speech.voice.prefs.plist funktioniert ebenfalls, aber ich weiß nicht, wie ich die Änderungen sofort anwenden soll.


Wow, vielen Dank für diese sehr detaillierte Antwort und dafür, dass Sie mir so viele Möglichkeiten gezeigt haben. Der Automator-Service funktioniert hervorragend für mich, außerdem weiß ich jetzt über diese Services Bescheid. Ich möchte vielleicht auch einige andere hinzufügen :)

1
Tolles Zeug. Ab OSX 10.10: Um Änderungen ~/Library/Preferences/com.apple.speech.voice.prefs.plistsofort anzuwenden , führen Sie aus pkill com.apple.speech.speechsynthesisd, wodurch das System den Prozess automatisch neu startet und die Änderungen übernommen werden.
mklement0

1
Unter OS X 10.10.4 funktioniert Ihre UI-Skripterstellung nur, wenn ich die Zeile "Aktivieren" zwischen Zeile 1 und 2 einfüge. Andernfalls wird die Fehlermeldung angezeigt: "Registerkartengruppe 1 von Fenster 1 des Prozesses" Systemeinstellungen "kann nicht gelesen werden ... Irgendwelche Vorschläge, warum dies für mich gilt, aber nicht für andere?
Jens Wirth

3

Vielen Dank Lauryi.

Ich habe Ihren UI-Scripting-Ansatz erweitert, um ordnungsgemäß mit deutschen und englischen Stimmen zu arbeiten. Das Problem ist, wenn Ihre Systemsprache nicht Englisch ist, werden alle Nicht-Systemsprachen ausgeblendet (falls derzeit nicht ausgewählt). Sie müssen auswählen: Weitere Stimmen anzeigen .. zuerst, um zur gewünschten Sprache zu gelangen. Meinem Code fehlt ein bisschen Eleganz, aber er funktioniert. Hier ist es (aktualisiert):

tell application "System Preferences"
    reveal anchor "TTS" of pane "com.apple.preference.speech"
end tell
set tom to 0
tell application "System Events" to tell process "System Preferences"
    tell pop up button 1 of tab group 1 of window 1
        click
        delay 0.2 -- without this the value was sometimes "Loading Voices…"

        if value is "Tom" then
            click menu item "Anna" of menu 1
        else
            click menu item "Mehr Stimmen anzeigen" of menu 1 -- show up all available voice
            set tom to 1
        end if
    end tell
end tell
if tom is 1 then
    delay 0.5
    tell application "System Events" to tell process "System Preferences"
        tell pop up button 1 of tab group 1 of window 1
            click
            delay 0.2 -- without this the value was sometimes "Loading Voices…"
            click menu item "Tom" of menu 1
        end tell
    end tell
end if
quit application "System Preferences"

0

Direkte Änderungen an ~/Library/Preferences/com.apple.speech.voice.prefs.plistsind nicht wirklich erforderlich, wenn Sie das Bash-Skript Voices erhalten, das wirklich alle erforderlichen Befehlszeilenfunktionen hinzufügt.

Ein Apple-Skript zum Ändern der Standardstimme in Alex mithilfe von Voices würde einfach so aussehen:

on run
    do shell script "voices -d Alex"
end run

Ich bevorzuge das Terminal, und anstatt das Eindringen in die polyglotte Menüleiste zu testen, habe ich dieses (zugegebenermaßen einfach-dumme) Shell-Skript (das Stimmen verwendet) für meine Sprachwechselanforderungen erstellt. Alles, was ich tun muss, um die Standardsprache zu ändern, ist, in das Terminal zu springen, um speak swedishoder einzugeben speak french. Das passt hervorragend in meinen Workflow. Ich hoffe, Sie finden eine Lösung, die zu Ihrer passt.

# Choose a voice in one of some selected languages
# Use "voices" from https://github.com/mklement0/voices#manual-installation

if [[ $1 = "" ]]
then
    echo "ERROR. No language specified. Type a language as in 'speak hebrew'"
fi
if [[ $1 = "swedish" || $1 = "Swedish" ]]
then
    voices -d Klara
fi
if [[ $1 = "english" || $1 = "English" ]]
then
    voices -d Daniel
fi
if [[ $1 = "american" || $1 = "American" ]]
then
    voices -d Alex
fi
if [[ $1 = "french" || $1 = "French" ]]
then
    voices -d Aurelie
fi
if [[ $1 = "spanish" || $1 = "Spanish" ]]
then
    voices -d Jorge
fi

Ich speichere es in meinen Skripten als "speak.command", chmod it + x und füge meinem .bash_profile den entsprechenden Alias ​​hinzu, um es durch Eingabe aufzurufen speak.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.