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
uso de la voz con-v
?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 ...Respuestas:
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
fuente
Su nueva voz funcionará como la vieja, pero con su pronunciación preferida.
fuente
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.
fuente
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".
fuente
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.
fuente
No hay forma de "enseñar" al
say
programa 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.fuente