Comment puis-je changer la façon dont la commande «dire» d'OS X prononce un mot?

14

La saycommande 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:

  1. 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.
  2. 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.
  3. En utilisant dtraceen cours d'exécution say, 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
  4. 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:

  1. sayest 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 mieux say.
  2. 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.
  3. La façon la plus simple de créer une version en ligne de commande sayest 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
jwhitlock
la source
Avez-vous essayé de changer la voix sayutilisée avec -v?
Studer
2
Aucun effet sur la prononciation: 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 ...
jwhitlock

Réponses:

8

Eh bien, vous pouvez également saisir exactement les phonèmes que vous souhaitez dire. La syntaxe n'est pas si compliquée.

Ex:

[[inpt PHON]] hAAIH.

Cliquez sur ce lien pour en savoir plus: http://developer.apple.com/library/mac/#documentation/UserExperience/Conceptual/SpeechSynthesisProgrammingGuide/Phonemes/Phonemes.html#//apple_ref/doc/uid/TP40004365-CH9-SW1

Bruno Carvalho
la source
1
Vous pouvez utiliser Repeat After Me pour générer la syntaxe phonétique. Il est disponible sur developer.apple.com/downloads .
Lri
Repeat After Me fait partie des outils auxiliaires pour Xcode .
Daniel Beck
1
Cela a fonctionné pour moi: dites «Salut, Joel [[inpt PHON]] spOWl skIY». Je me demande si ce plus les champs phonétiques du carnet d'adresses feront l'affaire: macdailynews.com/2011/10/20/…
jwhitlock
Où saisiriez-vous ces phonèmes?
Burhan Ali
6
  • Créez une liste de paires de mots [spolsky spowlsky; joel jole; ...].
  • Créez un script dans votre langage de script préféré qui remplace les mots de sa liste de paramètres en fonction de votre liste de paires de mots et transmet la liste de paramètres modifiée à "/ usr / bin / say".
  • Rendez le script exécutable, appelez-le "say" et placez-le dans un dossier qui apparaît plus tôt dans votre $ PATH que "/ usr / bin".
  • Ajoutez des variantes orthographiques à votre liste de paires de mots à mesure que vous trouvez plus de mots que vous souhaitez prononcer différemment.

Votre nouveau mot fonctionnera comme l'ancien, mais avec votre prononciation préférée.

JRobert
la source
3

La réponse de @ bruno-carvalho a répondu à cette question pour moi. Mais, j'ai également eu besoin de traquer la balise [[inpt TEXT]]pour obtenir la commande say pour revenir à la lecture (synthèse vocale) du texte normalement. Par exemple:
say [[inpt PHON]] hAAIH, [[inpt TEXT]] how are you?

Espérons que l'ajout de cela à la réponse aidera les lecteurs suivants de cette question.

D. Woods
la source
2

Je ne pense pas que vous puissiez. Vous pouvez essayer de définir la voix par défaut sur une voix différente dans les préférences système, ou vous pouvez taper la façon dont vous voulez que les choses soient prononcées. Par exemple, "Salut, Jole Spole sky."

Nick McCurdy
la source
1
que diriez-vous de "Spowlsky"?
Doug Harris
2

C'est une limitation malheureuse, étant donné qu'Apple semble être la plus grande partie du chemin. Les utilisateurs de VoiceOver peuvent facilement insérer leurs propres prononciations à l'aide de l'utilitaire VoiceOver (Parole-> Prononciation). Mais, les paramètres VoiceOver ne semblent pas s'appliquer à la commande «dire» ou au menu Édition-> Parole -> «Démarrer la parole» dans Safari et d'autres applications fournies par Apple.

Ken
la source
0

Il n'y a aucun moyen d'enseigner au sayprogramme à prononcer les mots différemment. Comme suggéré ci-dessus, la façon la plus simple d'obtenir la prononciation que vous voulez est d'ajuster l'orthographe de vos mots jusqu'à ce qu'ils les disent comme vous le souhaitez.

Mistiry
la source