Mac OS X - Changez rapidement de voix pour la synthèse vocale

10

J'adore la fonction de synthèse vocale de Mac OS X. Comme je ne suis pas un anglophone natif, je suis très heureux de toutes les langues supplémentaires ajoutées depuis la sortie de Lion. Cependant, j'utilise l'anglais ainsi que ma langue maternelle (l'allemand). Changer de voix est un peu pénible. Il faut juste trop de pas pour être confortable.

Existe-t-il un moyen de rendre cela facile? Je cherchais des raccourcis, peut-être un menu déroulant quelque part dans le coin droit, tout irait bien.

Comme ma recherche n'a pas abouti, j'espère trouver ici quelques conseils sur SuperUser. Merci beaucoup!

cu Roman


la source
Je suis sur Mac et j'ai créé Talkie: une extension de navigateur de synthèse vocale avec détection automatique de la langue. Tout est open source, mais certaines fonctionnalités sont dans la distribution commerciale Talkie Premium. Plus facile à utiliser dans le navigateur (avec des touches de raccourci), mais vous pouvez l'utiliser à partir de n'importe quelle application via le presse-papiers (premium). Pourrait vous aider! joelpurra.com/projects/talkie
Joel Purra

Réponses:

9

J'ai utilisé FastScripts pour attribuer un raccourci à ce script:

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

Vous pouvez également créer un service dans Automator:

Il y a un bogue dans 10.7 et 10.8 où les raccourcis pour les services Automator ne fonctionnent pas toujours tant que vous n'avez pas survolé le menu des services dans la barre de menus. WorkflowServiceRunner peut également utiliser plus de 100% de CPU tout en parlant du texte.

Une autre option serait d'utiliser des scripts d'interface utilisateur pour basculer entre deux voix:

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"

Changer la clé SelectedVoiceID dans com.apple.speech.voice.prefs.plist fonctionne également, mais je ne sais pas comment appliquer les modifications immédiatement.

Lri
la source
Wow, merci beaucoup pour cette réponse très détaillée et pour m'avoir montré tant d'options. Le service Automator fonctionne très bien pour moi, en plus maintenant je connais ces services. Je pourrais aussi en ajouter d'autres :)
1
Super truc. Depuis OSX 10.10: pour appliquer ~/Library/Preferences/com.apple.speech.voice.prefs.plistimmédiatement les modifications , exécutez pkill com.apple.speech.speechsynthesisd, ce qui oblige le système à redémarrer automatiquement le processus, moment auquel les modifications sont récupérées.
mklement0
1
Sur mon OS X 10.10.4, votre script d'interface utilisateur ne fonctionne que si j'insère la ligne "activer" entre la ligne 1 et 2. Sinon, j'obtiens l'erreur: "groupe d'onglets 1 de la fenêtre 1 du processus \" Préférences Système \ "" ne peut pas être lu ... Des suggestions pourquoi cela s'applique à moi mais pas aux autres?
Jens Wirth
3

Merci beaucoup Lauryi.

J'ai étendu votre approche de script d'interface utilisateur pour fonctionner correctement avec les voix allemandes et anglaises. Le problème est que lorsque la langue de votre système n'est pas l'anglais, toutes les langues non système sont masquées (si elles ne sont pas actuellement sélectionnées). Vous devez sélectionner: afficher plus de voix .. d'abord pour arriver à la langue souhaitée. Mon code manque un peu d'élégance, mais fonctionne. Le voici (mis à jour):

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"
kantorde
la source
0

Les modifications directes vers ~/Library/Preferences/com.apple.speech.voice.prefs.plistne sont pas vraiment nécessaires si vous obtenez les voix bash-script qui ajoutent vraiment toutes les fonctionnalités de ligne de commande dont vous avez besoin.

Un script Apple pour changer la voix standard en Alex à l'aide de voix ressemblerait simplement à ceci:

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

Je préfère le terminal, et au lieu de tester l'intrusion de la barre de menus polyglotte, j'ai créé ce script shell (certes simple-stupide) (qui utilise des voix) pour mes besoins de changement de langue. Avec lui, tout ce que je fais pour changer la langue par défaut est de passer dans le terminal pour taper speak swedishou speak french. Cela s'intègre parfaitement dans mon flux de travail. J'espère que vous pourrez trouver une solution qui vous convient.

# 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

Je l'enregistre dans mes scripts en tant que "speak.command", le modifie + x, et j'ajoute l'alias approprié à mon .bash_profile pour l'évoquer en tapant speak.

Josef Lilljegren
la source