El comando "say" funciona bien con la voz personal, pero no realiza las tareas necesarias para solicitar que se otorguen los permisos a la aplicación Terminal.
El problema es que Mac OS Sonoma no te permite agregar manualmente una aplicación a la lista de aplicaciones autorizadas, aunque haya un signo "+" en Ajustes - Accesibilidad - Voz personal - Permitir que las aplicaciones usen tu voz personal.
Para solucionar esto, puedes compilar y ejecutar una herramienta de línea de comandos en objective-c que solicite permisos la primera vez que se ejecute desde el terminal, luego el terminal obtendrá los permisos de Voz Personal y "say" (y cualquier otra herramienta de línea de comandos que use síntesis de voz personal) funcionará.
Una implementación muy pequeña sería: (Requiere Xcode 15 o las últimas Herramientas de Línea de Comandos)
#import
int main(){
[AVSpeechSynthesizer requestPersonalVoiceAuthorizationWithCompletionHandler:^(AVSpeechSynthesisPersonalVoiceAuthorizationStatus status){
// ahora debería verse el popup de autorización
}];
[[NSRunLoop currentRunLoop] run];
return 0;
}
Guárdalo como: mysay.c
y puedes compilarlo en la línea de comandos con:
gcc -x objective-c -framework AVFoundation -framework Foundation mysay.c -o mysay
y ejecutarlo como
./mysay
Mac OS debería mostrar un mensaje pidiendo que se otorguen permisos a Terminal. Después de aceptar esto, say -v TuNombreDeVoz "Hola mundo"
debería funcionar