La say
commande d' OS X est utile pour certaines tâches (comme celle de Skype m'informer lorsqu'un contact arrive en ligne), mais elle ne prononce pas correctement certains noms. Existe-t-il un moyen d'apprendre say
à prononcer un mot différemment?
Par exemple, essayez:
say "Hi, Joel Spolsky"
Le «ol» sonne comme «balle» plutôt que «vieux». Je voudrais ajouter une exception qui dit "Prononcez Spolsky comme ça", plutôt que d'essayer d'enseigner de nouvelles règles linguistiques. Je parie qu'il existe un moyen car il peut prononcer "iphone" comme Apple le veut.
Mise à jour - Après quelques recherches, voici ce que j'ai appris:
- La synthèse vocale est partagée entre la conversion du texte en phonèmes, puis les phonèmes sont transformés en audio à l'aide d'une voix. Changer la voix n'affecte pas les phonèmes.
- Le gestionnaire de synthèse vocale a certaines fonctions pour convertir du texte en phonèmes , et une méthode pour enregistrer un dictionnaire vocal qui ajoutera de nouvelles cartes de phonèmes textuels. Cependant, le dictionnaire vocal d'Apple doit être sous forme binaire - je n'ai trouvé aucun XML plist.
- En utilisant
dtrace
en cours d'exécutionsay
, j'ai trouvé des fichiers intéressants ouverts dans /System/Library/PrivateFrameworks/SpeechDictionary.framework/Resources. C'est probablement le dictionnaire de la parole, mais ils sont tous binaires, à l'exception des homophones, qui sont XML. L'ajout d'entrées aux homophones ne fait rien - il est probablement utilisé dans la synthèse vocale. Ils sont également signés par Apple - les modifier peut empêcher certains programmes de fonctionner.- PrefixDictionary
- CartNames
- CartLite
- SymboleDictionnaire
- Homophones
- Il existe des moyens d'ajouter des versions textuelles des éléments de l'interface d'application pour que VoiceOver fonctionne, dont beaucoup sont gratuits pour un développeur, mais il y a des éléments délicats . La norme semble ici être d'utiliser une orthographe phonétique au besoin.
Mes suppositions sont:
say
est une couche légère de code au-dessus du gestionnaire de synthèse vocale. Il serait facile pour les développeurs Apple d'ajouter une option de ligne de commande pour prendre le chemin vers une liste de dictionnaires vocaux pour un mappage de phonèmes alternatif, mais ils ne l'ont pas fait. Cela peut être un projet open source utile pour écrire mieuxsay
.- Skype utilise probablement Speech Synthesis Manager directement, ne laissant aucun crochet pour changer la façon dont les noms de mes amis sont prononcés, à part les épeler phonétiquement, ce qui est stupide.
- La façon la plus simple de créer une version en ligne de commande
say
est la suggestion de JRobert.
Voici ma mise en œuvre rapide, en utilisant la suggestion d'orthographe de Doug Harris:
#!/bin/sh
echo $@ | tr '[A-Z]' '[a-z]' |
sed "s/spolsky/spowlsky/g" |
/usr/bin/say
Enfin, quelques trucs amusants en ligne de commande:
# 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 liste des voix se trouve dans les Préférences Système -> Voix -> Synthèse vocale. Le problème concerne la traduction des phonèmes, pas la synthèse vocale. Si vous appelez directement la bibliothèque, vous pouvez définir des phonèmes personnalisés: developer.apple.com/mac/library/documentation/Carbon/Reference/… Recherche sur mon disque pour voir si les développeurs Apple ont utilisé un .plist ...
say
utilisée avec-v
?