¿Cómo puedo cambiar cómo el comando 'decir' de OS X pronuncia una palabra?

14

El saycomando de OS X es útil para algunas tareas (como las notificaciones de Skype cuando un contacto se conecta), pero pronuncia algunos nombres incorrectamente. ¿Hay alguna manera de enseñar saya pronunciar una palabra de manera diferente?

Por ejemplo, intente:

say "Hi, Joel Spolsky"

El 'ol' suena como 'pelota' en lugar de 'viejo'. Me gustaría agregar una excepción que diga "Pronunciar a Spolsky así", en lugar de tratar de enseñar nuevas reglas lingüísticas. Apuesto a que hay una manera, ya que puede pronunciar "iphone" como Apple quiere.


Actualización : después de investigar un poco, esto es lo que he aprendido:

  1. El texto a voz se divide entre convertir el texto en fonemas, y luego los fonemas se convierten en audio usando una voz. Cambiar la voz no afecta los fonemas.
  2. El Administrador de síntesis de voz tiene algunas funciones para convertir el texto en fonemas , y un método para registrar un diccionario de voz que agregará nuevos mapas de fonemas de texto. Sin embargo, el diccionario de voz de Apple debe estar en forma binaria: no encontré ningún XML simple.
  3. Utilizando dtracemientras se ejecuta say, encontré algunos archivos interesantes abiertos en /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. Este es probablemente el diccionario de voz, pero todos son binarios, excepto Homophones, que es XML. Agregar entradas a Homophones no hace nada, probablemente se usa en voz a texto. También son códigos firmados por Apple; cambiarlos puede evitar que algunos programas funcionen.
    • PrefijoDiccionario
    • CartNames
    • CartLite
    • SymbolDictionary
    • Homófonos
  4. Hay formas de agregar versiones de texto de los elementos de la interfaz de la aplicación para que VoiceOver funcione, muchas de las cuales un desarrollador obtiene de forma gratuita, pero hay partes difíciles . El estándar aquí parece ser usar una ortografía fonética según sea necesario.

Mis conjeturas son:

  1. sayes una capa ligera de código en la parte superior del Administrador de síntesis de voz. Sería fácil para los desarrolladores de Apple agregar una opción de línea de comando para tomar el camino a una lista de diccionarios de voz para mapeo de fonemas alternativo, pero no lo hicieron. Puede ser un proyecto útil de código abierto para escribir un mejor say.
  2. Skype probablemente usa Speech Synthesis Manager directamente, sin dejar ganchos para cambiar la forma en que se pronuncian los nombres de mis amigos, aparte de deletrear fonéticamente, lo cual es una tontería.
  3. La forma más fácil de hacer una versión de línea de comandos sayes cómo sugirió JRobert.

Aquí está mi implementación rápida, usando la sugerencia de ortografía de Doug Harris:

#!/bin/sh
echo $@ | tr '[A-Z]' '[a-z]' |
sed "s/spolsky/spowlsky/g" |
/usr/bin/say

Finalmente, algunas cosas divertidas de la línea de comandos:

# Apple is weird
sqlite3 /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources/Tuples .dump
# Get too much information about what files are being opened
sudo dtrace -n 'syscall::open*:entry { printf("%s %s",execname,copyinstr(arg0)); }'
# Just fun
say -v bad "Joel Spolsky Spolsky Spolsky Spolsky Spolsky, Joel Spolsky Spolsky Spolsky Spolsky Spolsky"
echo "scale=1000; 4*a(1)" | bc -l | say
jwhitlock
fuente
¿Intentaste cambiar el sayuso de la voz con -v?
Studer
2
No tiene efecto en la pronunciación: say -v alex 'Spolsky' ; say -v vicki 'Spolsky'; say -v bad 'Spolsky Spolsky Spolsky Spolsky Spolsky Spols'. La lista de voces se puede encontrar en Preferencias del sistema -> Voz -> Texto a voz. El problema está en la traducción del fonema, no en la síntesis de voz. Si está llamando a la biblioteca directamente, puede configurar fonemas personalizados: developer.apple.com/mac/library/documentation/Carbon/Reference/… Buscando en mi disco para ver si los desarrolladores de Apple usaron un .plist ...
jwhitlock

Respuestas:

8

Bueno, también puedes ingresar exactamente los fonemas que deseas que se digan. La sintaxis no es tan complicada.

Ex:

[[inpt PHON]] hAAIH.

Consulte este enlace para obtener más información: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1

Bruno Carvalho
fuente
1
Puede usar Repetir después de mí para generar la sintaxis fonética. Está disponible en developer.apple.com/downloads .
Lri
Repetir después de mí es parte de Herramientas auxiliares para Xcode .
Daniel Beck
1
Esto funcionó para mí: di 'Hola, Joel [[inpt PHON]] spOWl SKIY'. Me pregunto si esto más campos fonéticos en la libreta de direcciones funcionará: macdailynews.com/2011/10/20/…
jwhitlock
¿Dónde ingresarías estos fonemas?
Burhan Ali
6
  • Cree una lista de pares de palabras [spolsky spowlsky; joel jole ...]
  • Cree una secuencia de comandos en su lenguaje de secuencias de comandos favorito que sustituya las palabras en su lista de parámetros de acuerdo con su lista de pares de palabras, y pase la lista de parámetros modificada a "/ usr / bin / say".
  • Haga que el script sea ejecutable, llámelo "say" y póngalo en una carpeta que aparezca antes en su $ PATH que "/ usr / bin".
  • Agregue variantes de ortografía a su lista de pares de palabras a medida que encuentre más palabras que le gustaría pronunciar de manera diferente.

Su nueva voz funcionará como la vieja, pero con su pronunciación preferida.

JRobert
fuente
3

La respuesta de @ bruno-carvalho respondió esta pregunta por mí. Pero también necesitaba buscar la etiqueta [[inpt TEXT]]para que el comando say volviera a la lectura (sintetización de voz) de texto normalmente. Por ejemplo:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Con suerte, agregar esto a la respuesta ayudará a los lectores posteriores de esta pregunta.

D. Woods
fuente
2

No creo que puedas. Puede intentar configurar la voz predeterminada en una diferente en las preferencias del sistema, o puede escribir cómo desea que se pronuncien las cosas. Por ejemplo, "Hola, cielo Jole Spole".

Nick McCurdy
fuente
1
¿Qué tal "Spowlsky"?
Doug Harris
2

Esta es una limitación desafortunada, dado que Apple parece estar la mayor parte del camino. Los usuarios de VoiceOver pueden insertar fácilmente sus propias pronunciaciones utilizando la Utilidad VoiceOver (Voz-> Pronunciación). Pero, la configuración de VoiceOver no parece aplicarse al comando "decir" o al menú Editar-> Voz -> "Iniciar voz" en Safari y otras aplicaciones proporcionadas por Apple.

Conocer
fuente
0

No hay forma de "enseñar" al sayprograma a pronunciar palabras de manera diferente. Como se sugirió anteriormente, la forma más fácil de obtener la pronunciación que desea es ajustar la ortografía de sus palabras hasta que las diga de la manera que desee.

Mistiry
fuente