Mac OS X: consente di cambiare rapidamente le voci per la sintesi vocale


10

Adoro la funzionalità di sintesi vocale di Mac OS X. Dato che non sono un madrelingua inglese, sono molto contento di tutte le lingue aggiuntive aggiunte da quando è uscito Lion. Tuttavia, utilizzo l'inglese e la mia lingua madre (tedesco). Cambiare voce è un po 'una seccatura. Richiede solo troppi passaggi per stare comodo.

C'è un modo per renderlo facile? Stavo cercando delle scorciatoie, forse un menu a discesa da qualche parte nell'angolo a destra, tutto sarebbe andato bene.

Dato che la mia ricerca non ha avuto successo, spero di trovare qualche consiglio qui su SuperUser. Molte grazie!

cu romano


Sono su Mac e ho creato Talkie: un'estensione del browser di sintesi vocale con rilevamento automatico della lingua. È tutto open source, ma alcune funzionalità sono nella distribuzione commerciale Talkie Premium. Più facile da usare nel browser (con i tasti di scelta rapida), ma è possibile utilizzarlo da qualsiasi applicazione tramite gli appunti (premium). Potrebbe aiutarti! joelpurra.com/projects/talkie
Joel Purra

Risposte:


9

Ho usato FastScripts per assegnare un collegamento a questo 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

Puoi anche creare un servizio in Automator:

Esiste un bug in 10.7 e 10.8 in cui le scorciatoie per i servizi di Automator non funzionano sempre finché non si passa con il mouse sul menu dei servizi dalla barra dei menu. WorkflowServiceRunner può anche usare oltre il 100% di CPU mentre parla testo.

Un'altra opzione sarebbe quella di utilizzare gli script dell'interfaccia utente per cambiare tra due voci:

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"

Anche la modifica della chiave SelectedVoiceID in com.apple.speech.voice.prefs.plist funziona, ma non so come applicare immediatamente le modifiche.


Wow, grazie mille per questa risposta molto dettagliata e per avermi mostrato così tante opzioni. Il servizio Automator funziona perfettamente per me, inoltre ora conosco questi servizi. Potrei aggiungerne anche altri :)

1
Roba fantastica. A partire da OSX 10.10: Per applicare ~/Library/Preferences/com.apple.speech.voice.prefs.plistimmediatamente le modifiche , eseguire pkill com.apple.speech.speechsynthesisd, il che fa sì che il sistema riavvii automaticamente il processo, a quel punto le modifiche vengono raccolte.
mklement0

1
Sul mio OS X 10.10.4, lo script dell'interfaccia utente funziona solo se inserisco la riga "activ" tra la riga 1 e 2. In caso contrario, viene visualizzato l'errore: "gruppo di schede 1 della finestra 1 del processo \" Preferenze di sistema \ "" impossibile leggi ... Qualche suggerimento sul perché questo valga per me ma non per gli altri?
Jens Wirth,

3

Grazie mille Lauryi.

Ho esteso il tuo approccio di scripting dell'interfaccia utente per funzionare correttamente con voci tedesche e inglesi. Il problema è che quando la lingua del tuo sistema non è l'inglese, tutte le lingue non di sistema sono nascoste (se non sono attualmente selezionate). Devi selezionare: mostra più voci .. prima per arrivare alla lingua desiderata. Il mio codice manca di un po 'di eleganza, ma funziona. Eccolo (aggiornato):

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

Le modifiche dirette a ~/Library/Preferences/com.apple.speech.voice.prefs.plistnon sono realmente necessarie se si ottengono le voci bash-script che aggiungono davvero tutte le funzionalità della riga di comando necessarie.

Uno script Apple per cambiare la voce standard in Alex usando Voices sarebbe semplicemente simile a questo:

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

Preferisco il terminale, e invece di testare l'intrusione della barra dei menu poliglotta, ho realizzato questo script di shell (certamente semplice-stupido) (che usa le voci) per le mie esigenze di cambio di lingua. Con esso, tutto ciò che faccio per cambiare la lingua predefinita è di pop nel terminale per digitare speak swedisho speak french. Questo si adatta perfettamente al mio flusso di lavoro. Spero che tu possa trovare una soluzione adatta alla tua.

# 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

Lo salvo nei miei script come "speak.command", lo digito + x e aggiungo l'alias appropriato al mio .bash_profile per evocarlo digitando speak.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.