El say
comando 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 say
a 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:
- 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.
- 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.
- Utilizando
dtrace
mientras se ejecutasay
, 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
- 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:
say
es 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 mejorsay
.- 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.
- La forma más fácil de hacer una versión de línea de comandos
say
es 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
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 ...
say
uso de la voz con-v
?