Obligement - L'Amiga au maximum

Mardi 21 novembre 2017 - 07:23  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Dossier : La synthèse vocale (1ère partie)
(Article écrit par Nicolas Fournel et extrait d'A-News (Amiga News) - août 1989)


Youpi, c'est le bicentenaire ! Les listes Copper bleu-blanc-rouge fleurissent un peu partout sur les écrans, mais vos Amiga sont-ils capables de refaire le serment du jeu de Paume ? Non ? Halte là citoyen, nous allons y remédier séance tenante.

Après quelques généralités indispensables à votre culture générale, nous leur apprendrons la langue de Molière (et de Robespierre), ce qui devrait constituer un bon exemple des explications du mois dernier sur le DMA-son.

La vérité, toute la vérité, rien que la vérité...

Voyons tout d'abord comment est créée en réalité la voix humaine. Par opposition à la synthèse additive, où une forme d'onde complexe est créée en additionnant plusieurs ondes sinusoïdales simples, la voix humaine est dite à synthèse soustractive c'est-à-dire que c'est le processus inverse qui se produit.

On part d'un son complexe que l'on va travailler un peu à la manière d'un sculpteur, gardant certaines fréquences, en éliminant d'autres, faisant progressivement d'un ensemble chaotique une note claire, comme l'artiste transforme la pierre brute en oeuvre d'art (oh que c'est bien dit, même Pivot, il n'aurait pas fait mieux...). En effet, l'air expulsé des poumons va se charger de fréquences quand il rencontra les cordes vocales en cours de vibration. A mesure que le filet d'air s'acheminera des cordes vocales aux lèvres, certaines de ces fréquences seront renforcées et résonneront pour augmenter de puissance alors que d'autres seront affaiblies au point de devenir complètement inaudibles lorsqu'elles atteindront les lèvres.

La position de la langue, le mouvement des mâchoires ou encore la forme et l'ouverture des lèvres sont autant dc paramètres qui seront pris en compte. La fréquence dépend quant à elle de la vitesse avec laquelle la glotte s'ouvre et se ferme. Elle est en moyenne de 120 cycles par seconde pour un homme et de 250 pour un femme. Pour ceux qui ne verraient pas le rapport avec le schmilblick, on y vient tout de suite...

Nous zafons les moyens de fous faire parler...

En effet, maintenant que nous avons décrit avec moult détails la façon dont dame nature nous fait parler, il ne nous reste plus qu'à repiquer allègrement le principe (mais c'est de l'espionnage divino-industriel ça !) pour l'adapter à l'ordinateur. Pour opérer sa synthèse, l'ordinateur engendrera une suite de nombres représentant un signal complexe sous forme d'impulsions. A l'image du son produit par les cordes vocales, le signal devra être chargé de fréquences variables. Pour cela, on utilisera un signal complexe comprenant d'innombrables ondes sinusoïdales reliées harmoniquement (pour les voyelles) et éventuellement combiné à un second, assimilable au bruit blanc (pour les consonnes).

Ce signal passera ensuite à travers un "filtre mathématique" basé sur l'analyse de la voix humaine connue sous le nom "d'extrapolation linéaire" qui permettra de déterminer la combinaison de fréquences qui permettra d'obtenir le timbre voulu. Ainsi, il est par exemple possible de synthétiser une voix soprano en programmant le filtre mathématique de telle façon qu'il accentue les fréquences de 3000 cycles par seconde qui sont caractéristisques de cette voix.

Zabotage !

Bien sûr, cette méthode est la bonne, mais il est impensable de l'utiliser telle quelle en temps réel en raison du nombre faramineux d'opérations que doit réaliser le filtre mathématique en question. On va donc avoir recours à des formes d'ondes déjà prêtes. On pourrait les calculer au préalable mais ce serait se donner bien du mal alors qu'il nous suffit d'utiliser cette drôle de petite boîte d'allumettes percée de deux trous et pourvue d'un petit bouton, qui se branche derrière tout Amiga digne de ce nom et que les gens bien éduqués nomment encore "numériseur".

En effet, dans la grande majorité des cas, les systèmes à synthèse vocale reposent sur ce principe, qui a le mérite d'être simple. Étant donné qu'en ce qui nous concerne nous désirons faire dire n'importe quoi à notre Amiga, il est hors de question de numériser d'avance des phrases ou même des mots pour des raisons évidentes de manque de mémoire. C'est d'ailleurs pourquoi je vous recommande l'utilisation des disquettes Fish du domaine public (ben oui quoi, dans le poisson il y a beaucoup du phosphore, et le phosphore, c'est bon pour la mémoire, non ?).

Trêve de plaisanterie, je vous entends déjà râler : vous ne les connaissez pas et en plus vous vous voyez mal passer votre mois d'août à faire des "Chhhlmmnn", "Pssszzk" et des "taaaghhh" pour finir à l'hôpital psychiatrique le plus proche, mais don't panic, je vais vous aider et en plus ce système a un avantage considérable, à savoir qu'il suffit de changer le fichier de phonèmes pour passer d'une langue à une autre.

Argot

Ainsi votre Amiga pourra parler du serbo-croate des hauts plateaux à l'argot pakistanais en passant par le zoulou de Nouvelle-Guinée. Ne serait-ce pas sympathique si nous pouvions collecter une véritable petite banque de données des différentes langues et des accents régionaux ? "Ça c'est ben vl'ai mère Denis".

Bon, en tout cas tous ces fichiers m'intéressent alors n'hésitez pas à me contacter ? Au fait, c'est de cette façon que sont réalisées aussi les synthèses vocales dans les jeux (Manoir De Mortevielle, Explora 2...). Comme nous ne sommes pas des rustres, je vous dirai même comment améliorer quelque peu le principe.

Mais pour l'instant voyons comment constituer ce fameux fichier. Pour cela, vous allez devoir numériser les 35 phonèmes de la langue française (pensez à faire des échantillons de longueur paire), et les sauvegarder sans entête IFF (utilisez par exemple le format "brut" ou "dump" de Perfect Sound) sous le nom phonème suivi de leur numéro.

Tirez la langue et dites Aaaaahhhh...

Pour savoir quel phonème correspond à quel numéro et la façon de le prononcer, reportez-vous au tableau. Pour ce qui est des phonèmes des autres langues, ils sont généralement indiqués au début de tout bon dictionnaire.

synthèse vocale

Une fois tout ce petit monde présent sur une même disquette, il ne vous restera plus qu'à utiliser le petit programme phone.link écrit en AmigaBasic pour les réunir en un seul fichier phonèmes. Dans le programme, le texte à prononcer sera écrit en phonétique. Chaque phonème correspond un code de un ou deux caractères présent(s) dans la colonne code du tableau. Le code utilisé n'est pas le code phonétique standard car celui-ci contient des caractères inaccessibles sur nos claviers.

synthèse vocale

J'ai essayé de prendre des codes assez proches de leur écriture la plus courante en français, ce qui fait que certains mots s'écriront même directement, par exemple "la vOIture". Malgré les apparences, ce système n'est pas trop coûteux en mémoire : la voix humaine, contrairement à certains instruments, ne nécessite qu'une faible vitesse d'échantillonnage (à ce propos, tous les phonèmes devront être numérisés à la même fréquence) et les programmeurs pourront utiliser la compression par deltas de Fibbonacci afin de réduire de moitié la taille du fichier. N'oubliez pas non plus que même lorsque vous désirez faire parler l'Amiga à l'aide du synthétiseur vocal intégré, il vous obligatoirement passer par le narrator.device qui fait déjà 23 ko. Pour vous donner un ordre de grandeur, mon fichier fait 38 ko (après compression Fibbonacci) avec une vitesse d'échantillonnage de 9 kHz (ce qui est déjà plus élevé que dans certains circuits spécialisés disponibles dans le commerce).

Kolossales finesses...

Voyons en guise de conclusion quelques mini-astuces qui vous permettront d'aller plus loin dans le monde enchanté de la synthèse vocale et d'améliorer le programme de base (BASIC set, mais en assembleur bien sûr) que je vais livrer en pâture à vos doigts fébriles et ce, pas plus tard que le mois prochain.

En fait, lorsque nous parlons, il y a entre deux phonèmes ce que j'appelerai une transition interphonèmes : ce n'est ni tout à fait le phonème que l'on vient de prononcer, ni tout à fait le suivant mais une combinaison des deux qui passe progressivement de l'un à l'autre (pardon ?). En reproduisant simplement des phonèmes les uns derrière les autres, on va perdre cette zone d'où une prononciation forcément un peu hachée, ce que certains appellent un accent alsacien (c'est le cas par exemple dans le Manoir De Mortevielle).

Pour pallier cet inconvénient, on introduit la notion de diphonème (un diphonème = deux phonèmes) qui est la concaténation de deux phonèmes. Il y a donc en français 35 soit 1225 diphonèmes plus les 35 diphonèmes ne contenant qu'un phonème, ce qui représente un travail considérable de numérisation mais qui n'empêche pas cette méthode d'être très couramment utilisée dans l'industrie. Donnons un exemple : pour dire "Paris", au lieu d'utiliser les phonèmes "P"+"A"+"R"+"I", on utilisera les diphonèmes "P"+"PA"+"AR"+"RI"+"I".

Cette méthode restant inadaptée à l'utilisateur moyen de l'Amiga qui ne voit en la synthèse vocale qu'un gadget amusant, avouons-le (si si...), je vous propose une autre méthode que je suis en train mettre au point dans mon laboratoire secret enfouit 100 pieds sous terre et qui donne de bons résultats pour l'instant. Elle est basée sur la possibilité que l'on a d'additionner des échantillons numériques comme on le ferait avec des signaux analogiques.

Le principe, qui implique un calcul en temps réel (réalisable...) est le suivant : pendant que l'on reproduit le phonème "i", on calcule une transition interphonèmes qui sera substituée à la fin du phonème "i" et au début du phonème "i+1", comme sur le schéma.

synthèse vocale

Cette zone, [ moyenne ], est en fait constituée de moyennes pondérées dont les coefficients reflètent l'importance d'un phonème par rapport à l'autre en une partie de la zone de transition. On peut aussi bien appliquer aux coefficients une évolution linéaire qu'une évolution sinusoïdale d'une demi-période, les deux donnent de bons résultats. Mais prenons un exemple. Supposons que l'on veuille diviser la transition interphonèmes en "m" zones en appliquant aux coefficients une évolution linéaire. Alors, l'échantillon résultant "s" de la zone "n" aurait pour valeur : ((m+1-n)*(phonèmei(s))+n*(phonemei+1(s))-)/m+1 avec phonèmei(s) = échantillon dans le phonème "i" correspondant à l'échantillon "s" dans la transition interphonèmes.

D'autre part, pour améliorer ce kit de base de la synthèse vocale que je vous propose (encore une expression d'enfer çà...), pensez qu'il vous est possible d'introduire d'autres codes ne correspondant pas à des phonèmes mais à des fonctions de contrôle de la voix, par exemple les chiffres 0...9 et les signes de ponctuation ,.?! pour le contrôle de l'intonation.

Tremblotante

De même, vous pourrez obtenir la voix tremblotante d'un vieillard en utilisant les caractéristiques de modulation d'un canal par un autre, dont nous reparlerons sous peu, ou tout simplement une voix de femme à partir d'une voix d'homme en modifiant la fréquence lors de la reproduction (du son bien sûr !).

Les échos et autres effets sont aussi réalisables mais assez difficilement sur une synthèse vocale par phonèmes car ils nécessitent de nombreux calculs en temps réel (car les phonèmes se suivent et ne se ressemblent pas...). Toutefois, sur une phrase toute prête aucun obstacle ne viendra s'opposer à votre imagination débridée.

Enfin, pour finir, je ne peux pas résister à la tentation de vous livrer quelques mini-astuces express dont je vous laisse seuls juges de l'intérêt :
  • Pour les Amiga Suisses, échantillonnez normalement les phonèmes mais baissez légèrement la fréquence à la reproduction pour ralentir la voix...
  • Pour les Belges, échantillonnez un 36e phonème : n°36, code 1*, exemple : "ça c'est sûr, une fois".
  • Pour l'Afrique francophone, le phonème "r" étant identique au phonème "l", on peut le remplacer avantageusement par un échantillon du style "là dis donc".
Listing en assembleur

Voici le listing en assembleur de la synthèse vocale, sous forme d'une petite commande CLI. La commande à entrer est "dire nom_de_fichier".

synthèse vocale
synthèse vocale
synthèse vocale
synthèse vocale
synthèse vocale


[Retour en haut] / [Retour aux articles] [Article suivant]