Re: Peace! Was:Re: nouveau wav, c'est mieux! Re: [CBLX] Re: Cicero

[ Thread Index | Date Index | More lists.tuxfamily.org/carrefourblinux Archives ]


On Sat, 7 Feb 2009, Pierre Lorenzon wrote:

> Y a au moins une chose sur laquelle on est d'accord c'est que la voix 
> de mbrola et quand-même à peu près ce dont on peut disposer de 
> meilleur. La question et celle du préprocesseur et même peut-être même 
> de l'implémentation du préprocesseur. En effet, moi je ne vois aucun 
> inconvénient à vous communiqer le code de mes lexiques et même à vous 
> donner un coup de main pour les interfacer avec votre système.

C'est pas compliqué: Cicero est en fait environ 700 règles de 
substitution utilisant des "regular expressions".  Rien de très sorcier 
là dedans.  Il ne fait même pas d'analyse grammaticale.  On peut donc 
dire que Cicero est une merde qui fonctionne extrèmement bien.

Voici quelques exemples de règles pour situer la simplicité du système:

f [[ ai ]] sV   -> @                            ## faisons faisan
[[ a ]] il(l|s?T) -> a                          ## paille bail
[[ aie ]] me -> E                               ## paiement
[[ ai ]] -> E                                   ## aile
[[ am ]] [bp] -> a~                             ## camp chambre
[[ am ]] m -> a                                 ## programmation
[[ am ]] n -> a m                               ## amnistie
[[ a ]] nn -> a                                 ## manne
[[ an ]] (C|T)  -> a~                           ## ancien

Etc. Les lettres entre [[ et ]] représentent la cible.  Les lettres hors 
de la cible quand il y en a doivent correspondre aussi, mais elles ne 
font pas partie de la substitution. Les lettres majuscules représentent 
des ensembles (voyelles, consonnes, séparateurs de mots, etc) et la 
substitution phonétique se trouve à la droite de la flèche "->"..  Le # 
et tout ce qui suit est ignoré par le système et est utilisé pour 
dénoter des exemples.  Voilà en gros le coeur de Cicero.  C'est à mon 
avis cette simplicité qui rend le tout si attrayant.

> Donnant donnant, moi si je me décide un jour à programmer un module 
> d'intonation de franfest j'irai faire mon petit état de l'art et si 
> Nicolas Pitre a été malin et a implémenté des algorithmes raisonnables 
> dans cicero je pomperai sans même le début d'un scrupule quitte à 
> mettre une note en disant que je lui ai pompé les algos d'intonations.

En fait, l'intonation de Cicero est encore une fois plus que simple: un 
pattern est appliqué à chaque mot en fonction du nombre de phonèmes 
correspondant à des voyelles (approximation du nombre de syllabes), 
ainsi qu'à la ponctuation suivant ce mot (un espace étant une 
ponctuation neutre).  C'est tout.  Les bons observateurs ont peut-être 
remarqué déjà que Cicero reproduit en fait la même prosodie que la 
vénérable Télévox. Et ça fait toute la différence entre une synthèse qui 
sonne comme un cadavre et une synthèse plus agréable à écouter.

Voici encore quelques exemples de règles de prosodie, soit celles qui 
s'appliquent aux mots suivi d'une virgule et d'un point:

PROSO_SPEED , -20, 10
PROSO_PITCH , [1] {"100 135"}
PROSO_PITCH , [2] {"100 115", "100 135"}
PROSO_PITCH , [3] {"0 110", "100 115", "100 135"}
PROSO_PITCH , [4] {"0 120", "100 110", "100 130", "100 135"}

PROSO_SPEED . -30, 10
PROSO_PITCH . [1] {"100 70"}
PROSO_PITCH . [2] {"100 110", "100 70"}
PROSO_PITCH . [3] {"0 120", "100 100", "100 70"}
PROSO_PITCH . [4] {"0 110", "100 120", "100 100", "100 70"}

ou encore celles ayant trait au point d'exclammation qui sont les plus 
élaborées de toutes:

PROSO_SPEED ! -200, 10
PROSO_PITCH ! [1] {"0 110 30 180 100 110"}
PROSO_PITCH ! [2] {"100 130", "20 180 100 110"}
PROSO_PITCH ! [3] {"100 120", "100 130", "20 180 100 110"}
PROSO_PITCH ! [4] {"0 120", "100 110", "100 130", "30 180 100 110"}

Et ainsi de suite pour toutes les ponctuations.  Si quelqu'un préfère 
une voix plus ennuyeuse, suffit de changer le deuxième nombre de chaque 
tuples.

> De toute façon ne nous voilons pas la face sur ce sujet si ont veut 
> quelque chose de vraiement clean il faut jeter un coup d'oeil aux 
> traités de linguistiqu ad hoc, et implémenter des méthodes et des 
> règles connues depuis la nuit des temps.

En effet, et celà représente une complexité de traitement titanesque 
puisqu'une simple substitution de groupes de lettres par des phonèmes à 
la Cicero ne suffit plus.  Et le résultat ne sera pas 20 fois meilleur 
malgré que l'investissement de travail requis soit au moins 20 fois 
celui de l'algo décrit ci-haut.  Encore une fois, Cicero est une merde 
mais qui produit des résultats étonnants et plus qu'acceptables.  C'est 
une question de rentabilité.

> Pour conclure, Aldo, ma conviction profonde est que
> l'environnement de développement de franfest par sa modularité,
> sa souplesse, et par le fait qu'il est partagé par une vaste
> communauté offfre des possibilités de développement plu vastes

Là je ne suis pas tout à fait d'accord.  Oh c'est vrai que Festival a le 
potentiel pour pouvoir générer une meilleure prononciation que ce que 
Cicero ne pourra jamais produire.  Mais Cicero est déjà plus 
qu'acceptable à mon avis, et écrire des moteurs de synthèse n'est pas 
mon passe-temps premier.  Encore une fois c'est une question de 
rentabilité.

Parcontre, il y a un point sur lequel je ne peux et n'accepterai jamais 
aucun compromis: le temps de réponse.  Lorsque je veux que la synthèse 
se ferme la gueule, celà doit se produire dans le miliseconde suivant ma 
commande.  Lorsque je veux que la synthèse démarre, celà doit paraître 
instantané.  Si je mitraille la flèche bas du clavier, je veux que la 
synthèse redémarre sur la nouvelle ligne sans aucun délai.  Et même si 
je peux taper relativement vite, je veux que la synthèse soit capable 
d'énoncer chaque frappe avant que je tape la suivante.  Et lorsque la 
lecture se fait en mode continu, je veux que le terminal braille soit 
constamment synchronisé avec la voix au mot près.  Et Cicero fait tout 
ça car il a été écrit dans ce but.  Et quand il ne le fait pas 
suffisamment bien à mon goût, je n'ai que 1400 lignes de code source à 
considérer pour rémédier au problème.  C'est quelque chose que jamais 
Festival ne pourra m'offrir.

> Bref, la question se situe à plusieurs niveaux vis-à-vis
> desquels ma position est la suivante :
> 
> - s'il s'agit d'écrire une ligne de python pour cicero : ne
>   comptez pas sur moi je ne connais pas ce langage et n'ai pas
>   envie de l'apprendre.

Comme illustré ci-haut, les règles de prononciation de Cicero sont 
indépendantes du language.  En fait, quelqu'un semble avoir 
réimplémenter Cicero en C++ tout en utilisant les mêmes règles.

> - S'il s'agit de partager des algorithmes ou de les améliorer
>   pleinement d'accord; 

Tout à fait.


Nicolas



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/