Mac OS X: cambie rápidamente las voces para Text-to-Speech

10

Me encanta la función de texto a voz de Mac OS X. Como no soy hablante nativo de inglés, estoy muy contento con todos los idiomas adicionales agregados desde que salió Lion. Sin embargo, uso el inglés además de mi lengua materna (alemán). Cambiar las voces es un poco doloroso. Solo requiere demasiados pasos para estar cómodo.

¿Hay alguna manera de hacer esto fácil? Estaba buscando atajos, tal vez un menú desplegable en algún lugar en la esquina derecha, cualquier cosa estaría bien.

Como mi búsqueda no tuvo éxito, espero encontrar algunos consejos aquí en SuperUser. ¡Muchas gracias!

cu romana


fuente
Estoy en Mac y creé Talkie: una extensión de navegador de texto a voz con detección automática de idioma. Todo es de código abierto, pero algunas características se encuentran en la distribución comercial Talkie Premium. Es más fácil de usar en el navegador (con teclas de acceso directo), pero puede usarlo desde cualquier aplicación a través del portapapeles (premium). ¡Podría ayudarte! joelpurra.com/projects/talkie
Joel Purra

Respuestas:

9

He usado FastScripts para asignar un acceso directo a este 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

También puede crear un servicio en Automator:

Hay un error en 10.7 y 10.8 donde los accesos directos para los servicios de Automator no siempre funcionan hasta que pasa el cursor sobre el menú de servicios desde la barra de menú. WorkflowServiceRunner también puede usar más del 100% de CPU mientras habla texto.

Otra opción sería usar secuencias de comandos de la interfaz de usuario para cambiar entre dos voces:

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"

Cambiar la clave SelectedVoiceID en com.apple.speech.voice.prefs.plist también funciona, pero no sé cómo aplicar los cambios de inmediato.

Lri
fuente
Wow, muchas gracias por esta respuesta tan detallada y por mostrarme tantas opciones. El servicio Automator funciona muy bien para mí, además ahora sé sobre esos servicios. Es posible que desee agregar algunos otros también :)
1
Buena cosa. A partir de OSX 10.10: para aplicar los cambios de ~/Library/Preferences/com.apple.speech.voice.prefs.plistinmediato, ejecute pkill com.apple.speech.speechsynthesisd, lo que hace que el sistema reinicie automáticamente el proceso, momento en el que se recogen los cambios.
mklement0
1
En mi OS X 10.10.4, las secuencias de comandos de la IU solo funcionan si inserto la línea "activar" entre la línea 1 y 2. De lo contrario, aparece el error: "grupo de pestañas 1 de la ventana 1 del proceso \" Preferencias del sistema \ "" no se puede ser leído ... ¿Alguna sugerencia por qué esto se aplica a mí pero no a otros?
Jens Wirth
3

Muchas gracias Lauryi.

He ampliado su enfoque de scripts de UI para que funcione correctamente con voces en alemán e inglés. El problema es que cuando el idioma de su sistema no es el inglés, todos los idiomas que no son del sistema están ocultos (si no está seleccionado actualmente). Debe seleccionar: mostrar más voces ... primero para llegar al idioma deseado. Mi código carece de un poco de elegancia, pero funciona. Aquí está (actualizado):

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
fuente
0

Los cambios directos a ~/Library/Preferences/com.apple.speech.voice.prefs.plistno son realmente necesarios si obtiene las voces bash-script que realmente agregan toda la funcionalidad de línea de comandos que necesita.

Un script de Apple para cambiar la voz estándar a Alex usando Voces simplemente se vería así:

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

Prefiero el terminal, y en lugar de probar la intrusión de la barra de menú políglota, hice este script de shell (que ciertamente es estúpido) (que usa voces) para mis necesidades de cambio de idioma. Con él, todo lo que hago para cambiar el idioma predeterminado es ingresar al terminal para escribir speak swedisho speak french. Esto encaja excelentemente en mi flujo de trabajo. Espero que puedas encontrar una solución que se adapte a la tuya.

# 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 guardo en mis scripts como "speak.command", chmod it + x, y agrego el alias apropiado a mi .bash_profile para evocarlo escribiendo speak.

Josef Lilljegren
fuente