Synthèse vocale

1. Avant-propos

Pour rédiger le présent historique sur la synthèse vocale, je me suis basé, dans la mesure du possible, sur des sources originales des récits et descriptions édités. La digitalisation des bibliothèques nationales et des archives dans les universités, centres de recherche et entreprises privées a permis à ces institutions d’offrir des accès en ligne à leurs précieux documents et anciennes collections. Je peux confirmer que de nombreux auteurs de contributions scientifiques et historiques sur Internet copient l’un de l’autre, sans se soucier de l’exactitude et de la véracité du contenu. Même le statut de Wikipedia comme première référence des connaissances sur le web est souvent contesté. Suite à mes propres expériences je peux toutefois certifier que les articles de Wikipédia qui contiennent de nombreuses références bibliographiques académiques sont en général de qualité élevée.

L’accès généralisé à des anciens documents montre que dans le passé où il n’y avait pas encore Internet ni téléphone et où la mobilité était restreinte, les scientifiques de renom avaient déjà des contacts réguliers entre eux et se consultaient l’un l’autre. La vue globale qu’on obtient grâce aux bibliothèques numériques fait apparaître que dans certains cas le mérite d’une invention ne revient pas nécessairement au plus brillant qui avait l’idée initiale,  mais au plus raffiné qui était le premier à déposer un brevet ou à faire une publication afférente. Dans ces cas il faudrait réécrire l’histoire des sciences.

Aujourd’hui il est de plus en plus difficile d’identifier un inventeur individuel. Dans la majorité des cas ce sont des équipes multidisciplinaires qui font avancer la recherche dans tous les domaines.

2. Introduction

Aujourd’hui la synthèse vocale constitue une technique informatique de synthèse sonore qui permet de créer de la parole artificielle à partir de textes. Grâce à l’intelligence artificielle et l’apprentissage approfondi (deep learning), on peut créer des synthétiseurs vocaux qui transforment le texte orthographique directement en sons numérisés, sans se soucier de la phonologie.

Dans le passé la synthèse vocale informatique se basait largement sur des techniques de traitement linguistique pour transformer le texte orthographique en une version phonétique. Les phonèmes traduits sont ensuite convertis en sons moyennant des techniques de traitement du signal.

Mais avant de devenir une science informatique, la synthèse vocale se basait sur des constructions mécaniques, ensuite sur des circuits électriques. Je me suis très tôt intéressé à ces techniques. En 1976, je supervisait un travail de diplôme à l’Institut d’électronique de l’EPFZ qui consistait à réaliser un circuit de synthèse vocale avec des filtres électroniques réglés. A la fin, le synthétiseur était capable de prononcer la phrase “Ich bin ein Computer”.

Mon bureau-laboratoire à l’Institut d’Electronique de l’Ecole Polytechnique Fédérale à Zurich en 1976

En 1978, j’ai joint l’Administration des P&T comme ingénieur de télécommunications. Pour le rapport de gestion de 1978, les ingénieurs avaient rédigé un premier volet, appelé Les Nouveaux Services de Télécommunications. C’était la toute première tentative d’expliquer au grand public à quoi il pouvait s’attendre jusqu’à l’an 2000 en matière de création de prestations et de facilités additionnelles dans le domaine des télécommunications. La table des matières de ce volet, présentée ci-après, montre que la synthèse et la reconnaissance de la parole faisaient partie du chapitre 4.1.1.

Rapport de gestion des PT 1978 : Table des matières de la première partie -> Les nouveaux services de télécommunications

La synthèse vocale fait partie de la communication sonore, le moyen le plus efficace et le plus répandu de communication des êtres vivants. Dans sa forme la plus évoluée, elle permet aux humains la mise en place d’un langage construit, grâce à la richesse des phonèmes (éléments sonores distinctif du langage) produits.

3. Automates (têtes) parlants

Dans l’antiquité la parole était d’origine divine. Les colosses de Memnon en Egypte avaient la renommée d’être des têtes parlantes à cause du chant qu’émettait l’un d’eux au lever du soleil. Aujourd’hui on sait que ces sons étaient produits sous l’effet d’un brusque changement de température et d’hygrométrie qui faisait éclater la surface de la pierre. Une légende dit que des prêtres se cachaient à l’intérieur des statues.

Dans les récits du moyen âge on fait parfois référence à des têtes en métal (bronze, laiton) qui étaient capables d’émettre des sons ou qui pouvaient même parler comme des humains. Ainsi il est rapporté que Gerbert d’Aurillac, qui exercait comme pape Sylvestre II de 999 à 1003, disposait d’une tête en bronze qui répondait par “oui” ou “non” à une question qu’on lui posait. Une autre tête parlante (en laiton) est attribuée à Roger Bacon, un moine et savant anglais qui vivait de 1214 à 1294. On cite également les noms de Robert Grosseteste (1175 – 1253) et de Albertus Magnus (Albert le Grand : 1193 – 1280).

Thomas d’Aquin casse la tête parlante construite par son maître Albert le Grand (Cyclopædic science simplified, John Henry Pepper, Google Books)

L’illustration ci-dessus est extraite de l’encyclopédie scientifique simplifée éditée par John Henry Pepper en 1869. L’encyclopédie, qui publie plus que 600 illustrations, montre également une image de la fille parlante invisible.

Fille parlante invisible, (Cyclopædic science simplified, John Henry Pepper, Google Books)

Il faut penser qu’il s’agissait dans tous les cas des têtes parlantes du moyen âge de tricheries, soit moyennant des tubes vocaux comme représenté sur l’image ci-dessus, soit par la maîtrise de la ventriloquerie.

Un cas particulier plus récent d’un vrai mécanisme vocal constitue l’automate à deux têtes parlantes de l’abbé Mical. Né à côté de Lyon en 1727, il a construit, après ses études et son ordination, plusieurs automates musicaux et une tête parlante en bronze. Il semble qu’il ait détruit ces premières constructions parce-qu’il n’était pas satisfait des résultats. En 1783, il a présenté son innovation de deux têtes parlantes qui pouvaient dialoguer entre eux.

prospectus de l’exposition : Wikipedia

La première tête prononçait la phrase “Le Roi a donné la paix à l’Europe“, la deuxième tête répondait “La paix fait le bonheur des peuples“.

Dans les procès-verbaux de l’Académie Royale des Sciences du 2 juillet 1783 il est noté que, suite à une demande de l’abbé Mical d’examiner ses têtes parlantes, MM. Le Roy, de Lalande, de Milly, Laplace, Lavoisier, Ferrein et Vicq-d’Azier ont été nommés commissaires pour procéder à cette tâche.

Extrait du procès-verbal de la séance du 2 juillet 1783 de l’Académie Royale des Sciences (Bibliothèque Nationale de France)

Quelques-uns étaient franc-maçons appartenant au même Loge des Neufs Soeurs que Mical lui-même.

Les commissaires ont rendu compte de leur expertise dans la séance du 3 septembre 1783 de l’Académie Royale des Sciences.

Première page du procès-verbal de la séance du 3 septembre 1783 de l’Académie Royale des Sciences (Bibliothèque Nationale de France)

 

Compte rendu des commissaires de l’Académie Royale des Sciences en charge de l’examen des têtes parlantes de l’abbé Mical (Bibliothèque Nationale de France)

Dans ce rapport (voir mon texte converti), dont l’original est disponible en ligne à la Bibliothèque Nationale de France, les commissaires disent d’emblée que les phrases ne sont pas prononcées distinctement dans toutes leurs parties, que la réunion des syllabes ne se fait pas avec toute la précision possible et que plusieurs consonnes ont besoin d’être perfectionnés. Ils concluent que malgrés ces défauts, le mécanisme de la machine leur a paru intéressant.

Le procès-verbal décrit la composition de la machine parlante. Une chambre à vent avec un soufflet, un cylindre qui actionne des leviers, un ensemble de différentes boîtes avec des conduits sonores, cavités et soupapes, des structures semblables à celles qu’on observe dans les orgues, des diaphragmes formées d’une peau très fine, des languettes vibrantes et des plaquettes de métal qui se déplacent.

Le premier quotidien français, le Journal de Paris, a rapporté plusieurs fois sur le projet de l’abbé Mical sous les rubriques “Arts” ou “Mécanique”.  Le 1er mai 1778 le journal s’empressait à annoncer au Public un spectacle étonnant d’une tête en airain qui parle. Il était précisé que la modestie de l’auteur de l’ouvrage cache son nom. Le 6 juillet 1783 le journal rapportait que M. l’abbé M*** avait demandé à l’Académie Royale des Sciences de désigner des commissaires pour examiner son chef-d’oeuvre. Le 17 juillet 1783 une lettre anonyme, adressée aux auteurs du journal, était publiée au sujet des têtes parlantes. Le contenu et le style de cette lettre font penser que l’auteur était Antoine de Rivarol, un essayiste et pamphlétaire royaliste français. Il écrivait la même année sa lettre à M. le Président de ***  Sur le Globe aérostatique, sur les Têtes parlantes, et sur l’état présent de l’opinion publique à Paris (pages 207 – 246). Le 1er avril 1784, le journal annonçait la présentation prochaine des têtes parlantes dans le cabinet de l’auteur, situé dans la rue de Marivaux, toujours sans mentionner  son nom. Ce n’est que le 11 avril 1784 que le nom Mical est communiqué dans le journal de Paris qui signale qu’à partir du lendemain le public pourra visiter, au prix de 3 liv., les têtes parlantes lors de deux séances par jour (à midi et à 5 heures). Le 22 mai 1784 (page 625) une contribution signée Le Comte de *** au sujet des réactions du public lors des présentations des têtes parlantes a été publiée dans le journal (voir première page ci-après).

Journal de Paris No 143 – 22 mai 1784 (Bibliothèque Nationale de France)

On ne connaît pas grand-chose sur la biographie de l’abbé Mical, même pas son prénom. Une source non vérifiée rapporte qu’il avait abandonné sa carrière à la Cathédrale de St. Maurice à Vienne pour aller à Paris, qu’il était poursuivi en justice à cause de ses dettes (notamment par le sculpteur qui avait fabriqué les têtes) et que, accablé par des problèmes, il est arrivé à l’échec final de son projet vers 1787, deux ans avant le début de la révolution française.

Si on compare la construction de l’abbé Mical à celles des savants Gottlieb Kratzenstein (voir 6.1.2) qui ont réalisé des machines mécaniques de synthèse vocale à la même période (1780), il faut se demander pourquoi la technologie plus avancée du premier est restée une curiosité jusqu’à nos jours, tandis que les constructions des deux autres sont considérées comme des innovations qui ont contribué à faire avancer la science.

Une des raisons est certes la mauvaise réputation des têtes parlantes à l’époque qu’on associait d’emblée à des tricheries. Une autre raison est peut-être la personnalité modeste de l’abbé Mical et sa façon de présenter son innovation. Mais je pense que la raison principal de l’échec de l’abbé Mical est le fait qu’il était au mauvais endroit à la mauvaise date.

4. Appareil phonatoire humain

Le schéma ci-dessous présente la structure générale du système vocal humain :

Les poumons servent de soufflerie et font vibrer les cordes vocales. Cette vibration entraîne la création d’une onde sonore. Celle-ci va résonner dans un ensemble de cavités souples (pharyngienne et buccale). Les différents phonèmes sont produits en modifiant la géométrie des cavités,

On distingue les sons voisés (voyelles) et les sons non voisés (consonnes). La source des voyelles est la vibration périodique des cordes vocales en réponse au flux d’air dans les poumons. La source sonore des consonnes est une vibration apériodique causées par des flux turbulents dus à une constriction dans le conduit vocal. Dans les deux cas les phonèmes sont modulés par le même filtre, composé par les cavités pharyngiennes et buccales.

Les voyelles sont les composantes essentielles de l’intelligibilité du langage. Les différentes voyelles sont caractérisés par les fréquences des trois premiers formants qui se réfèrent à des pics dans le spectre harmonique du son.

L’ouverture de la mâchoire, qui resserre la cavité buccale du côté de la glotte et la dilate du côté des lèvres, est le facteur décisif de réglage du premier formant. Le second formant correspond à la forme du corps de la langue. Le troisième formant, plus sensible, se détermine soit par la position de la pointe de la langue, soit par l’intervention de la cavité nasale.

L’esquisse qui suit montre un schéma très simplifié pour la simulation de l’appareil vocal humain. Un générateur d’impulsions produit des impulsions périodiques  pour créer des voyelles, un générateur de bruit produit les signaux pour créer des consonnes. Les impulsions et les signaux sont amplifiés et formés par un filtre.

schéma simplifié pour simuler l’appareil vocal human

Les sons de la parole qui sont les plus faciles à produire sont les consonnes bilabiales comme m, p et b et la voyelle ouverte a. Les premiers sons babillés par les bébés sont ma-ma, pa-pa respectivement ba-ba. Comme les parents tendent à associer les premiers mots de leurs enfants à eux-mêmes, les termes mama et papa ou baba désignent la mère, respectivement le père, dans presque toutes les langues du monde entier. On parle de cognats.

5. La voix humaine de l’orgue

On peut faire un parallèle entre la production de la parole et la pratique d’un instrument de musique à vent. Dans un tel instrument le son est produit grâce aux vibrations d’une colonne d’air provoquées par le souffle d’un instrumentiste (flûte, trompette… ), d’une soufflerie mécanique (orgue, accordéon) ou d’une poche d’air (cornemuse). La comparaison la plus pertinente peut se faire avec l’orgue. C’est un instrument qui produit les sons à l’aide d’ensembles de tuyaux sonores, accordés suivant une gamme définie et alimentés par une soufflerie. L’orgue se joue avec une console qui peut comporter jusqu’à sept claviers et avec un pédalier. Moyennant des registres qui actionnent un mécanisme propre à l’orgue on peut appeler un jeu qui change son timbre. Le nombre de registres peut varier de 1 à 400. Les tuyaux sonores se répartissent en deux grandes catégories: les jeux à bouche et les jeux d’anche. L’anche est une languette métallique qui vibre à la base du tuyau et dont les caractéristiques physiques conditionnent le son émis. Une grande orgue comprend des centaines de tuyaux allant de 10,4 mètres de haut jusqu’au plus petit de 1 cm. Les tuyaux sont groupés par famille en fonction des jeux sélectionnés.

La figure ci-après montre le schéma d’un tuyau d’orgue à anche :

image de Wikipedia

Une soufflerie envoie un flux d’air sur une anche, placé au bas du tube. Sous l’action du flux d’air, l’anche (vibreur) est mise en vibration et génère ainsi une onde périodique qui se propage alors dans le tube (résonateur) générant un son. La fréquence du son dépend du diamètre et de la longueur du tuyau.

Avec les poumons comme soufflerie, les cordes vocales comme vibreur et les cavités buccale et pharyngienne déformables, l’appareil de production de la parole fonctionne donc selon un schéma proche de l’orgue.

Il y a un jeu d’orgue particulier appelé “vox humana” qui évoquait l’impression d’une chorale ou d’un soliste humain au Moyen Age. Nous allons voir que cette voix humaine de l’orgue a joué un certain rôle dans la réalisation des premiers appareils de synthése vocale mécanique.

6. Histoire de la synthèse vocale

Nous avons lu dans l’introduction que la synthèse vocale est aujourd’hui une science informatique, mais qu’elle était précédée par des techniques mécaniques, électriques et électroniques. Jusqu’à la fin du 19ième siècle la synthèse vocale était basée uniquement sur des constructions mécaniques.

Suite à l’introduction du téléphone en 1876, les synthétiseurs vocaux ont évolué vers des équipements électromécaniques, pour devenir purement électriques dès la fin des années 1930, et des équipements électroniques 40 années plus tard. Pour manipuler les synthétiseurs mécaniques et électriques il fallait être un expert qui maîtrisait la génération de sons. Les synthétiseurs vocaux électroniques et informatiques disposaient d’une interface permettant d’entrer du texte et de le convertir en parole. On commençait à parler de synthèse de la parole et de TTS (Text to Speech). L’utilisation de ces équipements était à la portée de tout le monde, tandis que les développeurs de ces machines devaient avoir des connaissances approfondies en linguistique, phonologie, phonétique et sémantique.

A partir des années 1980 les scientifiques qui faisaient des recherches dans le domaine de la synthèse vocale, respectivement de la synthèse de la parole, se sont focalisés uniquement sur l’informatique. Depuis quelques années c’est l’intelligence artificielle qui domine le domaine. L’apprentissage approfondi permet aux ordinateurs d’apprendre à parler de la même manière que les petits enfants, sans se soucier de grammaire, d’ortographe ou de syntaxe.

Le revers de la médaille est qu’il faut des centaines, voire des milliers d’heures d’enregistrements audio, avec le texte annoté, pour faire de l’apprentissage approfondi, ce qui pose un problème pour les langues rares comme le luxembourgeois. A l’heure actuelle il faut donc se contenter de synthétiseurs de la parole luxembourgeoise qui utilisent les méthodes informatiques classiques, basées sur des phonèmes, règles et dictionnaires.

6.1. Synthétiseurs vocaux mécaniques

La thèse de doctorat rédigée en 2015 par Fabian Brackhane à l’université de la Sarre avec le titre Kann was natürlicher, als Vox humana, klingen ? Ein Beitrag zur Geschichte der mechanischen Sprachsynthese constitue une source exceptionnelle et précieuse sur les travaux de synthèse vocale réalisés après la fin du Moyen Age.

6.1.1. Christian Gottlieb Kratzenstein (1723 – 1795)

La première machine de synthèse vocale mécanique connue à ce jour a été construite par le scientifique allemand Christian Gottlieb Kratzenstein. Né le 30 janvier 1723 à Wernigerode, il obtenait à l’âge de 23 ans des doctorats en médecine et physique à l’université de Halle pour ses thèses Theoria fluxus diabetici et Theoria electricitatis mores geometrica explicata concernant la nature de l’électricité. Deux ans plus tard, il a été appelé à l’Académie des Sciences à Saint-Pétersbourg. En 1753, il est engagé comme professeur de physique expérimentale à l’université de Copenhague où il fût nommé recteur quatre fois de suite.

Gottlieb Kratzenstein était un proche (certains disent un protégé) du mathématicien renommé suisse Leonhard Euler qui exercait également à l’Académie des Sciences à Saint-Pétersbourg. Dans sa correspondance (conservée aux archives de l’université de Bâle) avec le mathématicien Johann Heinrich Lambert, Leonhard Euler exprimait dès 1758 ses réflexions sur la nature des voyelles a, e, i, o, u et proposait la construction d’une machine parlante pour mieux comprendre l’organisme du langage humain. Sur initiative de Leonhard Euler, l’Académie des Sciences à Saint-Pétersbourg organisait en 1778 une compétition pour réaliser un appareil de synthèse des voyelles de la voix humaine.

Après son départ à Copenhague, Gottlieb Kratzenstein avait gardé de bonnes relations avec ses pairs à l’académie et il était très intéressé à cette compétition. En se  basant sur les études afférentes de Leonhard Euler, il a parfait sa machine parlante construite dès 1973, en utilisant des tubes et des tuyaux organiques pour créer des cordes vocales artificielles. Il s’est surtout inspiré du jeu vox humana de l’orgue.

Tentamen Resolvendi Problema – fig 3 (Bayrische Staatsbibliothek)

En 1780, il a gagné le premier prix de la compétition avec son projet d’une orgue vocale. Une année plus tard il a publié une description en latin du projet : Tentamen Resolvendi Problema. Une version traduite en allemand de cette oeuvre a été publiée en 2016.

Tentamen Resolvendi Problema (Bayrische Staatsbibliothek)

Gottlieb Kratzenstein n’a pas seulement fourni une contribution appréciée pour la synthèse vocale, mais il a également fait avancer la science dans les domaines de la chimie, de la navigation, de l’astronomie, de la neurologie et de l’électricité. En 1743 il avait même rédigé une oeuvre philosophique Beweis, dass die Seele ihren Körper baue. Dans la suite il publiait Abhandlung von dem Nutzen der Electricität in der Arzeneiwissenschaft concernant l’électrothérapie.

Gottlieb Kratzenstein était marié et il avait quatre enfants. Il est décédé en 1795. Un de ses petits-fils est Christian Gottlieb Stub, un peintre danois renommé qui porte les prénoms de son grand-père et qui a ajouté dans la suite également le nom de famille Kratzenstein à son nom. Né en 1783, il est décédé en 1816 à l’âge de 33 ans.

Dans ce contexte il convient de mentionner également l’échange de lettres entre Gottlieb Kratzenstein et l’astronome renommé Johann III Bernouilli après la mort de l’épouse du premier. Susan Splinter a rédigé une contribution Ein Physiker auf Brautschau à ce sujet.

6.1.2. Johann Wolfgang von Kempelen (1734 – 1804)

Si on s’intéresse pour l’histoire de la synthèse vocale on pense d’abord à Johann Wolfgang von Kempelen. Né le 23 janvier 1734 à Presbourg (aujourd’hui Bratislava) et décédé le 26 mars 1804 à Vienne, Wolfgang von Kempelen (Farkas Kempelen en hongrois) était ingénieur et conseiller aulique à la Cour impériale de Vienne. Il est surtout connu sous le nom de Baron von Kempelen pour l’invention du Turc mécanique en 1769, un automate célèbre qui avait l’apparence d’un Turc et actionnait les pièces d’un jeu d’échecs.

Wolfgang von Kempelen a commencé au début des années 1770 à construire une machine parlante, c.à.d. à la même époque où Gottlieb Kratzenstein commencait à s’intéresser pour la synthèse vocale à Copenhague.

Wolfgang von Kempelen fabriquait plusieurs prototypes qui menaient à des échecs. Pour la première version il utilisait un soufflet de cuisine, une anche (roseau) de cornemuse et une cloche de clarinette.

Livre de von Kempelen, page 76 (digitalcommons.ohsu.edu)

Pour la seconde version il utilisait une console d’orgue avec un clavier où les différentes touches étaient associés à des lettres. Les sons étaient produits avec des tubes de différentes formes et longueurs. Le problème était toutefois le chevauchement (co-articulation) des différents sons qui empêchait la génération de syllabes.

Livre de von Kempelen, page 400 (digitalcommons.ohsu.edu)

Wolfgang von Kempelen concluait qu’il fallait mieux comprendre le fonctionnement de l’appareil phonatoire humain pour progresser. Ce n’est qu’au début des années 1780 que son modèle réalisé lui donnait satisfaction et qu’il le présentait au public. Contrairement à la machine de Gottlieb Kratzenstein, la construction de Wolfgang von Kempelen était la première à produire, non seulement certaines voyelles, mais surtout des mots entiers et des courtes phrases.

En 1791 Wolfgang von Kempelen a publié un livre Mechanismus der menschlichen Sprache nebst der Beschreibung seiner sprechenden Maschine pour expliquer aux personnes intéressées les principes de sa machine. Le livre comprenait 456 pages. L’objectif de cet ouvrage n’était pas seulement d’élucider le mystère de l’étonnant appareil, mais aussi d’inciter le lecteur à le perfectionner de sorte qu’on puisse enfin en obtenir ce pour quoi il fut imaginé. On peut considérer la description de Wolfgang von Kempelen comme un premier projet “open-source”.

Livre de von Kempelen, page 400 (digitalcommons.ohsu.edu)

L’auteur formule dans son livre quelques hypothèses essentielles sur la production de la parole humaine. Il proposait une conception de la langue qui n’était plus envisagée comme souffle de l’âme, mais tout simplement comme de l’air s’échappant à travers des fentes de formes variables. En s’observant lui-même, Wolfgang von Kempelen décrivait également les différents sons et les positions que devaient prendre les organes phonateurs pour les produire.

Le musée des sciences et de la technique à Munich (Deutsches Museum), créé en 1903, expose dans un coin du département des instruments de musique une machine parlante désignée comme celle construite par Wolfgang von Kempelen. Elle a été offerte au musée en 1906 par l’Académie de la Musique à Vienne. Suite à ses recherches, Fabian Brackhane conteste qu’il s’agit de l’original de Wolfgang von Kempelen. Il estime plutôt qu’il s’agit d’une réplique construite par Charles Wheatstone (voir 6.1.4).

Deutsches Museum : exposition 8 objets, 8 musées (Leibniz Association)

Il s’agit d’une construction composée d’un caisson en bois, d’un entonnoir en caoutchouc qui faisait office de bouche et d’un second, plus petit, divisé en deux, qui remplissait les fonctions d’un nez. Le mécanisme interne était un soufflet qui simulait les poumons. Le flux d’air était conduit dans la “bouche” par l’intermédiaire d’un couloir très étroit. Une hanche vibrante, sorte de glotte et de cordes vocales réunies, produisait un son. Celui-ci était ensuite modulable par différents petits leviers et l’utilisation des doigts de l’opérateur pour modifier l’air à la sortie de la “bouche” afin de simuler le mouvement des lèvres.

Grâce au livre de Wolfgang von Kempelen, plusieurs chercheurs ont réussi à construire une réplique de sa machine parlante. Un exemple a été créée au département des sciences et technologies du langage à  l’université de la Sarre.

Réplique de la machine parlante de von Kempelen à l’université de la Sarre : Wikipedia

Le lecteur intéressé trouve dans la bibliographie quelques liens vers des vidéos qui montrent la manipulation de la machine parlante du Baron von Kempelen.

L’association allemande Leibniz a organisé du 7 novembre 2016 au 30 juin 2017 une exposition simultanée des musées de recherche Leibniz, intitulée 8 Objekte, 8 Museen. Le musée des sciences et de la technique à Munich y a présenté sa machine parlante de von Kempelen. Cette exposition virtuelle peut encore être visitée sur la plate-forme Arts & Culture de Google qui était partenaire de l’exposition.

Extraits de l’exposition virtuelle 8 Objekte, 8 Museen sur Google Arts & Culture

 

6.1.3. Robert Willis (1800 – 1875)

Né en 1800, Robert Willis était un académicien anglais, renommé comme ingénieur en mécanique et pour ses publications au sujet de l’architecture. Il a été ordonné prêtre en 1827. Le révérend Willis a publié deux contributions très appréciées sur la mécanique de la parole humaine dans le journal Transactions of the Cambridge Philosophical Society : On vowel sounds, and on reed-organ pipes en 1828 et On the Mechanism of the Larynx en 1829.

Transactions of the Cambridge Philosophical Society, 1830, Vol III (digilib)

La contribution de Robert Willis a été traduite en allemand en 1832 dans le journal scientifique Annalen der Physik und Chemie.

Robert Willis a repris les travaux pratiques de Gottlieb Katzenstein et il a testé plusieurs variantes de résonateurs pour parfaire la génération des voyelles.

Transactions of the Cambridge Philosophical Society, 1830, Vol III (Hathi Trust Digital Library)

 

6.1.4. Charles Wheatstone (1802 – 1875)

Né en 1802, Charles Wheatstone est un physicien et inventeur anglais. On lui doit le premier télégraphe électrique au Royaume-Uni, le pont de Wheatstone, le stéréoscope, un microphone, et l’instrument de musique Concertina.

En 1835, Charles Wheatstone présentait une réplique de la machine parlante de Wolfgang von Kempelen. Il profitait des progrès technologiques réalisés dans les dernières décennies pour parfaire la construction. En 1837 il publiait un article au sujet des inventions de Gottlieb Kratzenstein et de Wolfgang von Kempelen ainsi que sur la contribution “On vowel sounds” de Robert Millis, dans le journal The London and Westminster Review.

The London and Westminster review, Vol 28, october 1837 (Hathi Trust Digital Library)

Deux années plus tôt, Charles Wheatstone avait déjà exposé ses études et présenté sa réplique d’une machine parlante  à l’association britannique pour l’avancement des sciences lors de son assemblée à Dublin en août 1935.

Rapport de la réunion à Dublin en 1835 (Google Books, page 302)

En 1930 Richard Paget, un avocat anglais et amateur des sciences, publiait son livre Human Speech. C’est le dernier qui rapportait au sujet de la réplique de la machine parlante réalisé par Charles Wheatstone sur base de la description de Wolfgang von Kempelen. Dans son livre il a publié l’esquisse suivante de l’engin :

Livre Human Speech de Richard Page, 1930, page 18 (archive.org)

Fabian Brackhane a signalé dans sa dissertation Kann was natürlicher, als Vox humana, klingen ? de 2015 que la réplique de Charles Wheatstone se trouve aujourd’hui dans un dépôt du Musée des Sciences à Londres avec l’attribution Wheatstone’s artificial voice box. Il a même réussi à obtenir des photos de la construction qu’il a publié dans sa dissertation (page 87).

Wheatstone’s artificial voice box (Fabian Brackhane)

Une recherche dans la collection des objets du musée avec le mot clé Wheatstone fournit 133 résultats, mais hélas sans mentionner la voice box.

6.1.5. Joseph Faber (1800 – 1850)

Joseph Faber est né aux environs de 1796 à Fribourg-en-Brisgau. Il a fait des études de physique, mathématiques et musique à l’Institut polytechnique impériale et royale à Vienne. Pour se remettre d’une grave maladie, il est retourné à sa ville de naissance en 1820. Pendant sa reconvalescence, il s’est mis à construire pendant 17 ans une machine parlante améliorée sur base du livre de Wolfgang von Kempelen.

Une ancienne gravure, dont on ignore l’auteur et la date de création (éventuellement 1835), montre une jeune dame (probablement l’épouse de Joseph Faber) qui manipule le clavier à 16 touches de la machine parlante. La face de la tête est posée sur la table et on peut voire la bouche de la machine avec des lèvres et une langue.

Gravure ancienne de la machine parlante Euphonia (domaine public)

En 1840, il a présenté son invention, qu’il appellait Euphonia, au public à Vienne et au Roi de Bavière en 1941. L’instituteur Schneider de Bauernwitz décrit en 1841 dans un journal pédagogique (Der katholische Jugendbildner) le fonctionnement de la machine qu’il a pu voir lors de sa visite à Vienne la même année. L’existence de cette machine a été signalée en janvier 1841 dans le même journal.

En 1842 il exposait la machine à Berlin et à Dresde, une année plus tard à Leipzig. Comme il ne rencontrait pas l’intérêt souhaité, il décidait de l’exposer aux Etats-Unis. En 1844 il la présentait à New York, une année plus tard à Philadelphia (Musical Fund Hall), sans succès. Ce fût Phineas Taylor Barnum, l’entrepreneur américain de spectacles (cirque Barnum) qui la rendit célèbre. Il amena Joseph Faber à Londres et  présenta la machine à l’Egyptian Hall à partir de 1846.

Le périodique Illustrated London News du 8 aoùt 1846 (page 16) rapportait sur cette nouvelle attraction exposée à Londres.

La face de la tête a été appliquée et le mécanisme de la machine a été caché par un rideau et un buste de poupée pour faire ressembler la machine à un vrai personnage.

Le journal satirique anglais Punch (The London Charivari) a publié dans son volume 11, 1846, page 83, une contribution Speaking Machine avec un dessin humoristique au sujet de la machine parlante Euphonia de Joseph Faber.

extrait du journal satirique anglais Punch Vol XI 1846 (Google Books)

Le dessin est attribué à l’auteur anglais William Makepeace Thackeray qui se moque des parlementaires Lord George Bentinck et Benjamin Disraeli. Richard Daniel Altick a repris dans son livre The Shows of London, publié en 1978, ces illustrations.

Après Londres, P. T.  Barnum a exposé la machine parlante de Joseph Faber dans son musée américain des curiosités à New York. C’est là que le photographe américan Mathew Brady prenait la photo suivante vers 1860.

En novembre 1870, le périodique The London Journal a publié une nouvelle contribution sur la machine parlante.

extrait du The London Journal, november 1870 (Hathi Trust Digital Library)

L’article précise qu’une Talking Machine du Professeur Faber de Vienne est exposée au Palais Royal, Oxford-Circus, et qu’une visite vaut la peine. Il semble donc que la machine a été retournée des Etas-Unis à Londres. L’affiche suivante qui fait partie de la collection de Ricky Jay date probablement de cette époque.

Poster from the Euphonia exhibition (Collection de Ricky Jay)

En 1873, les affiches, courriers et annonces dans la presse concernant le nouveau cirque itinérant de P. T. Barnum,sous le nom de P. T. Barnum’s Great Traveling World’s Fair, incluaient des images de la machine parlante de Joseph Faber.

Courier for P.T. Barnum’s Great Traveling World’s Fair at Boston, Mass., May 12, 1873 (Connectitute Digital Archive)

P. T. Barnum mettait la machine parlante en évidence avec les attributs wonderful, marvelous, amazing, greatest invention of modern times. P. T. Barnum se vantait même d’avoir payé 20.000 $ pour la présentation exclusive de cette attraction durant 6 mois.

Publicités de Barnum (domaine public)

Sur les publicités de P. T. Barnum pour la machine parlante du Professeur Faber on voit un jeune homme qui manipule le clavier. Il s’agit probablement du mari de la nièce de Joseph Faber. Après le décès de celui-ci le 2 septembre 1866 à Vienne, sa nièce avait hérité la machine parlante et son mari se faisait passer pour le professeur Faber. Le cirque Barnum exposait la machine jusqu’en 1875. Ensuite la nièce, avec la complicité de son mari, continuait à la présenter jusqu’en 1885 à Londres et Paris (Grand-Hôtel en 1877, salle à proximité du théatre Robert-Houdin en 1879) sous le nom de Amazing Talking Machine.

Après 1885, on ne trouve plus trace de la machine.

Malgré tous les efforts, l’Euphonia n’a jamais dépassé le stade d’une curiosité. En réalité l’invention de Joseph Faber était vraiment une version améliorée de la machine parlante de Wolfgang von Kempelen. Un clavier de 16 touches actionnait un mécanisme comprenant une série de six plaques de métal coulissantes qui avaient des ouvertures de formes variées à leurs extrémités. Quand ces plaques étaient soulevées ou rabaissées, elles créaient un courant d’air finement nuancé envoyé par un soufflet. L’air atteignait ensuite une cavité qui imitait l’anatomie humaine du palais avec des joues en caoutchouc, une langue en ivoire et une mâchoire inférieur. Avec cette construction Joseph Faber pouvait produire des voyelles et consonnes dans différentes langues. Il est rapporté que la machine pouvait même chanter “God save the Queen”.

Parmi les visiteurs des présentations de la machine parlante de Joseph Faber figurent des personnalités comme Frédéric Chopin (lettre du 11.10.1846 à ses parents),  Robert W. Patterson, Joseph Henry, Graham Bell et le Duc de Wellington.

Aujourd’hui Joseph Faber est considéré comme un vrai pionnier de la synthèse vocale.

6.1.6. Hermann Ludwig Ferdinand von Helmholtz (1821 – 1894)

Né le 31 août 1821 à Potsdam, Hermann von Helmholtz était un physiologiste et physicien prussien qui a commencé sa carrière comme médecin militaire. Dans la suite il devenait professeur d’anatomie et de physiologie, puis professeur de physique à Berlin en 1871. Il est surtout connu pour ses contributions à l’étude de la thermodynamique, de la thermochimie, de l’optique er de la musique. Son nom reste associé à l’équation de Helmholtz, le théorème de Gibbs-Helmholtz et la loi de Lagrange-Helmholtz. Il est l’auteur du livre Die Lehre von den Tonempfindungen als physiologische Grundlage für die Theorie der Musik, paru en 1863.

Hermann von Helmholtz est moins connu pour sa contribution à la synthèse vocale. Il a synthétisé les voyelles à l’aide de diapasons d’accord, lesquels ont été réglés sur les fréquences de résonance du tractus vocal dans certaines positions de voyelles.

Helmholtz Resonator (Wikipedia)

 

6.1.7. Robert R. Riesz (1903 – )

Né en 1903 à New-York, Robert R. Riesz a été engagé dans les labaratoires Bell Téléphone en 1925, après avoir effectué des études en mathématiques et physique. En 1929 son innovation Artificial Larynx a été breveté au profit de Bell. Il s’agissait d’une prothèse pour des personnes ayant subi une ablation du larynx. Le projet a été décrit en 1930 dans le journal de la société acoustique américaine.

Brevet d’un larynx artificiel introduit par R.R. Riesz en 1929 (Google : Patents)

En 1937 Robert Riesz présentait un modèle réaliste de l’appareil vocal humain. Abstraction faite de quelques projets récents entrepris au Japon dans le domaine de la robotique, le modèle vocal de Robert Riesz est la dernière tentative de construire une machine de synthèse vocale mécanique.

Modèle de la tête parlante de R.R.Riesz (Haskins Laboratories) – SIMULACRUM

Dans la suite Robert Riesz contribuait au développement des premiers projets de synthèse vocale électroniques.

6.2. Histoire : synthétiseurs vocaux électriques et électroniques

Pour tracer l’histoire de la synthèse vocale électrique, il faut retourner dans la seconde moitié du 19ième siècle. Après l’introduction de la télégraphie électrique, l’invention du téléphone en 1876 et du phonographe en 1877 a interrompu l’intérêt pour la synthèse vocale d’un jour à l’autre, et ceci pendant une longue période. Il convient donc de jeter également un regard sur les pionniers de la téléphonie et de la reproduction du son pour comprendre la renaissance de l’intérêt pour la synthèse vocale soixante ans plus tard, à la fin des années 1930.

6.2.1. Joseph Henry (1797 – 1878)

Joseph Henry est un physicien américain qui découvrit l’auto-induction et le principe de l’induction électromagnétique des courants induits, ce qui contribuait à la fabrication du premier télégraphe électromagnétique.

L’invention du télégraphe électromagnétique est attribuée à Samuel Morse qui présentait sa première version opérationnelle le 6 janvier 1838 à Speedwell Ironworks près de Morristown aux Etats-Unis. Toutefois l’idée du télégraphe électromagnétique revient à Joseph Henry qui montrait dès 1831 aux étudiants du collège à Albany, où il enseignait, un concept d’un télégraphe qui fonctionnait avec un aimant électrique.

Esquisse du modèle d’un télégraphe de Joseph Henry (Smithsonian annual report for 1857, p. 105)

En décembre 1845, juste avant l’exposition publique de la machine parlante de Euphonia au Musical Fund Hall à Philadelphia, Joseph Henry avait visité Joseph Faber en privé, accompagné de son ami Robert M. Patterson. Joseph Henry était impressionné par l’ingéniosité de la machine et il envisageait de transmettre des mots via le télégraphe en actionnant les touches par des électro-aimants. Avec une petite astuce, des mots générés moyennant le clavier à une extrémité du télégraphe pourraient être reproduits à l’autre extrémité.

Alors qu’il avait les compétences requises, Joseph Henry n’avait jamais mis en pratique cette idée. Trente ans plus tard, en février 1875, le jeune Alexandre Graham Bell, qui avait l’idée du téléphone en tête, venait demander conseil à Joseph Henry, qui à l’époque approchait ses 80 ans. Devenu en 1846  le premier secrétaire de la Smithsonian Institution, une institution américaine de recherche et d’éducation scientifique, Joseph Henry était alors reconnu comme sommité dans le domaine de l’électromagnétisme et de la télégraphie. Il encourageait Graham Bell de persévérer et confirmait qu’il était sur le bon chemin.

6.2.2. Alexandre Graham Bell (1847 – 1922)

Le jeune Alexandre Graham Bell, né en 1847 à Edimbourg en Ecosse, a hérité l’intérêt pour l’acoustique de son père, Alexandre Melville Bell, qui était enseigant et chercheur dans le domaine de la phonétique. Il est l’inventeur du Visible Speech, une méthode créée afin d’enseigner la parole aux sourds.

En 1863, Graham Bell a été emmené par son père à une visite à Londres de la machine parlante reconstruite par Charles Wheatstone. Il était fasciné par la machine. Charles Wheatstone lui prêtait la description de Wolfgang von Kempelen et, avec son frère Melville, il réalisa sa propre version de cet automate. Dans la suite, Alexandre Graham Bell pratiqua des expériences sur la physiologie de la parole et étudia la hauteur et la formation des voyelles à l’université d’Edimbourg. La fascination par la machine parlante semble donc être à l’origine de l’intérêt pour la parole humaine qui ont conduit Graham Bell à faire breveter le téléphone en 1876.

Brevet du 7 mars 1876 attribué à Graham Bell (Wikipedia) Google : Patents

Il convient toutefois de signaler que la paternité de Graham Bell dans l’invention du téléphone a donné lieu de suite à des controverses qui persistent encore aujourd’hui. A côté de Graham Bell, les personnes suivantes se considèrent comme les inventeurs du téléphone : Antonio Meucci, Johann Philipp Reis, Innocenzo Manzetti, Charles Bourseul, Amos Dolbear, Daniel Drawbaugh et Elisha Gray. Un collectionneur français de téléphones, Jean Godi, a écrit la véritable histoire du téléphone sur son site web.

6.2.3. Thomas Edison (1847 – 1931)

Né le 11 février 1847 à Milan dans l’Ohio, Thomas Edison a travaillé au début comme télégraphiste. A l’âge de 19 ans il déposait son premier brevet pour l’invention d’un transmetteur-récepteur duplex automatique de code Morse. En 1874 il devenait patron de sa première entreprise grâce aux fonds récoltés pour son brevet. Avec deux associés, il dirigeait un laboratoire de recherche avec une équipe de 60 chercheurs salariés. Il supervisait jusqu’à 40 projets en même temps, et se voyait accorder un total de 1 093 brevets américains. Sa société a donné naissance à la General Electric, aujourd’hui l’une des premières puissances industrielles mondiales.

En 1877, Thomas Edison a achevé la mise au point de son phonographe, capable non seulement d’enregistrer mais aussi de restituer toute forme de sons, dont la voix humaine. Les premiers phonographes étaient munis d’un cylindre phonographique d’acier en rotation, couvert d’une feuille d’étain, et la gravure était effectuée par une aiguille d’acier. L’enregistrement était lu par la même aiguille dont les vibrations sur un diaphragme mince étaient amplifiées par un cornet acoustique.

Phonographe d’Edison au musée des sciences à Madrid (Wikipedia)

 

6.2.4. Homer Dudley (1896 – 1980)

Né en 1896 en Virginie, Homer Dudley était un pionnier de l’ingénierie acoustique. Après ses études il a joint la division téléphonie des laboratoires Bell en 1921. Quelques années plus tard le premier service téléphonique commercial transatlantique entre l’Amérique du Nord et l’Europe a été établi. C’était le 7 Janvier 1927, la liaison passait par ondes radio.

Le premier câble transatlantique a déjà été posé en 1858 et il était utilisé pour la télégraphie. Le premier message a été envoyé le 16 août 1858. Le câble s’est rapidement détérioré et la transmission d’un message d’une demi-page de texte prenait jusqu’à un jour. Après 3 semaines, le câble est tombé en panne et n’a pas pu être réparé. Dans la suite d’autres câbles ont été posés qui étaient plus durables. En 1866 on arrivait à transmettre 8 mots par minute sur un câble télégraphique transatlantique. Au début du XX siècle la vitesse dépassait 120 mots par minute.

La performance des câbles télégraphiques a été améliorée par l’alliage magnétique permalloy qui compense l‘induction électromagnétique. Inventé par le physicien Gustav Elmen en 1914 dans les laboratoires Bell sur base des théories de Oliver Heaviside, un nouveau procédé de fabrication de câbles sous-marin afférent a été testé avec succès en 1923. Les nouveaux câbles télégraphiques construits avec ce procédé ont atteint des bandes passantes de 100 Hertz, ce qui permettait de transmettre jusqu’à 400 mots par minute.

L’objectif de Homer Dudley était de comprimer la voix humaine de façon à pouvoir la transmettre sur un tel câble télégraphique ayant une bande passante de 100 Hertz. Homer Dudley se disait que la langue, les lèvres et les autres composants du conduit vocal ne sont rien d’autre que des clés télégraphiques qui bougent à une cadence maximale de quelques dizaines de Hertz. Il suffit d’analyser les principales composantes spectrales de la voix et de fabriquer un son synthétique à partir du résultat de cette analyse.

Il faut se rappeler que Joseph Henry faisait les mêmes réflexions 80 ans plus tôt.

Aujourd’hui on sait que la limite théorique minimum de débit pour un codage conservant l’information sémantique contenue dans la parole est d’environ 60 bits par seconde, si l’on compte environ 60 phonèmes dans une langue et une vitesse d’élocution moyenne d’une dizaine de phonèmes par seconde. Pour un débit aussi faible, les informations concernant le locuteur et ses émotions sont perdues.

Homer Dudley a pu profiter des études effectuées par les chercheurs Harry Nyquist et Ralph Hartley qui travaillaient également dans les laboratoires Bell. Le premier est à l’origine du théorème d’échantillonnage de Nyquist-Shannon, le deuxième a conribué à la fondation de la théorie de l’information. En octobre 1928, il a esquissé les premiers circuits et édité une description de sa future invention : le VOCODER.

Démonstration du VOCODER par Homer Dudley (Bell System Technical Journal  No 4, October 1940)

Le nom VOCODER résulte de la composition des termes codeur et décodeur. Le codeur analyse le signal pour en extraire un nombre réduit de paramètres pertinents qui sont représentés par un nombre restreint de bits pour la transmission. Le décodeur utilise ces paramètres pour reconstruire un signal de parole synthétique. Le principe du codeur de Homer Dudley consistait à évaluer l’énergie, le voisement, le formant F0 et les puissances relatives du signal dans un ensemble de douze bandes de fréquences adjascentes. Le décodeur génèrait la parole synthétique en passant le signal d’excitation dans un banc de filtres passe-bande dont les sorties étaient pondérées par les puissances relatives du signal original dans ces différentes bandes. Les sorties des filtres ont été ajoutées ensuite et cette somme a été mise à l’échelle en fonction de l’énergie de la trame originale.

La qualité de la voix reproduite par le vocodeur de Homer Dudley (aujourd’hui connu sous le nom de spectrum channel vocoder) était insuffisante pour envisager une introduction commerciale. Avec l’aide de Robert R. Riesz, Homer Dudley s’est alors focalisé sur la partie décodeur avec la parole synthétique. Le codeur a été remplacé par une console avec un clavier pour générer les paramètres de la voix. Cet appareil a été nommé VODER et breveté en 1937 au profit de Homer Dudley et des laboratoires Bell. Il a été présenté au grand public lors de l’exposition mondiale à New York en 1939.

Présentation de PEDRO the VODER au stand de Bell à l’exposition mondiale 1939 à New York

Le VODER découpait le spectre vocal en 10 bandes et comprenait des oscillateurs et des générateurs de bruit pour produire des signaux électriques qui passaient ensuite par des filtres pour produire les différents sons. Les oscillateurs et filtres étaient commandés par 10 touches. La manipulation était complexe et il fallait entraîner des opératrices (vodettes) pendant plusieurs mois pour produire une synthèse vocale intelligible.

assemblage de photos du VODER ; Homer Dudley en haut à gauche

Pendant la deuxième guerre mondiale, Homer Dudley a contribué aux recherches du projet SIGSALY concernant les transmissions sécurisées sur base du vocodeur. Il est resté auprès de Bell jusqu’au début des années 1960. Le dernier projet de Homer Dudley était le développement d’un kit de synthèse vocale pour des étudiants et hobbyistes. Fabriqué à partir de 1963, le kit a été commercialisé jusqu’à la fin des années 1960.

Kit de synthèse vocale de Bell

La recherche sur la synthèse vocale a été poursuivie dans les laboratoires Bell. Au début des années 1960 c’étaient John L. Kelly, Carol Lockbaum, Cecil Coker, Paul Mermelstein et Louis Gerstman qui étaient engagés dans le développement de systèmes de simulation de l’appareil vocal humain.

Le vocodeur inventé par Homer Dudley est devenu célèbre dans les années 1970 comme instrument de création sonore utilisé par des groupes de musique électronique comme Kraftwerk, The Buggles et d’autres. En réalité, Kraftwerk utilisait surtout le synthétiseur Votrax, inventé par Richard T. Gagnon (voir 6.2.10), comme sa fille a témoigné en 2013.

6.2.5. Franklin S. Cooper (1908 – 1999)

En 1941, pendant la deuxième guerre mondiale, les chercheurs W. Koenig, H. K. Dunn et L. Y .Lacy des laboratoires Bell ont inventé le premier spectrographe acoustique qui convertit une onde sonore en spectre sonore.

Sound Spectrograph D-165529 (Griffonage-dot-com)

Si vous êtes intéressé à obtenir plus de détails sur les spectres sonores, veuillez lire ma contribution Spectrograms and speech processing sur le présent site web.

Franklin Seaney Cooper a eu l’idée de faire le processus inverse, c’est à dire convertir un spectre sonore en onde sonore. Né en 1908, il a obtenu un doctorat en physique au MIT en 1936. Une année plus tôt, il a fondé ensemble avec Caryl Parker Haskins les laboratoires Haskins, une institution de recherche sans but lucratif, spécialisée dans le langage oral et écrit. Franklin S. Cooper a été le président et directeur des recherches des laboratoires Haskins de 1955 à 1975.

A la fin des années 1940, Franklin S. Cooper, assisté de John M. Borst et Caryl P. Haskins, a développé la machine appellée Pattern Playback pour convertir des spectrogrammes en paroles.

Assemblage de photos de la machine Pattern Playback (laboratoires Haskins)

L’appareil pouvait reproduire des images de spectrogrammes réels ou bien des modèles artificiels recomposés à la main avec une peinture blanche sur une base d’acétate de cellulose. La production des sons se faisait par l’intermédiaire d’un faisceau lumineux modulé par une roue tonale et réfléchie par les parties blanches du spectrogramme. Comme le spectrogramme se déroulait dans l’appareil à une vitesse uniforme, on pouvait dessiner sur le modèle synthétique les trois paramètres fondamentaux du son : le temps (axe horizontal), la fréquence (axe vertical) et l’amplitude (épaisseur des traits). Un spectrogramme synthétique de la phrase These days a chicken leg is a rare dish est présenté dans le figure suivante :

La machine Pattern Playback a été perfectionnée au fur et à mesure et a servi à faire de nombreuses recherches au sujet de la perception de la voix et de la synthèse et reconnaissance de la parole, notamment par Alvin Liberman, Pierre Delattre et d’autres phonéticiens.

La machine a été utilisée une dernière fois en 1976 pour une étude expérimentale réalisée par Robert Remez et elle se trouve maintenant au musée des laboratoires Haskins.

6.2.6. Gunnar Fant (1919 – 2009)

Carl Gunnar Michael Fant était professeur émérite à l’Institut royal de technologie de Stockholm (KTH). Gunnar Fant obtint une maîtrise en génie électrique en 1945. Il s’était spécialisé dans l’acoustique de la voix humaine, en particulier dans la constitution des formants des voyelles. Il a effectué ses recherches auprès de Ericsson et du MIT à ce sujet  et créait un département des sciences vocales (Speech Transmission Laboratory) auprès du KTH. Gunnar Fant développait en 1953 le premier synthétiseur par formants Orator Verbis Electris (OVE-1). Des résonateurs ont été connectés en série, le premier résonateur pour le formant F0 a été modifié avec un potentiomètre, les deux autres pour les formants F1 et F2 avec un bras mécanique.  En 1960 Gunnar Fant publiait la théorie associée à ce synthétiseur, le modèle source-filtre pour la production de la parole.

Gunnar Fant avec le synthétiseur OVE-I  en 1953 (KTH)

Après sa retraite, Gunnar Fant a continué ses recherches dans le domaine de la synthèse vocale en se focalisant notamment sur la prosodie. Pour son 60ième anniversaire en 1979 ses collaborateurs avaient édité un numéro spécial du journal interne de son département.

En 2000 Gunnar Fant a tenu un discours au congrès FONETIK à Skövde en Suède sur ses travaux effectués dans le domaine de la phonétique durant un demi-siècle. Il a décrit sa fascination pour la machine Pattern Playback de Franklin S. Cooper qu’il a pu voir en 1949. Son propre synthétiseur en cascade OVE II  utilisait une technique similaire pour générer les signaux d’entrée qui varient les fréquences et amplitudes des oscillateurs et des générateurs de bruits afin de produire des voyelles et des consonnes pour parler des phrases complètes. Cette deuxième machine, réalisée en collaboration avec Janos Martony et qui fonctionnait avec des tubes à vide électriques, a été présentée en 1961.

Janos Martony et Gunnar Fant (à droite) avec le synthétiseur OVE-II en 1958 (KTH)

Une troisième version électronique du synthétisuer OVE III a été réalisée par Johan Liljencrants en 1967 avec des transisteurs. Elle  a été raccordée à un ordinateur et gérée par un programme informatique.

Après sa mort en 2009, un portrait en mémoire de Gunnar Fant a été publié sur le site web du KTH.

6.2.7. Walter Lawrence ( – 1984)

Walter Lawrence était un ingénieur anglais qui  a travaillé après ses études au SRDE (Signals Research and Developement Establishment), une institution militaire créée en 1943 (pendant la deuxième guerre mondiale) par le ministère de l’approvisionnement du gouvernement britannique. Walter Lawrence était en charge d’examiner des moyens de réduction de la bande passante pour améliorer la sécurité de l’encryption des messages militaires. Un deuxième objectif était de rendre la transmission des communications téléphoniques plus efficace et plus économique sur les grandes distances, en particulier  sur les nouveaux câbles transatlantiques.

Pour ce faire, il s’est basé sur l’invention du vocodeur de Homer Dudley et il se focalisait sur la partie VODER. Il publiait en 1953 un article The Synthesis of Speech from Signals which have a low Information Rate dans lequel il proposait six paramètres pour transmettre et restituer la parole : les trois fréquences des résonances dominantes (formants), l’amplitude et la fréquence de l’excitation du larynx et l’intensité de l’excitation fricative.

Walter Lawrence appelait son synthétiseur basé sur ces principes Parametric Artificial Talker, abrégé en P.A.T. Aux fins de parfaire sa première construction réalisée en 1952 au SRDE qui n’exploita que quatre paramètres, il contacta l’université d’Edimbourg qui avait une bonne renommé dans le domaine des sciences linguistiques. Un synthétiseur qui utilisait les six paramètres décrits était opérationnel en 1956 dans les laboratoires de l’université. L’entrée des paramètres se faisait par des plaques en verre sur lesquelles on dessinait le flux des six paramètres qui étaient scannées par un faisceau lumineux.

Plaques en verre avec des paramètres pour le synthétiseur P.A.T. pour dire les phrases “What have you done with it?” et “What sound comes next?” (National Museums Scotland)

L’installation est conservée aujourd’hui dans le musée nationale de l’Ecosse.

La même année (1956), Walter Lawrence et Gunnar Fant ont présenté leurs projets respectifs à une conférence au MIT à Cambridge. Le sommet de la présentation a été une conversation en temps réel entre les deux synthétiseurs P.A.T. et OVE.

Le P.A.T. a évolué en une version avec huit paramètres au début des années 1960, notamment grâce à l’apport de Frances Ingemann qui assistait le constructeur principal de la machine, James Tony Anthony, à la parfaire. Frances Ingemann a publié en 1960 une contribution Eight-Parameter Speech Synthesis dans le journal de la société acoustique américaine.

James Tony Anthony et Frances Ingemann avec le P.A.T. en 1958 (University of Kansas)

Le synthétiseur P.A.T. a connu une certaine notoriété auprès du grand public suite à la diffusion d’un film afférent à la télévision. Eye en Research était une série de télévision produite par la BBC au sujet de la recherche scientifique dans les années 1957 à 1962. La transmission se faisait en direct à partir des laboratoires de recherche avec une caméra mobile. Un journaliste de la BBC présentait et commentait le sujet. Le 28 octobre 1958 le sujet portait sur les six paramètres du synthétiseur P.A.T., développé dans les laboratoires de l’université d’Edimbourg.

Images extraites du film (de gauche à droite, de haut en bas) : Baxter, Strevens, Anthony, Lawrence, Abercrombie, Lagefoged, mesure de la force de la voix avec un ballon introduit dans le larynx, mesure des vibrations de la voix au cou, visualisation des cordes vocales avec un miroir introduit dans la bouche, coloration de la langue avec de la poudre, observation des taches colorées dans la bouche causées par les  mouvements de la langue, mesure des fréquences de la voix avec un oscilloscope, démonstration du P.A.T. par Strevens et Anthony, présentation d’un spectrogramme, schéma du P.A.T., carte postale à envoyer par les spectateurs à BBC pour répondre aux questions de Walter Lawrence.

L’introduction est faite par le journaliste Raymond Baxter dans le studio à Londres. Le synthéthiseur P.A.T. est présenté par Peter Strevens et James Tony Anthony du départment phonétique de l’université. Walter Lawrence explique pourquoi il s’est adressé à l’université d’Edimbourg dans le cadre de ses travaux d’optimisation de la transmission de la parole sur les câbles téléphoniques transatlantiques. Le directeur du département David Abercrombie relève l’intérêt de combiner la recherche fondamentale effectuée à l’université avec la recherche appliquée pratiquée par Walter Lawrence. Le linguiste Peter Ladefoged, ensemble avec son assistante Lindsay Criper, présente de manière brillante comment mesurer et évaluer dans le  palais vocale humain les six paramètres requises pour manipuler le synthétiseur P.A.T. A la fin du film, Walter Lawrence demande aux spectateurs d’écouter quelques mots synthétisés par la machine et de les noter sur une carte postale à adresser à la BBC afin d’examiner l’intelligibilité de la voix artificiel.

Cette vidéo montre d’une façon très pertinente le fonctionnement de la synthèse vocale.

Après sa retraite au SRDE en 1965, Walter Lawrence a rejoint l’université d’Edimbourg comme maître de conférences. Il est décédé en 1984.

6.2.8. John N. Holmes ( – 1999)

John N. Holmes est un ingénieur en génie électrique britannique qui a obtenu son diplôme en 1953 à Londres. En 1956 il a rejoint la Joint Speech Research Unit (JSRU) qui a été formée la même année par la fusion de plusieurs agences gouvernementales en charge de la recherche dans le domaine vocal. L’intérêt de la JSRU se focalisait sur les télécommunications, aussi bien pour des applications militaires que civiles. La JSRU était affiliée administrativement au Post Office qui était responsable à l’époque pour la téléphonie.

L’analyse de la parole était l’activité principale de la JSRU. La synthèse vocale était un outil  important à ces fins. John Holmes visitait en 1960 le KTH à Stockholm pour se familiariser avec le synthétiseur OVE II de Gunnar Fant. Après son retour à Londres en 1961 il a construit son propre synthétiseur désigné dans la suite comme JSRU formant synthesizer. Au lieu de la cascade de résonateurs connectés en série appliquée pour OVE, il utilisait un arrangement parallèle qui fournissait une meilleure qualité de la voix synthétique. Avec un jeu de paramètres optimisés manuellement à partir de valeurs déduites de la voix naturelle, John Holmes était capable de reproduire des phrases pour lesquelles des interlocuteurs ne pouvaient plus faire la distinction entre la parole naturelle originale et la parole synthétique.Il appelait ce principe la copie-synthèse.

Un schéma du synthétiseur de John Holmes est présenté dans la figure qui suit :

Schéma du synthétiseur parallèle de formants de John Holmes (semanticscholar.org)

En 1970 John Holmes est devenu directeur de la JSRU. A l’occasion de la conférence internationale sur la communication vocale qui a eu lieu en avril 1972 à Boston, il a présenté les conclusions de ses travaux. Il était d’avis qu’avec la technologie actuelle il suffisait d’avoir les bons paramètres d’entrée pour produire de la parole synthétique qu’on ne peut plus distinguer de la parole naturelle. Pour le prouver il faisait des démonstrations lors de la conférence. Avec des paramètres configurés manuellement (peintes à la main) les phrases prononcées étaient très proches de la parole naturelle, mais avec des paramètres extraits à partir des enregistrements de la parole naturelle la situation était une autre.

Invitation à la conférence internationale sur la communication vocale en 1972 à Boston

A partir du début des années 1970 les scientifiques concentraient leurs recherches sur la production automatique des paramètres de contrôle des synthétiseurs vocaux à formants. On commençait à générer les paramètres à partir de textes et la linguistique prenait un rôle de plus en plus important. En outre le but de la synthèse vocale changeait. Au lieu d’être un outil d’analyse de la voix humaine pour comprendre comment fonctionne l’appareil phonatoire humain, le nouveau objectif était de produire des interfaces pour faciliter la communication avec les ordinateurs qui faisaient leur entrée à grands pas dans les entreprises et institutions.

En 1977 John Holmes publiait l’article Extension of the JSRU synthesis by rule system, en 1984 l’article Use of flexible voice output techniques for machine-man communication. Après son départ de la JSRU en 1985 John Holmes travaillait comme consultant indépendant et il continuait à publier des articles et livres au sujet de la synthèse et reconnaissance vocale. Il est décédé en 1999. Sa dernière contribution porte le nom de Robust Measurement of Fundamental Frequency and Degree of Voicing.

6.2.9 Forrest S. Mozer (1929 – )

Forrest Mozer est un physicien expérimental, inventeur et entrepreneur américain, reconnu pour ses travaux novateurs sur les mesures de champ électrique dans un plasma spatial. Il est en outre le développeur de circuits électroniques pour la synthèse et la reconnaissance de la parole.

Auteur de plus de 300 publications et détenteurs de 17 brevets, il a reçu de nombreuses reconnaissances pour ses travaux scientifiques. Né en 1929 à Lincoln au Nebraska, il a travaillé comme chercheur nucléaire dans différentes institutions après ses études et son doctorat. En 1970 il a été nommé professeur en physique à l’université de Californie à Berkeley.

Parmi ses étudiants se trouvait un aveugle qui demandait son assistance, ce qui incitait Forrest Mozer à s’intéresser pour la synthèse de la parole. Il a alors inventé le codage de la parole connu sous le nom de Mozer Compression pour comprimer la voix enregistrée par microphone de façon à pouvoir la reproduire moyennant les microprocesseurs à 8 bits, disponibles en mi-1970. Cette technique était un précurseur de l’ADPCM.

Le brevet américain afférent (US4214125A) a été introduit en 1974 et modifié plusieurs fois. Le brevet a été licencié d’abord à Telesensoriy Systems Inc pour l’utilisation dans le calculateur TSI Speech+, destiné aux personnes aveugles. Le circuit intégré S14001A, développé en 1975 par Silicon Systems Inc. pour ce calculateur est considéré comme le premier circuit intégré de synthèse vocale. 

Dans la suite le brevet a été licencié à l’entreprise National Semiconductor qui a créé le circuit intégré DigiTalker MM54104 qui a été utilisé dans différents ordinateurs personnels, des jeux d’arcade et des interfaces de synthèse de la parole.

En 1984, Forrest Mozer a co-fondu l’entreprise Electronic Speech System pour commercialiser son système de synthèse de la parole breveté. Dix ans plus tard, il a fondé, ensemble avec son fils Todd Mozer, l’entreprise Sensory Circuits Inc., qui est spécialisée dans la reconnaissance de la parole.

Dans un entretien vidéo sur Skype avec le fondateur du magazine Scene World, Joerg “Navcom” Droge, Forrest Mozer raconte pendant plus d’une heure l’historique de ses travaux sur la synthèse de la parole.

6.2.10 Richard Thomas Gagnon (1939 – 2017)

Richard Thomas Gagnon était un ingénieur électronique qui a travaillé pour l’entreprise Federal Screw Works. Cette entreprise a été fondée en 1917 comme fournisseur de pièces métalliques pour l’industrie automobile. Depuis sa jeunesse Richard Gagnon était fasciné par les sciences et les technologies audio.

Il s’est intéressé tôt à la synthèse de la parole parce qu’il avait des problèmes avec la vue et il craignait de devenir aveugle.

Pendant son temps libre, il développait à partir de 1970 un appareil de synthèse vocale dans son laboratoire, situé au sous-sol de sa maison à Michigan. Il s’est basé sur sa propre voix pour définir les phonèmes. Il a réalisé plusieurs versions comme prototype et comme modèle de démonstration sous les noms VS1, VS2 et VS3. Il s’agissait de synthétiseurs à formants avec architecture parallèle.

Il avait soumis une demande de brevet auprès des autorités compétentes en 1971 pour son invention qui a été approuvée en 1974, après quelques modifications, sous le numéro US 3.836.717.

Richard Gagnon licenciait le brevet à son patron qui créa la division Vocal Interface au sein de l’entreprise Federal Screw Works pour fabriquer la version VS4 du synthétiseur au nom de VOTRAX. Les circuits électroniques fabriqués étaient encapsulés par de la résine pour éviter une rétro-ingénierie du produit. Une centaine d’équipement a été vendue. La division a été renommée dans la suite en Votrax Division.

D’autres versions ont été réalisées, dont les modèles VS6.x qui ont été vendues à plusieurs milliers d’exemplaires jusqu’à la fin des années 1970. Les versions supportaient entre 32 et 128 phonèmes.

En 1980, la fabrication d’un circuit intégré SC-01 a été commandée auprès de la société Silicon Systems Inc. pour le synthétiseur vocal, suivi du circuit SC-02 en 1983. Ces circuits ont été utilisés par des producteurs tiers pour la fabrication de terminaux parlants et de consoles arcades. A côté de l’anglais, quelques autres langues ont été supportées. À partir de 1984 le synthétiseur Votrax a été commercialisé comme carte PC sous la désignation Votalker pour les ordinateurs IBM PC, Appel II et Commodore 64. L’œuvre de Richard Gagnon est considéré comme une One Man Show. C’est le dernier inventeur dans le domaine de la synthèse vocale qui a agi seul et sous sa propre responsabilité. Il détenait 18 brevets et il était également l’auteur de quelques publications scientifiques.

En 1994, Richard Gagnon a subi un accident vasculaire cérébral et il ne pouvait plus communiquer avec ses proches, ce qui explique que ses contributions à la synthèse de la parole étaient longtemps ignorées par la communauté scientifique et par le public.

Grâce au témoignage de la fille de Richard Gagnon, Sheila Janis Gagnon, qui a établi en 2013 l’inventaire des documents et équipements qui se trouvaient encore dans le laboratoire au sous-sol de la maison familiale, pour les remettre au musée de l’institution Smithsonian, il a été possible de donner le crédit mérité au développeur ingénieux du Votrax.

6.2.11. Speak & Spell (1976)

En juin 1978 Texas Instruments (TI) présentait à la CES un équipement, appelé Speak & Spell, destiné aux enfants pour apprendre l’orthographie. Ce jouet prononçait environ 200 mots qu’il fallait épeler correctement moyennant le clavier intégré.

Capucine avec la Dictée Magique (Speak & Spell de TI) en 2017

Speak & Spell marque la transition entre la synthèse vocale électronique et informatique et constituait une étape importante (milestone) dans l’évolution des circuits intégrés. Le premier circuit intégré a été développé par Jack Kilby auprès de Texas Instruments en 1958. Il a reçu le prix Nobel de physique en 2000 pour son invention.

Au milieu des années 1970, les ingénieurs du département Produits de Consommation de Texas Instruments cherchaient une idée pour créer un équipement grand public pour mettre en valeur les mémoires à bulles, une technologie de stockage électromagnétique miniaturisée, sans parts mouvantes, qui était en vogue à l’époque, mais qui a été abandonnée à la fin des années 1980. L’ingénieur Paul Breedlove de TI proposait le développement d’un jouet didactique utilisant la synthèse de la parole, dans la tradition de la calculette Little Professor qui a connu un grand succès, suite à son introduction par TI en 1976.

Calculette “Little Professor” de Texas Instruments

L’idée a été approuvée et une équipe projet de quatre ingénieurs a été constituée au sein de TI sous la direction de Paul Breedlove; les autres membres étaient Gene Frantz, Richard Wiggins et Larry Branntingham. 

Richard Wiggings était en charge de concevoir le système de synthèse de la parole, Larry Branntingham était responsable pour le développement des circuits intégrés et Gene Frantz gérait la collaboration avec d’autres développeurs de TI qui contribuaient au projet. Il s’est avéré rapidement que la digitalisation et le stockage de mots parlés dans des mémoires bulles ou dans des ROM’s (Read Only Memories) était trop couteux et qu’il fallait recourir aux méthodes de synthèse existantes à l’époque. La solution retenue était basée sur le codage prédictif linéaire (LPC) qui permet de comprimer sensiblement la voix,  de stocker pour chaque mot à prononcer un nombre très limité de données et de reproduire la parole enregistrée moyennant un circuit intégré de traitement numérique du signal (DSP).

Fondamentalement il s’agissait toujours d’une simulation du fonctionnement de l’appareil phonatoire humain, sauf que les dispositifs pour synthétiser des sons à partir de paramètres spécifiques étaient mécaniques il y a 250 ans, puis électriques analogiques il y a 100 ans, dans la suite électroniques analogiques il y a 50 ans, et donc pour la première fois numériques dans le cas de Speak & Spell. Bien sûr le nombre et la qualité des paramètres de commande pour produire un son a augmenté au fil des années, mais le principe de base restait le même.

Le circuit intégré LPC développé par TI pour réaliser la synthèse vocale portait la désignation TMC0281, renommé plus tard en TMS5100. L’architecture a fait l’objet de plusieurs brevets et le circuit a été inclus dans le temple de la renommée (hall of fame) des circuits intégrés de l’IEEE en 2017, bien que ce n’était pas le premier circuit intégré de synthèse vocale. A côté de ce circuit le jouet Speak & Spell comportait un microprocesseur TMS1000 pour gérer le clavier, l’affichage, le processus LPC et l’interface avec l’usager.  Les paramètres des mots à prononcer étaient stockés dans deux ROM’s à 128 Kbits. C’était la capacité de ROM la plus élevée disponible à l’époque. Pour enregistrer ces mots on faisait recours à un modérateur radio, Hank Carr.

Speak & Spell comportait également un dispositif pour connecter des cartouches de jeu échangeables. Son prix de lancement était de 50 $ US. Le jouet a été commercialisé avec grand succès pendant plus de 10 ans au monde entier, en plusieurs variantes (Speak & Read, Speak & Math), avec des voix pour différents langages et avec de nombreuses cartouches de jeux. En France, le jouet a été vendu sous le nom de Dictée magique. En 2009 Speak & Spell a été nommé comme milestone IEEE.

En 1982, l’équipement Speak & Spell a été utilisé par E.T. dans le film culte de Steven Spielberg pour téléphoner avec les habitants de sa planète. C’est une des raisons pourquoi le jouet lui-même est devenu un objet culte qui bénéficie encore aujourd’hui d’une large communauté de fans qui maintiennent des émulateurs du synthétiseur, des cartouches de jeu et des instructions comment pirater le système pour l’utiliser à d’autres fins.

Le circuit intégré TMC0281 et ses successeurs ont également été vendus séparément par Texas Instruments sous la désignation TMS5100 etc. Ils ont été implémentés dans des ordinateurs  personnels, des consoles de jeu et des voitures. La technique LPC constituait la base pour le codage et la compression de la voix dans les terminaux GSM au début des années 1990 et elle est encore utilisée aujourd’hui.

Team de développement du Speak & Spell : Gene Frantz, Richard Wiggins, Paul Breedlove, and Larry Branntingham

6.3. Synthétiseurs vocaux informatiques

Le lecteur attentif a certainement compris que les inventeurs des synthétiseurs vocaux mécaniques et électriques ont tous essayé de simuler le fonctionnement de l’appareil phonatoire humain. Bien qu’il y a eu des progrès dans la qualité de la voix synthétique au fil du temps, le principe de base est resté le même. Il n’est donc pas étonnant que le portage de la synthèse vocale sur les premiers ordinateurs est resté au début dans la même lignée. Les oscillateurs et résonateurs sont devenus numériques et ont été réalisés moyennant des programmes informatiques pour générer les formants des voyelles et les sons des consonnes. Au lieu d’une cascade sérielle our d’un arrangement parallèle on distinguait la synthèse sonore additive, soustractive ou FM. Comme la génération des sons est commandée par les valeurs de plusieurs paramètres on parle de synthèse par règles.

L’évolution des ordinateurs avec des processeurs de plus en plus puissants et des capacités de stockage de plus en plus grandes a permis de remplacer la simulation classique de l’appareil phonatoire humain par des procédés plus modernes. Une première méthode consistait à enregistrer des bribes de parole (phonèmes) et de les enchaîner. Les phonèmes sont les éléments minimales de la parole. La langue luxembourgeoise comporte par exemple 55 phonèmes, en tenant compte des mots étrangers. Mais comme la parole est un processus temporel continu, les phonèmes sont trop courtes et inappropriés pour obtenir une synthèse vocale par concaténation de qualité acceptable. La prochaine étape consistait à utiliser des diphones qui sont définis comme la portion du signal de parole comprise entre les noyaux stables de deux phonèmes consécutifs. Le nombre de diphones est théoriquement le carré du nombre de phonèmes, c’est à dire 3.025 pour la langue luxembourgeoise. Mais comme certaines transitions n’ont pas lieu en pratique, on obtient environ 2.000 diphones à considérer. Si on utilise des unités plus longues que les diphones, on parle de synthèse par sélection d’unités. Ces unités sont extraites automatiquement par des programmes utilisant des méthodes statistiques, à partir d’enregistrements vocaux avec annotation des textes correspondants, pour les sauvegarder dans une base de données indexée. Le nombre d’unités peut dépasser les 15.000 pour une voix.

Schéma simplifié de synthèse de la parole par sélection d’unités

La voix artificiel résultante est proche d’une voix humaine. La plupart des systèmes de synthèse vocale commerciaux est basée sur la synthèse de concaténation par sélection d’unités. Le désavantage de cette méthode est que le contrôle sur la voix est presque nul;  la synthèse est peu flexible : elle restitue bien ce qui est dans la base mais ne permet guère d’aller au-delà.

Une méthode plus récente est appelée synthèse paramétrique statistique (HMM : Hidden Markov Model). Elle repose de nouveau sur le modèle source-filtre et le vocodeur qu’on a rencontré dans le passé pour simuler le fonctionnement de l’appareil phonatoire humain. Mais contrairement à la synthèse par règles ou les paramètres sont définis explicitement par un expert de façon déterministe, ici les paramètres sont appris grâce à des modèles statistiques, sur un gros corpus de parole, sous forme de chaînes de Markov, et générés de façon probabiliste.

Le recours à des réseaux neuronaux permet de remplacer l’apprentissage par des modèles statistiques du type HMM par un apprentissage profond issu de l’intelligence artificielle. Ce type de synthèse vocale est actuelllement à la une de tous les laboratoires de recherche actifs dans ce domaine.

Jusqu’au début des années 1990 il était possible de désigner des particuliers ayant le mérite d’une nouvelle invention dans le domaine de la synthèse vocale. Ensuite c’est devenu de plus en plus difficile. C’est pour cette raison que je vais présenter dans les derniers chapitres concernant la synthèse vocale informatique des centres de compétences afférents, sans oublier toutefois de mentionner les chercheurs individuels qui jouent un rôle important au sein de ces institutions.

6.3.1. Dennis H. Klatt (1938 – 1988)

Dennis H. Klatt était un chercheur américain spécialisé dans les sciences de l’audition et de la parole. Il est né en 1938 à Milwaukee. Après ses études universitaires accomplies en 1961 et son doctorat obtenu en 1964, il a joint le MIT comme assistant-professeur une année plus tard. En 1978 il est devenu chercheur principal au MIT où il est resté jusqu’à sa mort en 1988. En 1979 il a publié dans le journal de la société américaine d’acoustique un article intitulé Software for a cascade/parallel formant synthesizer.

Dennis Klatt est considéré comme le pionnier de la synthèse de la parole informatisée. Il était le premier à développer un système de conversion d’un texte écrit en parole sans intervention d’un spécialiste. Il appelait son programme KlatTalk et le présentait à la communauté scientifique en mai 1982 lors de la conférence internationale du IEEE concernant l’acoustique, la parole et le traitement des signaux. Sa contribution portait le nom de The klattalk text-to-speech conversion system. Le mot KlatTalk est un palindrome, c’est l’inversion de l’ordre des lettres du nom Klatt.

Dennis Klatt avec son synthétiseur en 1987 (RLE MIT)

Bien que le système utilisait une méthode de synthèse vocale basée sur la génération de formants pour les voyelles et sur des règles de conversion spécifiques, Dennis Klatt avait utilisé sa propre voix pour extraire les paramètres de synthèse. La voix synthétique résultante ressemblait donc à la voix réel de Dennis Klatt.

En 1984, la société américaine Digital Equipment Corporation (DEC) démarrait la commercialisation d’une unité de synthèse de la parole autonome qu’on pouvait raccorder par une connexion asynchrone RS-232 à un ordinateur. Pour cet équipement, appelé DECTalk, DEC avait négocié une licence exclusive pour l’utilisation du système Klattalk.

Pour la conversion de textes en phonèmes un jeu de règles avait été développé par Sharon (Sheri) Hunnicutt à l’Institut Royal des Technologies Suédois (KHT). La théorie adjacente a été présentée en 1985 dans le rapport interne périodique du KHT avec le titre Lexical prediction for a text-to-speech system. Pour l’intégration du jeu de 625 règles pour la langue anglaise DEC n’avait reçu qu’une licence non-exclusive.

L’équipement DECTalk disposait également de connecteurs pour le raccordement au réseau téléphonique, ce qui permettait de créer les premiers répondeurs téléphoniques assistés par ordinateur. DECTalk a été vendu pendant plus de dix ans, sous différentes formes de hardware et de software et en plusieurs versions. Le premier modèle DCT01 coutait environ 4.000 $ US lors du lancement. Un des premiers gros usagers était le service national américain de météorologie (wheather infos).

DECTalk comme équipement autonome et comme carte PC

Au début le système comprenait plusieurs voix américaines intégrées qui portaient des noms fantaisistes comme Beautiful Betty, Kit the Kid, Uppity Ursula, Doctor Dennis et Whispering Wendy. La voix la plus populaire était la voix par défaut, appelée Perfect Paul, du fait qu’elle a été utilisée par le fameux scientifique britannique Stephen Hawking qui, depuis 1985, était incapable de parler a cause d’une trachéotomie, pratiquée suite à l’aggravation de sa maladie neurologique.

Dennis Klatt s’était très tôt engagé à faire profiter les personnes handicapées de l’utilisation de son système Klattalk, respectivement de DECTalk, pour communiquer avec leur environnement. Les personnes aveugles s’en servaient pour lire des livres, et plus tard pour surfer sur Internet. Des personnes incapables de parler, comme Stephen Hawkins, l’utilisaient pour s’entretenir avec leurs proches.

Par l’ironie du sort, Dennis Klatt, qui a donné une voix aux ordinateurs, a perdu sa propre voix au milieu des années 1980, suite à un cancer de la gorge. Il a rapidement perdu la lutte contre la maladie et il est décédé en décembre 1988.

Dennis Klatt a laissé un héritage précieux aux historiens par sa publication Review of text-too-speech conversion for English en 1987 qui comprend une archive de 36 enregistrements audio de synthétiseurs vocaux, segmentée dans 4 sections (A, B, C et D) pour la période de 1939 à 1985.

En juillet 2013, BBC Radio diffusait un entretien entre Laura Fine, la fille de Dennis Klatt, et Lucy Hawking, la fille de Stephen Hawking, au sujet de la synthèse de la parole en général et en particulier sur l’utilisation de la voix du père de l’une par le père de l’autre. Cette émission faisait partie de la documentation Klatt’s Last Tapes de BBC Radio 4.

Au début de l’année 2000 la licence DECTalk a été vendue à Force Computers Inc, ensuite revendue à Fonix Speech qui est devenue SpeechFX. A l’heure actuelle la dernière version du kit de développement (SDK) de DECTalk est toujours commercialisée par la société SpeechFX. Il existe également une large communauté de fans de la technologie DECTalk, un exemple est le projet 80speak de LixieLabs.

6.3.2. Jonathan Duddington (1995)

Jonathan Duddington est le développeur du logiciel de synthèse de la parole Speak. Il s’agissait d’une suite d’outils pour les ordinateurs ACORN avec le système opératoire RISC. A côté du module TTS (text-to-speech) il y avait un éditeur de parole, un éditeur de phonèmes, un module Talk as you Type et un outil de vérification des règles phonétiques. Les débuts du développement de ce logiciel remontent à 1995.

Sur la Internet Wayback Machine on trouve l’ancienne page web de Jonathan Duddington ( version du 14 juin 1997) où il annonce la disponibilité d’une nouvelle version pour les ordinateurs RiscOS 3.0 au prix de 19,50 £.  Une version 2 améliorée a été annoncée en 1999.

Page web Speak de Jonathan Duddington sur l’Internet Wayback Machine

A l’époque Jonathan Duddington a présenté son logiciel aux membres de différents clubs d’utilisateurs d’ordinateurs ACORN dans la région du Coventry au Royaume Uni, par exemple au Derbyshire Acorn RISC Club (DARC), au ARM Club, au Manchester Acorn User Group et à la RISC OS 99 Show.

Speak utilisait la méthode de synthèse par formants. L’application comprenait plusieurs voix masculines et féminines, mais seulement pour la langue anglaise. Vers 2006 Jonathan Duddington portait Speak sur Linux et offrait le code en source libre sur la plateforme Sourceforge. La première version disponible était speak-1.5 publiée le 17.2.2006. A côté de la langues anglaise cette version supportait l’Esperanto et l’allemand. Plusieurs nouvelles versions ont été ajoutées au fil de l’année. En août 2006 l’application a été renommée eSpeak et un site web dédié afférent a été mis en ligne. eSpeak supportait des langues supplémentaires, l’africain, le grec, l’espagnol, l’italien et le polonais.

A partir de la version 1.16 les fichiers avaient également été renommées espeak. Des nouvelles versions ont été publiées à un rythme effréné jusqu’à la version espeak-1.48.4 en mars 2014. Cette version supportait 45 langues ainsi que les voix Mbrola.

eSpeak jouissait d’une très grande communauté et Jonathan Duddington était très engagé à fournir son aide aux utilisateurs et développeurs inscrits sur les listes de messages du projet. Pendant les quelques années il avait édité plusieurs centaines de réponses et d’annonces. Son dernier message date du 16 avril 2015.

Suite à l’allongement du silence de Jonathan Duddington, la communauté eSpeak commençait à s’inquiéter. Malgré plusieurs tentatives, personne n’a réussi à savoir ce qui s’était passé avec le développeur et on ne trouvait plus trace d’aucune biographie sur lui sur le net.

Après de longs débats au sein de la communauté eSpeak vers la fin de l’année 2015, la candidature de Reece Dunn comme nouveau coordinateur du projet eSpeak, rebaptisé eSpeakNG (nouvelle génération), a été approuvée. Reece Dunn était un contributeur de longue date au projet eSpeak et il l’avait porté sur Android. Son répositoire sur la plateforme Github, créé en mars 2013 pour le développement de eSpeak pour Android, a été utilisé dans une première phase pour héberger le projet eSpeakNG. Un autre développeur, Alon Zakai alias kripken, a converti eSpeak en Javascript moyennant l’outil Emscripten.

Page de dépôt GitHub du projet espeak-ng

Récemment le projet eSpeakNG a été transféré sur un propre repositoire de la communauté eSpeakNG sur Github. La version la plus récente est 1.49.2, publiée en septembre 2017. Après cette date, plus de 850 modifications ont été apportées jusqu’à ce jour dans la version de développement. L’application supporte actuellement 106 langues et accents. Je suis en train de finaliser une version pour le luxembourgeois que je me propose d’ajouter comme 107ième langue.

Il reste à signaler que la version eSpeak pour les anciens ordinateurs RISC est maintenue par Martin Avison.

6.3.3. University of Edinburgh ( > 1984)

L’université d’Edimbourg a été fondée en 1583. Nous avons vu dans le présent historique qu’elle a une longue tradition dans le domaine de la linguistique, notamment suite à la création du département phonétique en 1948 par David Abercrombie. Elle range actuellement dans les premiers rangs au niveau mondiale de notoriété QS World University Rankings by Subject 2018 concernant la linguistique.

En 1984 le centre interdisciplinaire CSTR (Center for Speech Technology Research), combinant la linguistique et l’informatique, a été créé à l’université. Depuis 2011 le CSTR est dirigé par le professeur Simon King.

Page web de présentation de la librairie dess outils Edinburgh Speech du CSTR

Les projets phares du CSTR sont la librairie des outils Edinbourg Speech ainsi que  Festival et Merlin. Le CSTR contribue en outre aux projets Kaldi et HTS. Les outils et logiciels de tous ces projets sont disponibles gratuitement en source libre (open source).

6.3.4. Carnegy Mellon University ( > 1986 )

L’université Carnegy Mellon à Pittsburgh porte le nom de Andrew Carnegie qui est né en Ecosse en 1835 et qui a immigré en 1848 avec ses parents aux Etats-Unis. Il est devenu un riche industriel et a fondé en 1900 une école technique, Carnegie Tech. En 1967, Carnegie Tech a fusionné avec l’institution Mellon pour devenir la Carnegy Mellon University (CMU). En 1986 la School of Computer Science a été créée au CMU, elle figure actuellement au 3ième rang des universités dans ce domaine, derrière le MIT et la Stanford University. En 1996 l’institut des technologies du langage (LTI : Language Technologies Institute) a été créé, basé sur l’ancien centre de traduction machinelle, et a réussi rapidement à se forger un nom auprès de la communauté scientifique.

Un des pionniers au LTI est le professeur Alan W. Black. Né en 1937 en Ecosse, il est le père du système de synthèse Festival qu’il a développé de 1996 à 1999 à l’université d’Edimbourg. Il a joint le LTI en 1999 et a continué à faire évoluer Festival, notamment en créant le site web festvox.org qui fournit tous les documents, outils et logiciels pour faciliter l’utilisation de Festival. En 2000 Alan Black a créé, ensemble avec d’autres spécialistes du LTI, l’entreprise privée Cepstral à Pittsbourgh qui fournit des systèmes de synthèse vocale commerciales. Dans la suite il a développé Flite, un synthétiseur vocale dérivé de Festival, optimisé pour être intégré dans des équipements à ressources limités comme les premiers téléphones mobiles.

Professor Alan W. Black, Language Technologies Institute, CMU (Youtube)

Alan Black a contribué au développement d’un autre projet phare de l’université Carnegy Mellon : CMU-Sphinx, un système de reconnaissance de la parole dont le code est également à source libre. Ensemble avec Keiichi Tokuda de l’Institut des Technologies Nagoya au Japon, Alan Black a lancé en 2005 un concours annuel international, sous le nom de Blizzard Challenge, pour évaluer la qualité des voix synthétiques développées par les participants à partir d’une même base de données audio et texte, mise à disposition par les organisateurs.

Aujourdhui âgé de 82 ans, Alan Black a présenté en décembre 2018 son projet le plus récent : la constitution d’une base de données contenant les textes et les enregistrements vocaux de la bible pour des centaines de langues, permettant la création de voix synthétiques pour les langues rares. Malheureusement le luxembourgeois n’est pas inclus.

Le LTI vient de publier un catalogue avec toutes les ressources disponibles en relation avec les projets réalisés par les membres et étudiants de l’institut.

Page web de présentation du catalogue des ressources vocales du LTI

6.3.5. Université de Mons ( > 1995 )

L’université de Mons (UMons) en Belgique a été établie en 2009 par la fusion de l’université de Mons-Hainaut et de la Faculté polytechnique de Mons. Cette dernière était la première école d’ingénieurs créée en Belgique, en 1836. Un des centres de recherche de la faculté était le Service de Théorie des Circuits et de Traitement du Signal (TCTS Lab), spécialisé dans les filtres digitaux, la synthèse et reconnaissance de la parole, le codage de la parole et la reconnaissance d’images.

Le responsable du TCTS était Thierry Dutoit, aujourd’hui professeur ordinaire à l’université de Mons et président du nouveau institut Numediart à l’université. En 1996 il a passé 15 mois aux laboratoires Bell aux Etats-Unis. Il est l’initiateur des ateliers européens eNTERFACE qui regroupent chaque année plus de 70 chercheurs pendant un mois complet autour de la thématique des interfaces multimodales.

Dans la synthèse vocale, sa majeure contribution est la coordination du projet MBROLA à partir de 1995, un système de synthèse vocale à base de diphones pour plusieurs langues europénnes.  La première version a été développée par Thierry Dutoit en 1996 et mise à disposition gratuitement pour des applications non-commerciales et non-militaires. Ce n’est que récemment, en octobre 218, que le code afférent a été publié par Numediart en source libre sur le réseau de développement Github. Plus que 70 voix synthétiques pour 40 différentes langues du monde entier ont été  développés pour MROLA et peuvent également être téléchargées à aprtir de Github. Le luxembourgeois ne figure pas parmi les voix disponibles.

The MBROLA project, Thierry Dutoit et autres,  4ième conférence internationale au sujet du traitement des langues parlées, Philadelphia, 3 – 6 octobre 1996  (ISCA)

La ville de Mons a été longtemps un centre renommé européen de la synthèse vocale. En 1996, Thierry Dutoit a été un des fondateurs de la société Babel Technologies comme spin-off de la Faculté Polytechnique. Cette société a fusionné en 2003 avec les sociétés ELAN (FR) et INFOVOX (SWE) pour former le groupe ACAPELA dont le siège se trouve toujours à Mons.

Page web d’accueil du groupe Acapela

À l’époque il existait une autre entreprise spécialisée dans le traitement de la parole en Belgique, à savoir Lernout & Hauspie (L&H). Fondée en 1987 par Jo Lernout et Paul Hauspie, elle était domiciliée à Ypres. Après un début difficile, L&H devenait un fleuron industriel en Flandre et elle faisait l’acquisition de plusieurs compétiteurs comme Berkeley Speech Technologies, Dictaphone et Dragon Systems. A cause d’une fraude des dirigeants, l’entreprise a fait faillite en 2001 et toutes les technologies ont été achetées par Nuance Communications. Les procès afférents ne sont pas encore terminés.

Cour d’appel de Gand en mars 2017 pour traiter le volet civil de l’affaire Lernout & Hauspie. Plus de 15.000 parties civiles demandent un dédommagement.

On trouve encore aujourd’hui les voix synthétiques L&H Michelle et à L&H Michel dans des anciens logiciels bureautiques.

6.3.6. Nagoya Institute of Technology ( > 1995 )

L’université de technologie de Nagoya est un établissement japonais d’enseignement supérieur, issue en 1949 de l’unification de plusieurs établissements, dont la composante la plus ancienne date de 1905. Au niveau de la recherche l’université comprend 17 laboratoires, parmi eux celui du traitement de la parole et des langues, dirigé par le professeur Tokuda Keiichi.

Il a été introduit dans le chapitre 6.3.4. du présent historique en sa qualité de co-organisateur des Blizzard Challenges, ensemble avec Alan W. Black. En 1995 il a publié un  article concernant l’application des modèles de Markov Cachés (HMM : Hidden Markov Models) pour la synthèse de la parole.

Page de présentation du Blizzard Challenge co-organisé par Tokuda Keiichi

En 2012 Tokuda Keiichi a été promu professeur honoraire à l’université d’Edimbourg. Deux ans plus tard il reçoit le prix de réussite pour ses travaux sur la synthèse vocale basée sur des modèles statistiques de la part du IEICE (Institute of Electronics, Information and Communication Engineers) au Japon.

Tokuda Keiichi est un des contributeurs principaux au projets HTS (HMM/DNN-based Speech Synthesis System), HTK (Hidden Markov Model Toolkit) et SPTK (Speech Signal Processing Toolkit).

6.3.7. Université de la Sarre ( > 2000)

Le lecteur averti se rappelle que l’Université de la Sarre a été mentionné dans le chapitre 6.1.2. concernant Wolfgang von Kempelen. Cette université a été fondée en 1948 et elle a une longue tradition dans la linguistique informatique. Ajourd’hui les activités dans ce domaine sont regroupées dans le département des sciences et technologies du langage (LST) qui travaille en étroite collaboration avec le cluster d’excellence Multimodal Computing and Interaction (M2CI). Un groupe de recherche de cette grappe technologique est l’équipe Multimodal Speech Processing, créée en décembre 2012 et dirigée par Ingmar Steiner. Il a accompli une partie de sa thèse de doctorat au CSTR à Edimbourg.

Ingmar Steiner, avec son groupe de recherche, est en charge de la maintenance et de l’évolution du systéme de synthèse de la parole multilingue MaryTTS (MARY Text-to-Speech). Disponible en source libre sur Github, MaryTTS est actuellement un des systèmes de synthèse de la parole les plus universels et perfomants au niveau mondial. Une démonstration de MaryTTS est disponible sur le web et accessible avec tout navigateur Internet.

Le développement de MaryTTS remonte à 2000. A l’époque c’était l’institut de phonétique de l’Université de la Sarre et le laboratoire des technologies du langage du centre de recherche allemand pour l’intelligence artificielle (DFKI) qui étaient à l’initiative du projet. Marc Schröder et Jürgen Trouvain ont présenté le projet lors du 4ième atelier de travail de l’association internationale des communications vocales (ISCA) qui a eu lieu du 29 août au 1er septembre 2001 à Pertshire en Ecosse. Le DFKI continue à supporter le projet.

MaryTTS : Marc Schöder, Jürgen Trouvain, ISCA 2001 (DFKI)

MaryTTS est programmé en Java et supporte la synthèse par sélection d’unités, la synthèse paramétrique statistique (HMM) et l’apprentissage moyennant des réseaux neuronaux . Au début le système ne comprenait  que les voix MBROLA. Dans la suite l’anglais a été ajouté en utilisant une partie du code du projet à source libre FreeTTS, qui lui même est un portage du projet FLITE de Alan W. Black.

D’autres langues ont été ajoutées et aujourd’hui MaryTTS est le seul système de synthèse de la parole qui supporte le luxembourgeois. Le projet MaryLux a été présenté lors du 5ième congrès de l’IGDD (Internationale Gesellschaft für Dialektologie des Deutschen) qui a eu lieu du 10 au 12 septembre 2015 à l’université du Luxembourg. Les auteurs étaient Ingmar Steiner, Jürgen Trouvain, Judith Manzoni et Peter Gilles. Le projet MaryLux a en outre été présenté le 10 novembre 2015 dans un colloque interne à l’université et en avril 2016 sur le portail sciences.lu.

La voix synthétique de MaryLux est celle de Judith Manzoni. Elle a enregistré en 2014 des textes en luxembourgeois et français, d’une durée de trois heures, qui ont été ensuite traités par les différents outils informatiques du système MaryTTS pour créer le modèle de la voix, avec la méthode de sélection d’unités.

Judith Manzoni lors de la présentation de MaryLux en 2015 (portail sciences.lu)

6.3.8. GAFAM ( > 1995 )

GAFAM est l’acronyme de Google, Apple, Facebook, Amazon et Microsoft. J’ai déjà présenté sur mon site web ces cinq géants du web dans une autre contribution au sujet de l’intelligence artificielle en mars 2017. Microsoft est le doyen dans ce groupe.

Ces cinq sociétés utilisent la synthèse vocale pour donner une voix à leurs assistants personnels qui ne savent pas seulement parler, mais également écouter et comprendre la voix de leur maître.

Dès 1995, Microsoft a développé un interface de synthèse et de reconnaissance de la voix appelé SAPI (Speech Application Programming Interface) pour son système d’exploitation Windows 95. Cet interface a évolué vers la version SAPI 5.4 qui reste compatible avec la version Windows 10 actuelle. En 2014 Microsoft a introduit son assistant personnel intelligent CORTONA qui fait partie de Windows 10.

Apple a été le premier à présenter un assistant personnel avec SIRI le 4 octobre 2011. Tout comme Microsoft, Apple offre un cadre de développement (framework) pour la synthèse et la reconnaissance de la parole.

Facebook est le moins avancé dans l’application de la synthèse vocale dans ses produits. Parmi les domaines de recherche de Facebook se trouve le groupe Natural Language Processing & Speech, mais son assistant virtuel M, lancé en août 2015 et intégré dans son service de messagerie Facebook Messenger, a été arrêté le 19 janvier 2018.

L’assistant personnel intelligent ALEXA et l’enceinte y associée ECHO, annoncés par Amazon en novembre 2014, sont probablement les outils vocaux les plus connus par le grand public. Il est moins connu que Amazon propose aux développeurs dans son portefeuille des services cloud AWS des outils très performants en relation avec la parole : Amazon Polly, un service qui transforme le texte en paroles réalistes, Amazon Lex, un service de reconnaissance automatique de la parole (RAP) et de compréhension du langage naturel (CNL), Amazon Translate, un service de traduction automatique neuronale offrant des traductions linguistiques rapides, Alexa Voice Services, un service de synthèse et reconnaissance vocale et Alexa Skills Kit, un service d’intelligence derrière les appareils de la gamme Amazon Echo.

Dispositif Echo pour Amazon Alexa et dispositif Home pour Google Assistant

Google dispose également d’une large infrastructure cloud avec des services vocaux offerts aux développeurs qu’elle a démarré en avril 2008. Parmi les produits d’intelligence artificiel et d’apprentissage machine se trouvent les services suivants : Cloud Text-to-Speech, Cloud Speech-to Text, Cloud Natural Language API et Cloud Translation API.

Lors de la conférence INTERSPEECH 2017 qui a eu lieu du 20 au 24 août à Stockholm, Google a présenté un nouveau système de synthèse vocale appelé TACOTRON. La publication académique afférente porte les noms de 14 auteurs. En décembre 2017 Google a annoncé sur son blog l’évolution du système vers Tacotron 2 qui produit des résultats qui sont très proches d’une prononciation par un humain. La publication afférente a été publiée en février 2018. La technologie de Tacotron 2 repose sur la superposition de deux réseaux neuronaux : un qui divise le texte en séquences, et transforme chacune d’elles en spectrogrammes MEL et un autre qui génère des fichiers sonores (WaveNet).

Architecture Tacotron 2 : le spectre Mel rappelle les spectrogrammes utilisés par Cooper et Lawrence

A l’heure actuelle Tacotron 2 est le système de synthèse vocale le plus performant (et le plus complexe). Le code de Google est propriétaire, mais de nombreux développeurs essayent de créer leurs propres applications à libre source sur base des articles académiques publiés par Google. Une recherche sur le site de développement Github, avec la clé tacotron, fournit en janvier 2019 152 résultats.

Il reste à signaler que l’assistant personnel de Google s’appelle Google Assistant et que la famille des enceintes y connectées est nommée Google Home. Ces outils ont été annoncés par Google en mai 2016 pour concurrencer Amazon Alexa et Echo.

6.3.9. Les autres ( > 1950)

A côté des cinq entreprises GAFAM in convient de mentionner quelques autres géants qui sont actives dans le domaine de la synthèse vocale, à commencer par Baidu, IBM et AT&T.

Baidu, le géant chinois de l’Internet, a ouvert en 2013 un laboratoire de recherche en intelligence artificielle dans la Silicon Valley et s’est lancé dans un travail sur la synthèse de la parole. Parmi les projets afférents figurent ClariNet et DeepVoice 3. L’apprentissage de DeepVoice 3, présenté fin 2017, se faisait moyennant des échantillons vocaux d’une durée totale de 800 heures, enregistrés par 2.400 différentes personnes. Baidu affirme pouvoir cloner maintenant la voix de n’importe quelle personne avec un échantillon de quelques secondes moyennant ce système.

La solution IBM Watson fournit un ensemble de composants et de technologies d’intelligence artificielle avec synthèse vocale pour développer des assistants virtuels qui comprennent le langage naturel et interagissent avec les clients comme le ferait un humain et ceci dans plusieurs langues.

AT&T (American Telephone and Telegraph Company) est issue en 1885 de l’entreprise Bell Telephone Company, fondée par Alexandre Graham Bell en 1877. Elle fut la plus grande entreprise mondiale de télécommunications et profita d’un long monopole, appelé Bell System.

En 1925 AT&T créa l’unité de recherche de développement Bell Labs dont les activités dans le domaine la synthèse la parole ont été mises en évidence dans le présent historique.

En 1982 le système Bell a été démantelé. AT&T a été rachetée par une de ses filiales qui reprit le nom de AT&T Inc.

AT&T commercialisait les produits vocaux développés par les laboratoires Bell. D’une part il s’agissait de la plateforme AT&T Natural Voices, lancée en 2001. Les voix synthétiques afférentes sont utilisées dans de nombreux systèmes de synthèse de la parole. Depuis 2011 la vente de ces voix est cédée à des partenaires comme Wizzard Software.

Courriel reçu de AT&T en mars 2016 pour annoncer la suppression de mon compte de développement sur sa plateforme vocale

D’autre part il s’agissait de la plateforme de reconnaissance et de synthèse de la parole Watson, à ne pas confondre avec la technologie du même nom d’IBM. En 2014 AT&T a vendu cette plateforme à Interactions Corporation et a cessé ses propres activités dans ce domaine.

Quant aux laboratoires Bell, ils sont passés en 1996 à Lucent Technologies, 10 ans plus tard à Alcatel-Lucent et en 2016 à Nokia pour devenir les Nokia Bell Labs.

7. Le mot de la fin

Les recherches que j’ai effectuées pour le présent historique m’ont confirmé que la synthèse de la parole est une technologie, et j’estime même que c’est la seule, qui a fasciné les humains depuis l’antiquité jusqu’à nos jours. Les progrès réalisés étaient graduels. Ce n’est que récemment que l’apprentissage profond a permis de perfectionner la synthèse vocale de telle manière qu’il est aujourd’hui Impossible de faire la distinction entre une voix enregistrée et une voix synthétisée pour une même personne, ce qui va causer pas mal de problèmes dans l’avenir.

Un autre aspect à relever est la nostalgie de la génération 68, dont une partie a eu le privilège de posséder un ordinateur personnel dans la période de fin 1970 à fin 1980. Comme ces ordinateurs disposaient en général d’une interface de synthèse de la parole distinctive, les anciens propriétaires associent cette voix synthétique à la personnalité de leur premier ordinateur. Les musées virtuels d’anciens calculateurs et d’ordinateurs en témoignent parfaitement. Une société canadienne, Plogue, vient de créer des applications multiplateformes qui permettent de recréer la voix de ces équipements et elle a un grand succès avec ces produits.

Cette société a rendu un hommage aux principaux chercheurs de l’époque, actifs dans la synthèse vocale, avec son produit ChipSpeech, qui permet de simuler la voix des anciens synthétiseurs. J’ai assemblé la figure ci-dessous qui montre les caractères définis pour sélectionner les différentes voies disponibles dans cette application.

Caractères ChipSpeech (de gauche à droite et de haut en bas) : Bert Gotrax -> Richard Gagnon; Voder -> Homer Dudley; Dee Klatt -> Dennis Klatt; Otto Mozer -> Forrest Mozer; SAM -> SoftVoice Inc.; Terminal 99 -> Larry Brantingham, Paul S. Breedlove, Richard H. Wiggins, and Gene A. Frantz


Toutefois, à côté des inventeurs célèbres qui ont été présentés dans le présent historique, il y a de nombreux chercheurs qui étaient engagés dans le domaine de la synthèse vocale, mais qui sont tombés dans l’oubli. Pour faire leur connaissance, il suffit de regarder sur la plateforme des brevets Google ou dans la liste des auteurs de publications qui n’ont jamais été citées. Je rends donc également hommage à ces femmes et hommes qui n’ont pas réussi à obtenir la notoriété méritée. Un deuxième constat : je n’ai presque pas trouvé de pionnière dans le domaine de la synthèse vocale. S’il y a eu des femmes qui ont participé à des projets de recherche, leur nom figure toujours en dernière position dans les publications.

Il ne me reste plus qu’à établir la bibliographie des documents qui m’ont servi de source pour le présent historique et dont une partie n’a pas été référencée dans le texte.

8. Bibliographie

8.1. Outils et logiciels

8.2. Vidéos

8.3. Livres

8.4. Articles

8.4.1. Têtes parlantes

8.4.2. Machines parlantes

8.4.3. Appareil vocal

8.4.4. Orgues et Musique

8.4.5 Kratzenstein et von Kempelen

8.4.6. Willis, Wheatstone et Riesz

8.4.7. Faber

8.47. Henry, Bell et Edison

8.4.8. Dudley

8.4.9. Cooper, Fant, Lawrence et Holmes

8.4.10. Mozer et TSI Speak+

8.4.11. Gagnon et Votrax

8.4.12. TSI speak et Speak & Spell

8.4.13. Dennis Klatt

8.4.14. Nouvelles Technologies

8.4.15. Traitement des signaux

8.4.16. Synthèse de la parole

Installation de Festival TTS sur Debian

Last update : April 9, 2015

Suite à l’installation du système Festival TTS sur mon MacBook Air il y a trois mois, je viens de l’installer sur mon laptop avec système d’exploitation Debian 7 Linux. Les différentes archives du système Festival ont été téléchargées et décomprimées avec ARC.

Décompression d'un archive Festival

Décompression d’une archive Festival

J’ai suivi ensuite la même procédure que sur Mac OSX, à savoir

  • création d’un répertoire Festival-TTS sur le desktop avec les sous-répertoires festival, speech_tools et festvox
  • compilation des programmes dans l’ordre speech_tools, festival, festvox
  • installation des voix et dictionnaires dans les sous-répertoires lib/voices et lib/dicts du répertoire festival

Configuration du

Configuration du programme speech_tools

La compilation du programme speech_tools s’est arrêtée avec les messages d’erreur

/usr/bin/ld: cannot find -lcurses
/usr/bin/ld: cannot find -lncurses

L’installation de la bibliothèque libncurses5-dev a réglé ce problème. La suite de la compilation s’est passée sans autres erreurs, abstraction faite de plusieurs avertissements concernant des variables spécifiées, mais non utilisées .

Il a été possible de démarrer le programme Festival avec la commande

/Desktop/Festival-TTS/festival/bin/festival

mais la synthèse d’une phrase de test

festival> (SayText "Hello, how are you")

a produit l’erreur

Linux: can't open /dev/dsp

Parmi les remèdes trouvés sur le net, j’ai opté pour la solution

apt-get install oss-compat
modprobe snd-pcm-oss

qui a été couronnée de succès.

Il ne restait plus que la configuration des différents chemins d’accès pour mettre le système Festival tout à fait opérationnel. Les commandes suivantes ont été ajoutées au script ~/.bashrc :

FESTIVALDIR="/home/mbarnig/Desktop/Festival-TTS/festival"
FESTVOXDIR="/home/mbarnig/Desktop/Festival-TTS/festvox"
ESTDIR="/home/mbarnig/Desktop/Festival-TTS/speech_tools"
PATH="$FESTIVALDIR/bin:$PATH"
PATH="$ESTDIR/bin:$PATH"
export PATH
export FESTIVALDIR
export FESTVOXDIR
export ESTDIR

Pat

Variables d’environnement et PATH du système Festival

Ca marche!

Lancement

Lancement du programme Festival TTS sur Debian Linux Wheezy

Le chargement respectivement la compilation d’une nouvelle voix, comme le luxembourgeois, ne réussit que si la voix anglaise kal_diphon est présente, si non une erreur “unbound variable rfs_info” se produit.

Speech Utterance

Last update : April 2, 2015

Utterance Definition

In linguistics an utterance is a unit of speech, without having a precise definition. It’s a bit of spoken language. It could be anything from “Baf!” to a full sentence or a long speech. The corresponding unit in written language is text.

Phonetically an utterance is a unit of speech bounded (preceded and followed) by silence. Phonemes, phones, morphemes,  words etc are all considered items of an utterance.

In orthography, an utterance begins with a capital letter and ends in a period, question mark, or exclamation point.

In Speech Synthesis (TTS) the text that you wish to be spoken is contained within an utterance object (example : SpeechSynthesisUtterance). The Festival TTS system uses the utterance as the basic object for synthesis. Speech synthesis is the process that applies a set of programs to an utterance.

The main stages to convert textual input to speech output are :

  1. Conversion of the input text to tokens
  2. Conversion of tokens to words
  3. Conversion of words to strings of phonemes
  4. Addition of prosodic information
  5. Generation of a waveform

In Festival each stage is executed in several steps. The number of steps and what actually happens may vary and is dependent on the particular language and voice selected. Each of the steps is achieved by a Festival module which will typically add new information to the utterance structure. Swapping of modules is possible.

Festival provides six synthesizer modules :

  • 2 diphone engines : MBROLA and diphone
  • 2 unit selection engines : clunits and multisyn
  • 2 HMM engines : clustergen and HTS

Festival Utterance Architecture

A very simple utterance architecture is the string model where the high level items are replaced sequentially by lower level items, from tokens to phones. The disadvantage of this architecture is the loss of information about higher levels.

Another architecture is the multi-level table model with one hierarchy. The problem is that there are no explicit connections between levels.

Festival uses a Heterogeneous Relation Graph (HRG). This model is defined as follows :

  • Utterances consist of a set of items, representing things like tokens, words, phones,
  • Each item is related by one or more relations to other items.
  • Each item contains a set of features, having each a name and a value.
  • Relations define lists, trees or lattices of items.

The stages and steps to build an utterance in Festival, described in the following chapters, are related to the us-english language and to the clustergen voice cmu_us_slt_cg.

To explore the architecture (structure) of an utterance in Festival, I will analyse the relation-trees created by the synthesis of the text string “253”.

festival> (voice_cmu_us_slt_cg)
cmu_us_slt_cg
festival> (set! utter (SayText "253"))
#<Utterance 0x104c20720>
festival> (utt.relationnames utter)
(Token
 Word
 Phrase
 Syllable
 Segment
 SylStructure
 IntEvent
 Intonation
 Target
 HMMstate
 segstate
 mcep
 mcep_link
 Wave)
festival> (utt.relation_tree utter 'Token)
((("253"
   ((id "_1")
    (name "253")
    (whitespace "")
    (prepunctuation "")
    (token_pos "cardinal")))
  (("two"
    ((id "_2")
     (name "two")
     (pos_index 1)
     (pos_index_score 0)
     (pos "cd")
     (phr_pos "cd")
     (phrase_score -0.69302821)
     (pbreak_index 1)
     (pbreak_index_score 0)
     (pbreak "NB"))))
  (("hundred"
    ((id "_3")
     (name "hundred")
     (pos_index 1)
     (pos_index_score 0)
     (pos "cd")
     (phr_pos "cd")
     (phrase_score -0.692711)
     (pbreak_index 1)
     (pbreak_index_score 0)
     (pbreak "NB"))))
  (("fifty"
    ((id "_4")
     (name "fifty")
     (pos_index 8)
     (pos_index_score 0)
     (pos "nn")
     (phr_pos "n")
     (phrase_score -0.69282991)
     (pbreak_index 1)
     (pbreak_index_score 0)
     (pbreak "NB"))))
  (("three"
    ((id "_5")
     (name "three")
     (pos_index 1)
     (pos_index_score 0)
     (pos "cd")
     (phr_pos "cd")
     (pbreak_index 0)
     (pbreak_index_score 0)
     (pbreak "B")
     (blevel 3))))))
festival> (utt.relation_tree utter 'Word)
((("two"
   ((id "_2")
    (name "two")
    (pos_index 1)
    (pos_index_score 0)
    (pos "cd")
    (phr_pos "cd")
    (phrase_score -0.69302821)
    (pbreak_index 1)
    (pbreak_index_score 0)
    (pbreak "NB"))))
 (("hundred"
   ...
   ...
    (blevel 3)))))
festival> (utt.relation_tree utter 'Phrase)
((("B" ((id "_6") (name "B")))
  (("two"
    ((id "_2")
     (name "two")
     (pos_index 1)
     (pos_index_score 0)
     (pos "cd")
     (phr_pos "cd")
     (phrase_score -0.69302821)
     (pbreak_index 1)
     (pbreak_index_score 0)
     (pbreak "NB"))))
  (("hundred"
    ...
    ...
     (blevel 3))))))
festival> (utt.relation_tree utter 'Syllable)
((("syl" ((id "_7") (name "syl") (stress 1))))
 (("syl" ((id "_10") (name "syl") (stress 1))))
 (("syl" ((id "_14") (name "syl") (stress 0))))
 (("syl" ((id "_19") (name "syl") (stress 1))))
 (("syl" ((id "_23") (name "syl") (stress 0))))
 (("syl" ((id "_26") (name "syl") (stress 1)))))
festival> (utt.relation_tree utter 'Segment)
((("pau" ((id "_30") (name "pau") (end 0.15000001))))
 (("t" ((id "_8") (name "t") (end 0.25016451))))
 (("uw" ((id "_9") (name "uw") (end 0.32980475))))
 (("hh" ((id "_11") (name "hh") (end 0.39506164))))
 (("ah" ((id "_12") (name "ah") (end 0.48999402))))
 (("n" ((id "_13") (name "n") (end 0.56175226))))
 (("d" ((id "_15") (name "d") (end 0.59711802))))
 (("r" ((id "_16") (name "r") (end 0.65382934))))
 (("ax" ((id "_17") (name "ax") (end 0.67743915))))
 (("d" ((id "_18") (name "d") (end 0.75765681))))
 (("f" ((id "_20") (name "f") (end 0.86216313))))
 (("ih" ((id "_21") (name "ih") (end 0.93317086))))
 (("f" ((id "_22") (name "f") (end 1.0023116))))
 (("t" ((id "_24") (name "t") (end 1.0642071))))
 (("iy" ((id "_25") (name "iy") (end 1.1534019))))
 (("th" ((id "_27") (name "th") (end 1.2816957))))
 (("r" ((id "_28") (name "r") (end 1.3449684))))
 (("iy" ((id "_29") (name "iy") (end 1.5254952))))
 (("pau" ((id "_31") (name "pau") (end 1.6754951)))))
festival> (utt.relation_tree utter 'SylStructure)
((("two"
   ((id "_2")
    (name "two")
    (pos_index 1)
    (pos_index_score 0)
    (pos "cd")
    (phr_pos "cd")
    (phrase_score -0.69302821)
    (pbreak_index 1)
    (pbreak_index_score 0)
    (pbreak "NB")))
  (("syl" ((id "_7") (name "syl") (stress 1)))
   (("t" ((id "_8") (name "t") (end 0.25016451))))
   (("uw" ((id "_9") (name "uw") (end 0.32980475))))))
 (("hundred"
   ((id "_3")
    (name "hundred")
    (pos_index 1)
    (pos_index_score 0)
    (pos "cd")
    (phr_pos "cd")
    (phrase_score -0.692711)
    (pbreak_index 1)
    (pbreak_index_score 0)
    (pbreak "NB")))
  (("syl" ((id "_10") (name "syl") (stress 1)))
   (("hh" ((id "_11") (name "hh") (end 0.39506164))))
   (("ah" ((id "_12") (name "ah") (end 0.48999402))))
   (("n" ((id "_13") (name "n") (end 0.56175226)))))
  (("syl" ((id "_14") (name "syl") (stress 0)))
   (("d" ((id "_15") (name "d") (end 0.59711802))))
   (("r" ((id "_16") (name "r") (end 0.65382934))))
   (("ax" ((id "_17") (name "ax") (end 0.67743915))))
   (("d" ((id "_18") (name "d") (end 0.75765681))))))
 (("fifty"
   ((id "_4")
    (name "fifty")
    (pos_index 8)
    (pos_index_score 0)
    (pos "nn")
    (phr_pos "n")
    (phrase_score -0.69282991)
    (pbreak_index 1)
    (pbreak_index_score 0)
    (pbreak "NB")))
  (("syl" ((id "_19") (name "syl") (stress 1)))
   (("f" ((id "_20") (name "f") (end 0.86216313))))
   (("ih" ((id "_21") (name "ih") (end 0.93317086))))
   (("f" ((id "_22") (name "f") (end 1.0023116)))))
  (("syl" ((id "_23") (name "syl") (stress 0)))
   (("t" ((id "_24") (name "t") (end 1.0642071))))
   (("iy" ((id "_25") (name "iy") (end 1.1534019))))))
 (("three"
   ((id "_5")
    (name "three")
    (pos_index 1)
    (pos_index_score 0)
    (pos "cd")
    (phr_pos "cd")
    (pbreak_index 0)
    (pbreak_index_score 0)
    (pbreak "B")
    (blevel 3)))
  (("syl" ((id "_26") (name "syl") (stress 1)))
   (("th" ((id "_27") (name "th") (end 1.2816957))))
   (("r" ((id "_28") (name "r") (end 1.3449684))))
   (("iy" ((id "_29") (name "iy") (end 1.5254952)))))))
festival> (utt.relation_tree utter 'IntEvent)
((("L-L%" ((id "_32") (name "L-L%"))))
 (("H*" ((id "_33") (name "H*"))))
 (("H*" ((id "_34") (name "H*"))))
 (("H*" ((id "_35") (name "H*")))))
festival> (utt.relation_tree utter 'Intonation)
((("syl" ((id "_26") (name "syl") (stress 1)))
  (("L-L%" ((id "_32") (name "L-L%")))))
 (("syl" ((id "_7") (name "syl") (stress 1)))
  (("H*" ((id "_33") (name "H*")))))
 (("syl" ((id "_10") (name "syl") (stress 1)))
  (("H*" ((id "_34") (name "H*")))))
 (("syl" ((id "_19") (name "syl") (stress 1)))
  (("H*" ((id "_35") (name "H*"))))))
festival> (utt.relation_tree utter 'Target)
((("t" ((id "_8") (name "t") (end 0.25016451)))
  (("0" ((id "_36") (f0 101.42016) (pos 0.1)))))
 (("uw" ((id "_9") (name "uw") (end 0.32980475)))
  (("0" ((id "_37") (f0 121.11904) (pos 0.25)))))
 (("hh" ((id "_11") (name "hh") (end 0.39506164)))
  (("0" ((id "_38") (f0 119.19957) (pos 0.30000001)))))
 (("ah" ((id "_12") (name "ah") (end 0.48999402)))
  (("0" ((id "_39") (f0 123.81679) (pos 0.44999999)))))
 (("d" ((id "_15") (name "d") (end 0.59711802)))
  (("0" ((id "_40") (f0 117.02986) (pos 0.60000002)))))
 (("ax" ((id "_17") (name "ax") (end 0.67743915)))
  (("0" ((id "_41") (f0 110.17942) (pos 0.85000008)))))
 (("f" ((id "_20") (name "f") (end 0.86216313)))
  (("0" ((id "_42") (f0 108.59299) (pos 1.0000001)))))
 (("ih" ((id "_21") (name "ih") (end 0.93317086)))
  (("0" ((id "_43") (f0 115.24371) (pos 1.1500001)))))
 (("t" ((id "_24") (name "t") (end 1.0642071)))
  (("0" ((id "_44") (f0 108.76601) (pos 1.3000002)))))
 (("iy" ((id "_25") (name "iy") (end 1.1534019)))
  (("0" ((id "_45") (f0 102.23844) (pos 1.4500003)))))
 (("th" ((id "_27") (name "th") (end 1.2816957)))
  (("0" ((id "_46") (f0 99.160072) (pos 1.5000002)))))
 (("iy" ((id "_29") (name "iy") (end 1.5254952)))
  (("0" ((id "_47") (f0 90.843689) (pos 1.7500002))))
  (("0" ((id "_48") (f0 88.125809) (pos 1.8000003))))))
festival> (utt.relation_tree utter 'HMMstate)
((("pau_1" ((id "_49") (name "pau_1") (statepos 1) (end 0.050000001)*
 (("pau_2" ((id "_50") (name "pau_2") (statepos 2) (end 0.1))))
 (("pau_3" ((id "_51") (name "pau_3") (statepos 3) (end 0.15000001)*
 (("t_1" ((id "_52") (name "t_1") (statepos 1) (end 0.16712391))))
 (("t_2" ((id "_53") (name "t_2") (statepos 2) (end 0.23217295))))
 (("t_3" ((id "_54") (name "t_3") (statepos 3) (end 0.25016451))))
 (("uw_1" ((id "_55") (name "uw_1") (statepos 1) (end 0.2764155))))
 (("uw_2" ((id "_56") (name "uw_2") (statepos 2) (end 0.3001706))))
 (("uw_3" ((id "_57") (name "uw_3") (statepos 3) (end 0.32980475))))
 (("hh_1" ((id "_58") (name "hh_1") (statepos 1) (end 0.3502973))))
 ...
 ...
 (("iy_1" ((id "_100") (name "iy_1") (statepos 1) (end 1.3995106))))
 (("iy_2" ((id "_101") (name "iy_2") (statepos 2) (end 1.4488922))))
 (("iy_3" ((id "_102") (name "iy_3") (statepos 3) (end 1.5254952))))
 (("pau_1" ((id "_103") (name "pau_1") (statepos 1) (end 1.5754951)*
 (("pau_2" ((id "_104") (name "pau_2") (statepos 2) (end 1.6254952)*
 (("pau_3" ((id "_105") (name "pau_3") (statepos 3) (end 1.6754951)*
festival> (utt.relation_tree utter 'segstate)
((("pau" ((id "_30") (name "pau") (end 0.15000001)))
  (("pau_1" ((id "_49") (name "pau_1") (statepos 1) (end 0.050000001)
  (("pau_2" ((id "_50") (name "pau_2") (statepos 2) (end 0.1))))
  (("pau_3" ((id "_51") (name "pau_3") (statepos 3) (end 0.15000001)*
 (("t" ((id "_8") (name "t") (end 0.25016451)))
  (("t_1" ((id "_52") (name "t_1") (statepos 1) (end 0.16712391))))
  (("t_2" ((id "_53") (name "t_2") (statepos 2) (end 0.23217295))))
  (("t_3" ((id "_54") (name "t_3") (statepos 3) (end 0.25016451)))))
 (("uw" ((id "_9") (name "uw") (end 0.32980475)))
  (("uw_1" ((id "_55") (name "uw_1") (statepos 1) (end 0.2764155))))
  (("uw_2" ((id "_56") (name "uw_2") (statepos 2) (end 0.3001706))))
  (("uw_3" ((id "_57") (name "uw_3") (statepos 3) (end 0.32980475))))
 ...
 ...
 (("iy" ((id "_29") (name "iy") (end 1.5254952)))
  (("iy_1" ((id "_100") (name "iy_1") (statepos 1) (end 1.3995106))))
  (("iy_2" ((id "_101") (name "iy_2") (statepos 2) (end 1.4488922))))
  (("iy_3" ((id "_102") (name "iy_3") (statepos 3) (end 1.5254952))*
 (("pau" ((id "_31") (name "pau") (end 1.6754951)))
  (("pau_1" ((id "_103") (name "pau_1") (statepos 1) (end 1.5754951)*
  (("pau_2" ((id "_104") (name "pau_2") (statepos 2) (end 1.6254952)*
  (("pau_3" ((id "_105") (name "pau_3") (statepos 3) (end 1.6754951)*
festival> (utt.relation_tree utter 'mcep)
((("pau_1"
   ((id "_106")
    (frame_number 0)
    (name "pau_1")
    (clustergen_param_frame 19315))))
 (("pau_1"
   ((id "_107")
    (frame_number 1)
    (name "pau_1")
    (clustergen_param_frame 19315))))
 (("pau_1"
   ((id "_108")
    (frame_number 2)
    (name "pau_1")
    (clustergen_param_frame 19315))))
 (("pau_1"
   ((id "_109")
    (frame_number 3)
    (name "pau_1")
    (clustergen_param_frame 19315))))
 ...
 ...
 (("t_1"
   ((id "_137")
    (frame_number 31)
    (name "t_1")
    (clustergen_param_frame 26089))))
 (("t_1"
   ((id "_138")
    (frame_number 32)
    (name "t_1")
    (clustergen_param_frame 26085))))
 (("t_1"
   ((id "_139")
    (frame_number 33)
    (name "t_1")
    (clustergen_param_frame 26085))))
 (("t_2"
   ((id "_140")
    (frame_number 34)
    (name "t_2")
    (clustergen_param_frame 26642))))
...
...
 (("uw_1"
   ((id "_157")
    (frame_number 51)
    (name "uw_1")
    (clustergen_param_frame 27595))))
 ...
 (("pau_3"
   ((id "_438")
    (frame_number 332)
    (name "pau_3")
    (clustergen_param_frame 22148))))
 (("pau_3"
   ((id "_439")
    (frame_number 333)
    (name "pau_3")
    (clustergen_param_frame 22148))))
 (("pau_3"
   ((id "_440")
    (frame_number 334)
    (name "pau_3")
    (clustergen_param_frame 22148))))
 (("pau_3"
   ((id "_441")
    (frame_number 335)
    (name "pau_3")
    (clustergen_param_frame 22365)))))
festival> (utt.relation_tree utter 'mcep_link)
((("pau_1" ((id "_49") (name "pau_1") (statepos 1) (end 0.050000001).
  (("pau_1"
    ((id "_106")
     (frame_number 0)
     (name "pau_1")
     (clustergen_param_frame 19315))))
  (("pau_1"
    ((id "_107")
     (frame_number 1)
     (name "pau_1")
     (clustergen_param_frame 19315))))
  (("pau_1"
    ((id "_108")
     (frame_number 2)
     (name "pau_1")
     (clustergen_param_frame 19315))))
  ...
  ...
  (("pau_3"
    ((id "_439")
     (frame_number 333)
     (name "pau_3")
     (clustergen_param_frame 22148))))
  (("pau_3"
    ((id "_440")
     (frame_number 334)
     (name "pau_3")
     (clustergen_param_frame 22148))))
  (("pau_3"
    ((id "_441")
     (frame_number 335)
     (name "pau_3")
     (clustergen_param_frame 22365))))))
festival> (utt.relation_tree utter 'Wave)
((("0" ((id "_442") (wave "[Val wave]")))))
festival>

Notes :
* some parentheses have been deleted in the display for formating reasons
… some content has been deleted to reduce the size of the analyzed code

Results of the code analysis

The number of items created for the string “253” are shown in the following table :

number item id’s
1 token 1
4 word 2-5
1 phrase 6
6 syllable 7, 10, 14, 19, 23, 26
19 segment 8-9, 11-13, 15-18, 20-22, 24-25, 27-31
4 intevent 32-35
13 target 36-48
57 hmmstate 49-105
336 mcep 106-441
1 wave 442

The features associated to the different items are presented in the next table :

item features
token name, whitespace, prepunctuation, token_pos
word name, pos_index, pos_index_score, pos, phr_pos, phrase_score, pbreak_index, pbreak_index_score, pbreak, blevel
phrase name
syllable name, stress
segment name, end
intevent name
target f0, pos
hmmstate name, statepos, end
mcep name, frame_number, clustergen_param_frame
wave Val

The last table shows the relations between the different items in the HRG :

item daughter leaf relation
token word x Token
word syllable SylStructure
phrase word x Phrase
syllable segment x (except silence) SylStructure
syllable intevent x Intonation
segment target x Target
segment hmmstate x segstate
segment mcep x mcep_link

Relations between utterance items

To better understand the relations between utterance items, I use a second example :

festival>
(set! utter (SayText "253 and 36"))
(utt.relation.print utter 'Token)

Tok

Festival SayText

There are 3 tokens. The Token relation is a list of trees where each root is the white space separated tokenized object from the input character string and where the daughters are the list of words associated with the tokens. Most often it is a one to one relationship, but in the case of digits a token is associated with several words. The following command shows the Token tree with the daughters :

(utt.relation_tree utter 'Token)

Festival Token_tree

Festival Token_tree

We can check that the word list corresponds to the Token tree list :

(utt.relation.print utter 'Word)

Festival Word List

Festival Word List

To access the second word of the first token we can use two methods :

(item.name (item.daughter2 (utt.relation.first utter 'Token)))

or

(item.name (item.next (utt.relation.first utter 'Word)))

tok

Festival access methods to word item

TTS stages and steps

In the next chapters the different stages and steps executed to synthesize a text string are described with more details. In the first step a simple and a complex utterance of type Text are created :

(set! simple_utt (Utterance Text 
"The quick brown fox jumps over the lazy dog"))
(set! complex_utt (Utterance Text
"Mr. James Brown Jr. attended flight No AA4101 to Boston on
Friday 02/13/2014."))

The complex utterance named complex_utt is used in the following examples.

1. Text-to-Token Conversion

Text

Text is a string of characters in ASCII or ISO-8850 format. Written (raw) text usually contains also numbers, names, abbreviations, symbols, punctuation etc which must be translated into spoken text. This process is called Tokenization. Other terms used are (lexical) Pre-Processing, Text Normalization or Canonicalization. To access the items and features of the defined utterance named complex_utt in Festival we use the following modules :

festival> (Initialize complex_utt) ; Initialize utterance
festival> (utt.relationnames complex_utt) ; show created relations

Festival Utterance Initialization

Festival Utterance Initialization

The result nil indicates that there exist not yet a relation inside the text-utterance.

Tokens

The second step is the Tokenization which consists in the conversion of the input text to tokens. A token is a sequence of characters where whitespace and punctuation are eliminated. The following Festival command is used to convert raw text to tokens and to show them :

festival> (Text complex_utt) ; convert text to tokens
festival> (utt.relationnames complex_utt) ; check new relations
festival> (utt.relation.print complex_utt 'Token) ; display tokens

Festival Text Module to convert raw text to tokens

Festival Text Module to convert raw text to tokens

There are several methods to access individual tokens :

festival> (utt.relation.first complex_utt 'Token) ; returns 1st token
festival> (utt.relation.last complex_utt 'Token) ; returns last token
festival> (utt.relation_tree complex_utt 'Token) ; returns token tree

Festival Token Access

Festival Token Access

This utt.relation_tree method can also be applied to other relations than ‘Tokens.

2. Token-to-Word Conversion

Words

In linguistics, a word is the smallest element that may be uttered in isolation with semantic or pragmatic content. To convert the isolated tokens to words, we use the Festival commands :

festival> (Token complex_utt) ; token to word conversion
festival> (utt.relationnames complex_utt) ; check new relations
festival> (utt.relation.print complex_utt 'Word) ; display words

Festival Token Module to convert tokens to words

Festival Token Module to convert tokens to words

The rules to perform the token to word conversion are specified in the Festival script token.scm.

POS

Part-of-Speech (POS) Tagging is related to the Token-to-Word conversion. POS is also called grammatical tagging or word-category disambiguation. It’s the process of marking up a word in a text as corresponding to a particular part of speech, based on both its definition, as well as its context (identification of words as nouns, verbs, adjectives, adverbs, etc.)

To do the POS tagging, we use the commands

festival> (POS complex_utt) ; Part of Speech tagging
festival> (utt.relationnames complex_utt) ; check new relations
festival> (utt.relation.print complex_utt 'Word) ; display words

The relation check shows that no new relation was created with the POS method. There are however new features which have been added to the ‘Word relation.

Festival POS Module to tag the words

Festival POS Module to tag the words

The new features are :

  • pos_index n
  • pos_index_score m
  • pos xx

Phrase

The last step of the Token-to-Word conversion is the phrasing. This process determines the places where phrase boundaries should be inserted. Prosodic phrasing in TTS makes the whole speech more understandable. The phrasing is launched with the following commands :

festival> (Phrasify complex_utt) ;
festival> (utt.relationnames complex_utt) ; check new relations
festival> (utt.relation.print complex_utt 'Phrase) ; display breaks

Festival Phrasify Module to insert boundaries

Festival Phrasify Module to insert boundaries

The result can be seen in new attributes in the Word relation:

festival> (utt.relation.print complex_utt 'Word)
  • phr_pos xx
  • phrase_score nn
  • pbreak_index n
  • pbreak_index_score m
  • pbreak yy  (B for small breaks, BB is for big breaks, NB for no break)
  • blevel p

utt6a

Festival Word list after phrasing (click to enlarge)

3. Word-to-Phoneme Conversion

The command

festival> (Word complex_utt)

generates 3 new relations : syllables, segments and SylStructure.

utt7

Festival relations generated by the Word method

Segment

Segments and phones are synonyms.

festival> (utt.relation.print complex_utt 'Segment)

utt9

Festival segments = phones

Syllable

Consonants and vowels combine to make syllables. They are often considered the phonological building blocks of words, but there is no universally accepted definition for a syllable. An approximate definition is : a syllable is a vowel sound together with some of the surrounding consonants closely associated with it. The general structure of a syllable consists of three segments :

  • Onset : a consonant or consonant cluster
  • Nucleus : a sequence of vowels or syllabic consonant
  • Coda : a sequence of consonants

Nucleus and coda are grouped together as a Rime. Prominent syllables are called accented; they are louder, longer and have a different pitch.

The following Festival command shows the syllables of the defined utterance.

festival> (utt.relation.print complex_utt 'Syllable)

utt8

Festival syllables

SylStructure

Words, segments and syllables are related in the HRG trought the SylStructure. The command

festival> (utt.relation.print complex_utt 'SylStructure)

prints these related items.

utt10 (click to enlarge)

Festival SylStructure  (click to enlarge)

4. Prosodic Information Addition

Besides the phrasing with break indices, additional prosodic components can be added to speech synthesis to improve the voice quality. Some of these elements are :

  • pitch accents (stress)
  • final boundary tones
  • phrasal tones
  • F0 contour
  • tilt
  • duration

Festival supports ToBI, a framework for developing community-wide conventions for transcribing the intonation and prosodic structure of spoken utterances in a language variety.

The process

festival> (Intonation complex_utt)

generates two additional relations : IntEvent and Intonation

utt11

Festival prosodic relations

IntEvent

The command

festival> (utt.relation.print complex_utt 'IntEvent)

prints the IntEvent items.

utt12

Festival IntEvent items

The following types are listed :

  • L-L% : low boundary tone
  • H* : peak accent
  • !H* : downstep high
  • L+H* : bitonal accent, rising peak

Intonation

The command

festival> (utt.relation.print complex_utt 'Intonation)

prints the Intonation items.

utt13

Festival Intonation items

Only the syllables with stress are displayed.

Duration

The process

festival> (Duration complex_utt)

creates no new relations and I have not seen any new items or features in other relations.

utt14

utt14

Target

The last process in the prosodic stage

festival> (Int_Targets complex_utt)

generates the additional relation Target.

utt15

Festival relations after the Int_Targets process

The command

festival> (utt.relation.print complex_utt 'Target)

prints the target items.

Festival clustergen targets

Festival clustergen targets

The unique target features are the segment name and the segment end time.

5. Waveform Generation

Wave

The process

festival> (Wave_Synth complex_utt)
festival> (utt.relation.print complex_utt 'Wave)

generates five new relations :

  • HMMstate
  • segstate
  • mcep
  • mcep_links
  • Wave

Festival

Festival Wave relations for clustergen voice

In the next chapters we use the method

(utt.relation.print complex_utt 'Relation)

to display the relations and features specific to the diphone voice.

Relation ‘HMMstate

HMMstates for clustergen voice

HMMstates for Festival clustergen voice

Relation ‘segstate

segstates for

segstates for Festival clustergen voice

Relation ‘mcep

mcep

mcep features for Festival clustergen voice

Relation ‘mcep_links

mcep_link

mcep_links relation for Festival clustergen voice

Relation ‘Wave

wave

Wave relation for Festival clustergen voice

Diphone Voice Utterance

If we use a diphone voice (e.g. the default kal_diphone voice) instead of the clustergen voice, the last step of the prosodic stage (No 4) and the complete wave-synthesis stage (No 5) provide different relations and features.

We use the Festival method “SayText”, a combination of the above presented processes

  • Initialize utt
  • Text utt
  • Token utt
  • POS utt
  • Phrasify utt
  • Word utt
  • Intonation utt
  • Duration utt
  • Int_Targets utt
  • Wave_Synt utt

to create the same complex utterance as in the first example :

festival>
(set! complex_utt (SayText "Mr. James Brown Jr. attended flight 
No AA4101 to Boston on Friday 02/13/2014."))
(utt.relationnames complex_utt)

Here are the results :

clun

Utterance relations for a Festival diphone voice

In the next chapters we use the method

(utt.relation.print complex_utt 'Relation)

to display the relations and features specific to the diphone voice.

Relation ‘Target

utt16

Relation Target for diphone voice

Relation ‘Unit

utt18

Relation Unit for diphone voice (click to enlarge)

Relation ‘SourceCoef

utt19

Relation ‘SourceCoef for diphone voice

Relation ‘fo

utt20

Relation f0 for diphone voice

Relation ‘TargetCoef

utt21

Relation TargetCoef for diphone voice

Relation ‘US_map

utt22

Relation US_map for diphone voice

Relation ‘Wave

utt23

Relation Wave for diphone voice

Playing and saving the diphone voice utterance :

utt24

Playing and saving a synthesized Festival utterance

Diphone voice utterance shown in Audacity :

utt_wave

Display of a synthesized Festival utterance

Clunits Voice Utterance

What is true for the diphone voice is also ture for a clunits voice. The last step of the prosodic stage (No 4) and the complete wave-synthesis stage (No 5) generate different relations and features. As an example we use a swedish clunits voice :

clu1

Relations for Festival clunits voice

Relation ‘Target

clu4

Relation Target for Festival clunits voice  (click to enlarge)

Relation ‘Unit

clu3

Relation unit for Festival clunits voice  (click to enlarge)

Relation ‘SourceSegments

clu2

Relation SourceSegments for Festival clunits voice

That’s all.

Festival uniphone voice creation

Referring to my recent post about Festival, I am glad to announce that I was successful in building and testing a new uniphone voice (english) with my own prompt recordings. The goal is to set up my system to create a luxembourgish synthetic voice for the Festival package.

The list of the different steps is shown below :

• (creation of the voice directory mbarnig_en_marco)
• $FESTVOXDIR/src/unitsel/setup_clunits mbarnig en marco uniphone
• (define a phoneset)
• (define a lexicon)
• festival -b festvox/build_clunits.scm '(build_prompts_waves 
"etc/uniphone.data")'
• (uncomment the line USE_SOX=1 in the script prompt_them)
• ./bin/prompt_them etc/uniphone.data 
• ./bin/make_labs prompt-wav/*.wav 
• festival -b festvox/build_clunits.scm '(build_utts 
"etc/uniphone.data")' 
• (copy etc/uniphone.data into etc/txt.done.data)
• ./bin/make_pm_wave wav/*.wav
• ./bin/make_mcep wav/*.wav
• festival -b festvox/build_clunits.scm '(build_clunits 
"etc/uniphone.data")'
• (copy data in Festival voice directory)
• festival> (voice_mbarnig_en_marco_clunits)
• festival> (SayText "Hello Marco, how are you?")

1. Voice Folder

First I created a new voice folder mbarnig_en_marco inside the Festival_TTS/festvox/ directory and opened a terminal window inside this new folder.

2. Clunits Setup

I launched the script

$FESTVOXDIR/src/unitsel/setup_clunits mbarnig en marco uniphone

to construct the voice folder structure and copy there the template files for voice building.
The arguments of the setup script setup_clunits are :

  • institution : mbarnig
  • language : en
  • speaker : marco
  • standard prompt list : uniphone

setup

Festival : setup_clunits

The following folders are created inside the voice directory mbarnig_en_marco :

  1. bin
  2. cep
  3. emu
  4. etc
  5. f0
  6. festival
  7. festvox
  8. group
  9. lab
  10. lar
  11. lpc
  12. mcep
  13. phr
  14. pm
  15. pm_lab
  16. prompt_cep
  17. prompt_lab
  18. prompt_utt
  19. prompt_wav
  20. recording
  21. scratch
  22. syl
  23. versions
  24. wav
  25. wrd

The following programs are copied into the 1sr folder (mbarnig_en_marco/bin)  :

  1. add_noise
  2. contour_powernormalize
  3. do_build
  4. find_db_duration
  5. find_num_available_cpu
  6. find_powercontours
  7. find_poerfactors
  8. get_lars
  9. get_wavs
  10. make_cmm
  11. make_dist
  12. make_f0
  13. make_labs
  14. make_lpc
  15. make_mcep
  16. make_pm
  17. make_pm_fix
  18. make_pm_pmlab
  19. make_pm_wave
  20. make_pmlab_pm
  21. make_samples
  22. prompt_them
  23. prune_middle_silence
  24. prune_silence
  25. reduce_prompts
  26. simple_powernormalize
  27. sphinx_lab
  28. sphinxtrain
  29. synthfile
  30. traintest
  31. ws

The following files are created inside the 4th folder (mbarnig_en_marco/etc) :

  • emu_f0.tpl
  • emu_hier.tpl
  • emu_lab.tpl
  • emu_pm.tpl
  • uniphone.data
  • voice.defs
  • ws_festvox.conf

The following sub-folders (most empty) are created inside the 6th folder (mbarnig_en_marco/festival) :

  • clunits, including a file all.desc
  • coeffs
  • disttabs
  • dur
  • f0
  • feats
  • phrbrk
  • trees
  • utts

The following scripts are created inside the 7th folder (mbarnig_en_marco/festvox) :

  • build_clunits.scm
  • build_st.scm
  • mbarnig_en_marco_clunits.scm
  • mbarnig_en_marco_duration.scm
  • mbarnig_en_marco_durdata.scm
  • mbarnig_en_marco_f0model.scm
  • mbarnig_en_marco_intonation.scm
  • mbarnig_en_marco_lexicon.scm
  • mbarnig_en_marco_other.scm
  • mbarnig_en_marco_phoneset.scm
  • mbarnig_en_marco_phrasing.scm
  • mbarnig_en_marco_tagger.scm
  • mbarnig_en_marco_tokenizer.scm

The other listed folders are empty.

The file uniphone.data in the mbarnig_en_marco/etc folder contains the following minimal prompt-set :

( uniph_0001 "a whole joy was reaping." )
( uniph_0002 "but they've gone south." )
( uniph_0003 "you should fetch azure mike." )

These 3 sentences contain each of the english phonemes once. The prompt list is coded in the standard Festival data-format. The spaces after the left parantheses are required.

The file voice.defs in the mbarnig_en_marco/etc folder contains the following parameters :

FV_INST=mbarnig
FV_LANG=en
FV_NAME=marco
FV_TYPE=clunits
FV_VOICENAME=$FV_INST"_"$FV_LANG"_"$FV_NAME
FV_FULLVOICENAME=$FV_VOICENAME"_"FV_TYPE

The file ws_festvox.conf in the mbarnig_en_marco/etc folder is automatically generated by WaveSurfer.

Phoneset Definition

The phoneset for the new voice is defined in the script mbarnig_en_marco_phoneset.scm. Referring to the english Festival radio phoneset, I modified the phoneset-script as follows :

;;; Phoneset for mbarnig_en_marco
;;;
(defPhoneSet
mbarnig_en_marco
;;; Phone Features
(;; vowel or consonant
(vc + -)
;; vowel length: short long dipthong schwa
(vlng s l d a 0)
;; vowel height: high mid low
(vheight 1 2 3 0)
;; vowel frontness: front mid back
(vfront 1 2 3 0)
;; lip rounding
(vrnd + - 0)
;; consonant type: stop fricative affricate nasal lateral approximant
(ctype s f a n l r 0)
;; place of articulation: labial alveolar palatal labio-dental
;; dental velar glottal
(cplace l a p b d v g 0)
;; consonant voicing
(cvox + - 0)
)
;; Phone set members
(
;; Note these features were set by awb so they are wrong !!!
(aa + l 3 3 - 0 0 0) ;; father
(ae + s 3 1 - 0 0 0) ;; fat
(ah + s 2 2 - 0 0 0) ;; but
(ao + l 3 3 + 0 0 0) ;; lawn
(aw + d 3 2 - 0 0 0) ;; how
(ax + a 2 2 - 0 0 0) ;; about
(axr + a 2 2 - r a +)
(ay + d 3 2 - 0 0 0) ;; hide
(b - 0 0 0 0 s l +)
(ch - 0 0 0 0 a p -)
(d - 0 0 0 0 s a +)
(dh - 0 0 0 0 f d +)
(dx - a 0 0 0 s a +) ;; ??
(eh + s 2 1 - 0 0 0) ;; get
(el + s 0 0 0 l a +)
(em + s 0 0 0 n l +)
(en + s 0 0 0 n a +)
(er + a 2 2 - r 0 0) ;; always followed by r (er-r == axr)
(ey + d 2 1 - 0 0 0) ;; gate
(f - 0 0 0 0 f b -)
(g - 0 0 0 0 s v +)
(hh - 0 0 0 0 f g -)
(hv - 0 0 0 0 f g +)
(ih + s 1 1 - 0 0 0) ;; bit
(iy + l 1 1 - 0 0 0) ;; beet
(jh - 0 0 0 0 a p +)
(k - 0 0 0 0 s v -)
(l - 0 0 0 0 l a +)
(m - 0 0 0 0 n l +)
(n - 0 0 0 0 n a +)
(nx - 0 0 0 0 n d +) ;; ???
(ng - 0 0 0 0 n v +)
(ow + d 2 3 + 0 0 0) ;; lone
(oy + d 2 3 + 0 0 0) ;; toy
(p - 0 0 0 0 s l -)
(r - 0 0 0 0 r a +)
(s - 0 0 0 0 f a -)
(sh - 0 0 0 0 f p -)
(t - 0 0 0 0 s a -)
(th - 0 0 0 0 f d -)
(uh + s 1 3 + 0 0 0) ;; full
(uw + l 1 3 + 0 0 0) ;; fool
(v - 0 0 0 0 f b +)
(w - 0 0 0 0 r l +)
(y - 0 0 0 0 r p +)
(z - 0 0 0 0 f a +)
(zh - 0 0 0 0 f p +)
(pau - 0 0 0 0 0 0 -)
(h# - 0 0 0 0 0 0 -)
(brth - 0 0 0 0 0 0 -)
)
)
(PhoneSet.silences '(pau))

(define (mbarnig_en_marco::select_phoneset)
 "(mbarnig_en_marco::select_phoneset)
Set up phone set for mbarnig_en_marco."
 (Parameter.set 'PhoneSet 'mbarnig_en_marco)
 (PhoneSet.select 'mbarnig_en_marco)
)

(define (mbarnig_en_marco::reset_phoneset)
 "(mbarnig_en_marco::reset_phoneset)
Reset phone set for mbarnig_en_marco."
 t
)

(provide 'mbarnig_en_marco_phoneset)

Lexicon Creation

Without a lexicon, the result of a building command generates unknown words messages

uni 8

Festival : unknown words without lexicon

The lexicon for the new voice is defined in the script mbarnig_en_marco_lexicon.scm. Referring the the english Festival cmu lexicon, I modified the lexicon-script as follows :

;;; Lexicon, LTS and Postlexical rules for mbarnig_en_marco
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; CMU lexicon for US English
;;;

;;; Load any necessary files here
(require 'postlex)
(setup_cmu_lex)
(define (mbarnig_en_marco::select_lexicon)
 "(mbarnig_lx_marco::select_lexicon)
Set up the lexicon for mbarnig_lx_marco."
(lex.select "cmu")

;; Post lexical rules
(set! postlex_rules_hooks (list postlex_apos_s_check))
(set! postlex_vowel_reduce_cart_tree nil) ; no reduction
)


(define (mbarnig_lx_marco::reset_lexicon)
 "(mbarnig_lx_marco::reset_lexicon)
Reset lexicon information."
 t
)

(provide 'mbarnig_lx_marco_lexicon)

Building Prompts

The second command

festival -b festvox/build_clunits.scm '(build_prompts_waves 
"etc/uniphone.data")'

generates synthesized waveforms to act as prompts and timing cues. The nearest available voice (in this case kal_diphone) is used for synthesizing. The generated files are also used in aligning the spoken data. The -b option (–batch) avoids switching in the interactive Festival mode.

Festival

Festival : build_prompts_waves

The following files are created :

  • folder prompt-lab : files uniph_0001.lab, uniph_0002.lab and uniph_0003.lab
  • folder prompt-utt : files uniph_0001.utt, uniph_0002.utt and uniph_0003.utt
  • folder prompt-wav : files uniph_0001.wav, uniph_0002.wav and uniph_0003.wav

The uniph_xxxx.lab files have the following type of content :

#
0.1100 100 pau
0.2200 100 ax
0.3300 100 hh
0.4400 100 ow
0.5500 100 l
0.6600 100 jh
0.7700 100 oy
0.8800 100 w
0.9900 100 aa
1.1000 100 z
1.2100 100 r
1.3200 100 iy
1.4850 100 p
1.6500 100 ih
1.8150 100 ng
1.9250 100 pau

The uniph_xxxx.utt files have the following type of content :

EST_File utterance
DataType ascii
version 2
EST_Header_End
Features max_id 77 ; type Text ; 
iform "\"a whole joy was reaping.\"" ;
Stream_Items
1 id _1 ; name a ; whitespace "" ; prepunctuation "" ;
2 id _2 ; name whole ; whitespace " " ; prepunctuation "" ;
3 id _3 ; name joy ; whitespace " " ; prepunctuation "" ;
4 id _4 ; name was ; whitespace " " ; prepunctuation "" ;
5 id _5 ; name reaping ; punc . ; whitespace " " ; 
prepunctuation "" ;
6 id _10 ; name reaping ; pbreak B ; pos nil ;
7 id _11 ; name . ; pbreak B ; pos punc ;
8 id _9 ; name was ; pbreak NB ; pos nil ;
9 id _8 ; name joy ; pbreak NB ; pos nil ;
10 id _7 ; name whole ; pbreak NB ; pos nil ;
11 id _6 ; name a ; pbreak NB ; pos dt ;
12 id _12 ; name B ;
13 id _13 ; name syl ; stress 0 ;
14 id _15 ; name syl ; stress 1 ;
15 id _19 ; name syl ; stress 1 ;
16 id _22 ; name syl ; stress 1 ;
17 id _26 ; name syl ; stress 1 ;
18 id _29 ; name syl ; stress 0 ;
19 id _33 ; name pau ; dur_factor 1 ; end 0.11 ;source_end 0.101815 ;
20 id _14 ; name ax ; dur_factor 1 ; end 0.22 ;source_end 0.235802 ;
21 id _16 ; name hh ; dur_factor 1 ; end 0.33 ;source_end 0.322177 ;
22 id _17 ; name ow ; dur_factor 1 ; end 0.44 ;source_end 0.493926 ;
23 id _18 ; name l ; dur_factor 1 ; end 0.55 ;source_end 0.626926 ;
24 id _20 ; name jh ; dur_factor 1 ; end 0.66 ;source_end 0.732624 ;
25 id _21 ; name oy ; dur_factor 1 ; end 0.77 ;source_end 0.900228 ;
26 id _23 ; name w ; dur_factor 1 ; end 0.88 ;source_end 1.06616 ;
27 id _24 ; name aa ; dur_factor 1 ; end 0.99 ;source_end 1.20716 ;
28 id _25 ; name z ; dur_factor 1 ; end 1.1 ;source_end 1.33726 ;
29 id _27 ; name r ; dur_factor 1 ; end 1.21 ;source_end 1.46326 ;
30 id _28 ; name iy ; dur_factor 1 ; end 1.32 ;source_end 1.58507 ;
31 id _30 ; name p ; dur_factor 1.5 ; end 1.485 ;source_end 1.71307 ;
32 id _31 ; name ih ; dur_factor 1.5 ; end 1.65 ;source_end 1.83979 ;
33 id _32 ; name ng ; dur_factor 1.5 ; end 1.815 source_end 2.02441 ;
34 id _34 ; name pau ; dur_factor 1 ; end 1.925 ;source_end 2.36643 ;
35 id _35 ; name Accented ;
36 id _36 ; name Accented ;
37 id _37 ; name Accented ;
38 id _38 ; name Accented ;
39 id _56 ; f0 110 ; pos 1.815 ;
40 id _54 ; f0 126.571 ; pos 1.31 ;
41 id _55 ; f0 116.286 ; pos 1.32 ;
42 id _53 ; f0 128.571 ; pos 1.11 ;
43 id _50 ; f0 130 ; pos 1.09 ;
44 id _51 ; f0 118.571 ; pos 1.1 ;
45 id _52 ; f0 118.571 ; pos 1.101 ;
46 id _49 ; f0 132 ; pos 0.78 ;
47 id _46 ; f0 132.286 ; pos 0.76 ;
48 id _47 ; f0 122 ; pos 0.77 ;
49 id _48 ; f0 122 ; pos 0.771 ;
50 id _45 ; f0 134.286 ; pos 0.56 ;
51 id _42 ; f0 135.714 ; pos 0.54 ;
52 id _43 ; f0 124.286 ; pos 0.55 ;
53 id _44 ; f0 124.286 ; pos 0.551 ;
54 id _41 ; f0 137.714 ; pos 0.23 ;
55 id _40 ; f0 127.714 ; pos 0.22 ;
56 id _39 ; f0 130 ; pos 0.11 ;
57 id _57 ; name pau-ax ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 9 ; end 0.172053 ; num_frames 17 ;
58 id _58 ; name ax-hh ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 5 ; end 0.288115 ; num_frames 11 ;
59 id _59 ; name hh-ow ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 2 ; end 0.406552 ; num_frames 11 ;
60 id _60 ; name ow-l ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 7 ; end 0.559239 ; num_frames 14 ;
61 id _61 ; name l-jh ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 5 ; end 0.673416 ; num_frames 10 ;
62 id _62 ; name jh-oy ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 4 ; end 0.82104 ; num_frames 13 ;
63 id _63 ; name oy-w ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 6 ; end 1.01148 ; num_frames 17 ;
64 id _64 ; name w-aa ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 4 ; end 1.1311 ; num_frames 11 ;
65 id _65 ; name aa-z ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 6 ; end 1.25207 ; num_frames 11 ;
66 id _66 ; name z-r ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 7 ; end 1.39807 ; num_frames 14 ;
67 id _67 ; name r-iy ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 5 ; end 1.52951 ; num_frames 12 ;
68 id _68 ; name iy-p ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 4 ; end 1.64963 ; num_frames 11 ;
69 id _69 ; name p-ih ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 5 ; end 1.78517 ; num_frames 13 ;
70 id _70 ; name ih-ng ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 4 ; end 1.91617 ; num_frames 12 ;
71 id _71 ; name ng-pau ; sig "[Val wave]" ; coefs "[Val track]" ; 
middle_frame 9 ; end 2.19542 ; num_frames 27 ;
72 id _72 ; name coef ; coefs "[Val track]" ; 
frame "[Val wavevector]" ;
73 id _73 ; name f0 ; f0 "[Val track]" ;
74 id _74 ; coefs "[Val track]" ; residual "[Val wave]" ;
75 id _75 ;
76 id _76 ; map "[Val ivector]" ;
77 id _77 ; wave "[Val wave]" ;
End_of_Stream_Items
Relations
Relation Token ; ()
6 11 1 0 0 0
1 1 0 6 2 0
7 10 2 0 0 0
2 2 0 7 3 1
8 9 3 0 0 0
3 3 0 8 4 2
9 8 4 0 0 0
4 4 0 9 5 3
10 6 5 0 11 0
11 7 0 0 0 10
5 5 0 10 0 4
End_of_Relation
Relation Word ; ()
1 11 0 0 2 0
2 10 0 0 3 1
3 9 0 0 4 2
4 8 0 0 5 3
5 6 0 0 0 4
End_of_Relation
Relation Phrase ; ()
2 11 1 0 3 0
3 10 0 0 4 2
4 9 0 0 5 3
5 8 0 0 6 4
6 6 0 0 0 5
1 12 0 2 0 0
End_of_Relation
Relation Syllable ; ()
1 13 0 0 2 0
2 14 0 0 3 1
3 15 0 0 4 2
4 16 0 0 5 3
5 17 0 0 6 4
6 18 0 0 0 5
End_of_Relation
Relation Segment ; ()
1 19 0 0 2 0
2 20 0 0 3 1
3 21 0 0 4 2
4 22 0 0 5 3
5 23 0 0 6 4
6 24 0 0 7 5
7 25 0 0 8 6
8 26 0 0 9 7
9 27 0 0 10 8
10 28 0 0 11 9
11 29 0 0 12 10
12 30 0 0 13 11
13 31 0 0 14 12
14 32 0 0 15 13
15 33 0 0 16 14
16 34 0 0 0 15
End_of_Relation
Relation SylStructure ; ()
8 20 7 0 0 0
7 13 1 8 0 0
1 11 0 7 2 0
10 21 9 0 11 0
11 22 0 0 12 10
12 23 0 0 0 11
9 14 2 10 0 0
2 10 0 9 3 1
14 24 13 0 15 0
15 25 0 0 0 14
13 15 3 14 0 0
3 9 0 13 4 2
17 26 16 0 18 0
18 27 0 0 19 17
19 28 0 0 0 18
16 16 4 17 0 0
4 8 0 16 5 3
22 29 20 0 23 0
23 30 0 0 0 22
20 17 5 22 21 0
24 31 21 0 25 0
25 32 0 0 26 24
26 33 0 0 0 25
21 18 0 24 0 20
5 6 0 20 6 4
6 7 0 0 0 5
End_of_Relation
Relation IntEvent ; ()
1 35 0 0 2 0
2 36 0 0 3 1
3 37 0 0 4 2
4 38 0 0 0 3
End_of_Relation
Relation Intonation ; ()
5 35 1 0 0 0
1 14 0 5 2 0
6 36 2 0 0 0
2 15 0 6 3 1
7 37 3 0 0 0
3 16 0 7 4 2
8 38 4 0 0 0
4 17 0 8 0 3
End_of_Relation
Relation Target ; ()
12 56 1 0 0 0
1 19 0 12 2 0
13 55 2 0 0 0
2 20 0 13 3 1
14 54 3 0 0 0
3 21 0 14 4 2
15 51 4 0 16 0
16 52 0 0 17 15
17 53 0 0 0 16
4 23 0 15 5 3
18 50 5 0 0 0
5 24 0 18 6 4
19 47 6 0 20 0
20 48 0 0 21 19
21 49 0 0 0 20
6 25 0 19 7 5
22 46 7 0 0 0
7 26 0 22 8 6
23 43 8 0 24 0
24 44 0 0 25 23
25 45 0 0 0 24
8 28 0 23 9 7
26 42 9 0 0 0
9 29 0 26 10 8
27 40 10 0 28 0
28 41 0 0 0 27
10 30 0 27 11 9
29 39 11 0 0 0
11 33 0 29 0 10
End_of_Relation
Relation Unit ; grouped 1 ;
1 57 0 0 2 0
2 58 0 0 3 1
3 59 0 0 4 2
4 60 0 0 5 3
5 61 0 0 6 4
6 62 0 0 7 5
7 63 0 0 8 6
8 64 0 0 9 7
9 65 0 0 10 8
10 66 0 0 11 9
11 67 0 0 12 10
12 68 0 0 13 11
13 69 0 0 14 12
14 70 0 0 15 13
15 71 0 0 0 14
End_of_Relation
Relation SourceCoef ; ()
1 72 0 0 0 0
End_of_Relation
Relation f0 ; ()
1 73 0 0 0 0
End_of_Relation
Relation TargetCoef ; ()
1 74 0 0 2 0
2 75 0 0 0 1
End_of_Relation
Relation US_map ; ()
1 76 0 0 0 0
End_of_Relation
Relation Wave ; ()
1 77 0 0 0 0
End_of_Relation
End_of_Relations
End_of_Utterance

Recording Prompts

Before launching the next command

./bin/prompt_them etc/uniphone.data

to start the automatic recording of the prompts, I uncommented the line USE_SOX=1 in the prompt_them script to use the SOX package on the Mac instead of the na_play / na_record programs.

Festival

Festival : recording prompts

Festival plays the synthesized prompt before each record and calculates the recording duration, based on the synthesis. The recorded audio files are saved into the wav folder.

As the recording in the required format 16.000 Hz, mono 16 bits was not possible, I did a manual recording with the Audacity app and replaced the audio files in the wav folder.

Audacity

Audacity app to record prompts

Labeling

The labeling of the spoken prompts is done by matching the synthesized prompts with the spoken ones.

./bin/make_labs prompt_wav/*.wav

Festival make_labs

Festival : make_labs

The following files are created :

  • folder cep : files uniph_0001.cep, uniph_0002.cep and uniph_0003.cep
  • folder lab : files uniph_0001.lab, uniph_0002.lab and uniph_0003.lab
  • folder prompt-cep : files uniph_0001.cep, uniph_0002.cep and uniph_0003.cep

The uniph_xxxx.cep files have the following type of content :

EST_File Track
DataType binary
ByteOrder 01
NumFrames 425
NumChannels 24
EqualSpace 0
BreaksPresent true
CommentChar ;

Channel_0 melcep_1
Channel_1 melcep_2
Channel_2 melcep_3
Channel_3 melcep_4
Channel_4 melcep_5
...
Channel_20 melcep_d_9
Channel_21 melcep_d_10
Channel_22 melcep_d_11
Channel_23 melcep_d_N
EST_Header_End
..........

The uniph_xxxx.cep files have the following content :

separator ;
nfields 1
#
0.01500 26 pau
0.12500 26 ax
0.23500 26 hh
0.37000 26 ow
0.53000 26 l
0.65000 26 jh
0.87000 26 oy
1.08500 26 w
1.19500 26 aa
1.39500 26 z
1.45000 26 r
1.55500 26 iy
1.74500 26 p
1.91000 26 ih
2.07500 26 ng
2.12500 26 pau

The correct labeling can be checked with the WaveSurfer app.

WafeSurfer . checking labels

WafeSurfer . checking labels

The uniph_xxxx.cep files have the following type of content :

EST_File Track
DataType binary
ByteOrder 01
NumFrames 385
NumChannels 24
EqualSpace 0
BreaksPresent true
CommentChar ;

Channel_0 melcep_1
Channel_1 melcep_2
Channel_2 melcep_3
Channel_3 melcep_4
Channel_4 melcep_5
Channel_5 melcep_6
...
Channel_19 melcep_d_8
Channel_20 melcep_d_9
Channel_21 melcep_d_10
Channel_22 melcep_d_11
Channel_23 melcep_d_N
EST_Header_End
....

Creating Utterances

After labeling the utterance structure is created with the command

festival -b festvox/build_clunits.scm '(build_utts
"etc/uniphone.data")'

Festival build_utts

Festival : build_utts

The 3 files uniph_0001.utt, uniph_0002.utt and uniph_0003.utt are saved in the folder festival/utts. They have the following type of content :

EST_File utterance
DataType ascii
version 2
EST_Header_End
Features max_id 94 ; type Text ; 
iform "\"a whole joy was reaping.\"" ; 
filename prompt-utt/uniph_0001.utt ; 
fileid uniph_0001 ;
Stream_Items
1 id _1 ; name a ; whitespace "" ; prepunctuation "" ;
2 id _2 ; name whole ; whitespace " " ; prepunctuation "" ;
3 id _3 ; name joy ; whitespace " " ; prepunctuation "" ;
...
1 76 0 0 0 0
End_of_Relation
Relation Phrase ; ()
2 11 1 0 3 0
3 10 0 0 4 2
4 9 0 0 5 3
5 8 0 0 6 4
6 6 0 0 0 5
1 77 0 2 0 0
End_of_Relation
End_of_Relations
End_of_Utterance

txt.done.data

The next scripts are looking for the txt.done.data file instead of the uniphone.data file. Copying the uniphone.data file and renaming it to txt.done.data solves this problem.

Extracting pitchmarks

The simplest way to extract the pitchmarks from the records is to use the command

./bin/make_pm_wave wav/*.wav

without tuning any parameters.

Festival make_pm

Festival : make_pm

The 3 files uniph_0001.pm, uniph_0002.pm and uniph_0003.pm are saved in the folder pm. They have the following type of content :

EST_File Track
DataType ascii
NumFrames 271
NumChannels 0
NumAuxChannels 0
EqualSpace 0
BreaksPresent true
EST_Header_End
0.016750 1
0.023312 1
0.030125 1
0.037250 1
0.044625 1
.....
2.070750 1
2.081512 1
2.092275 1
2.103038 1
2.113800 1
2.124563 1

Find Mel Frequency Cepstral Coefficients

In the next stage the Mel Frequency Cepstral Coefficients are defined synchronously with the pitch periods

./bin/make_mcep wav/*.wav

Festival make_mcep

Festival : make_mcep

The 3 files uniph_0001.mcep, uniph_0002.mcep and uniph_0003.mcep are saved in the folder mcep. They have the following type of content :

EST_File Track
DataType binary
ByteOrder 01
NumFrames 271
NumChannels 12
EqualSpace 0
BreaksPresent true
CommentChar ;

Channel_0 melcep_1
Channel_1 melcep_2
Channel_2 melcep_3
Channel_3 melcep_4
Channel_4 melcep_5
Channel_5 melcep_6
Channel_6 melcep_7
Channel_7 melcep_8
Channel_8 melcep_9
Channel_9 melcep_10
Channel_10 melcep_11
Channel_11 melcep_N
EST_Header_End
........

Building Synthesizer

Building the cluster unit selection synthesizer is the main part of the voice creation. It’s done with the command

festival -b festvox/build_clunits.scm '(build_clunits 
"etc/uniphone.data")'

Festival : build synthesizer (click to enlarge)

Festival : build synthesizer (click to enlarge)

The following files are created :

  • folder festival/clunits : file mbarnig_en_marco.catalogue
  • folder festival/feats : 41 files  [phoneme-name].feats
  • folder festival/trees : 41 files [phoneme-name].tree
  • folder festival/trees : file mbarnig_en_marco.tree

The file mbarnig_en_marco.catalogue has the following type of content :

EST_File index
DataType ascii
NumEntries 46
IndexName mbarnig_en_marco
EST_Header_End
pau_5 uniph_0001 0.000000 0.007500 0.015000
ax_0 uniph_0001 0.015000 0.070000 0.125000
hh_0 uniph_0001 0.125000 0.180000 0.235000
ow_0 uniph_0001 0.235000 0.302500 0.370000
l_0 uniph_0001 0.370000 0.450000 0.530000
jh_0 uniph_0001 0.530000 0.590000 0.650000
oy_0 uniph_0001 0.650000 0.760000 0.870000
.....
er_0 uniph_0003 1.150000 1.205000 1.260000
m_0 uniph_0003 1.260000 1.320000 1.380000
ay_0 uniph_0003 1.380000 1.480000 1.580000
k_0 uniph_0003 1.580000 1.615000 1.650000
pau_0 uniph_0003 1.650000 1.650000 1.650000

A xx.feats file has the following type of content :

0 w - r 0 0 0 0 l + z - f 0 0 0 0 a + 0.11000001 128.271 130.7258 
126.721 1 coda coda onset 1 1 0 0 1 1 single oy + 0 2 d 3 + 0 0 0 0 
content content content

A xx.tree file has the following type of content :

((((0 0)) 0))
;; Right cluster 0 (0%) mean ranking 2 mean distance 0

The mbarnig_en_marco.tree file has the following type of content :

;; Autogenerated list of selection trees
;; db_dir "./"
;; db_dir "."
;; name mbarnig_en_marco
;; index_name mbarnig_en_marco
;; f0_join_weight 0
;; join_weights (0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5)
;; trees_dir "festival/trees/"
;; catalogue_dir "festival/clunits/"
;; coeffs_dir "mcep/"
;; coeffs_ext ".mcep"
;; clunit_name_feat lisp_mbarnig_en_marco::clunit_name
;; join_method windowed
;; continuity_weight 5
;; optimal_coupling 1
;; extend_selections 2
;; pm_coeffs_dir "mcep/"
;; pm_coeffs_ext ".mcep"
;; sig_dir "wav/"
;; sig_ext ".wav"
;; disttabs_dir "festival/disttabs/"
;; utts_dir "festival/utts/"
;; utts_ext ".utt"
;; dur_pen_weight 0
;; f0_pen_weight 0
;; get_stds_per_unit t
;; ac_left_context 0.8
;; ac_weights (0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5)
;; feats_dir "festival/feats/"
;; feats (occurid p.name p.ph_vc p.ph_ctype p.ph_vheight p.ph_vlng 
p.ph_vfront p.ph_vrnd p.ph_cplace p.ph_cvox n.name n.ph_vc 
n.ph_ctype n.ph_vheight n.ph_vlng n.ph_vfront n.ph_vrnd n.ph_cplace 
n.ph_cvox segment_duration seg_pitch p.seg_pitch n.seg_pitch 
R:SylStructure.parent.stress seg_onsetcoda n.seg_onsetcoda 
p.seg_onsetcoda R:SylStructure.parent.accented pos_in_syl 
syl_initial syl_final R:SylStructure.parent.lisp_cg_break 
R:SylStructure.parent.R:Syllable.p.lisp_cg_break 
R:SylStructure.parent.position_type pp.name pp.ph_vc pp.ph_ctype 
pp.ph_vheight pp.ph_vlng pp.ph_vfront pp.ph_vrnd pp.ph_cplace 
pp.ph_cvox n.lisp_is_pau p.lisp_is_pau 
R:SylStructure.parent.parent.gpos 
R:SylStructure.parent.parent.R:Word.p.gpos 
R:SylStructure.parent.parent.R:Word.n.gpos)
;; wagon_field_desc "festival/clunits/all.desc"
;; wagon_progname "$ESTDIR/bin/wagon"
;; wagon_cluster_size 20
;; prune_reduce 0
;; cluster_prune_limit 40
;; files (uniph_0001 uniph_0002 uniph_0003)
(set! clunits_selection_trees '(
("k" ((((0 0)) 0)))
("ay" ((((0 0)) 0)))
("m" ((((0 0)) 0)))
("er" ((((0 0)) 0)))
("zh" ((((0 0)) 0)))
("ae" ((((0 0)) 0)))
("ch" ((((0 0)) 0)))
("eh" ((((0 0)) 0)))
....
("jh" ((((0 0)) 0)))
("l" ((((0 0)) 0)))
("ow" ((((0 0)) 0)))
("hh" ((((0 0)) 0)))
("ax" ((((0 0)) 0)))
("pau"
((((0 67.455) (1 100) (2 66.73) (3 100) (4 67.43) (5 100)) 83.6025)))
))

Install new voice

In the last step I created the folder

Festival-TTS/festival/lib/voices/english/mbarnig_en_marco_clunits/

and copied the following folders from the voice directory

Festival_TTS/festvox/mbarnig_en_marco/

into this folder :

  • festival
  • festvox
  • mcep
  • wav

We can now check if the voice is recognized

festival> (voice.list)

Festival : voice.list

Festival : voice.list

load the new voice

festival> (voice_mbarnig_en_marco_clunits)

and test the synthesis

festival> (SayText "Hello Marco, how are you?")

Festival : SayText

Festival : SayText

It works as expected.

The following folders in the voice folder Festival-TTS/festvox/mbarnig_en_marco remained empty :

  • emu, including 2 empty subfolders lab_hlb and pm_hlb
  • f0
  • group
  • lar
  • lpc
  • phr
  • pm_lab
  • recording
  • scratch, including 2 empty subfolders lab and wav
  • syl
  • versions
  • wrd

Speech Corpora for TTS

Speech Corpora

A speech corpus is a database of speech audio files and text transcriptions. In Speech technology, speech corpora are used to create voices for TTS (Text-to Speech) and to create acoustic models for speech recognition.

For a speech database to serve as the basis for constructing a synthetic voice, the recordings should be of studio quality and free of noise. Noise includes not just external sounds, but also unwanted breaths and clicks. The recorded utterances need to be phonetically balanced and the prosody of speech needs to be controlled so that the synthetic voice’s style of delivery is both consistent and appropriate. To satisfy these requirements it’s not sufficient to collect speech records, but you have to design a speech corpus for synthesis. The basic idea is to take a very large amount of text (millions of words) and automatically find nice utterances that match the following criteria :

  • phonetically and prosodically balanced
  • targeted toward an intended domain
  • easy to say by a speaker without mistakes
  • short enough for a speaker to be willing to say it

Some historic speech database projects are :

If the use of a designed speech corpus should be unrestricted, we need to start from a source of written material that does not impose any copyright. In the past one such source was the Gutenberg Project (PG), a volunteer effort to digitize and archive cultural works. It was founded in 1971 by Michael S. Hart and is the oldest digital library. Most of the items in its collection are the full texts of public domain books. As most of these texts are at least 70 years old, we face the issue of language drift. Languages changed considerable over the last century and the related texts are often archaic. Today, dumps of Wikipedia are usually preferred as free sources to design a speech corpus for TTS.

In the next chapters some recent speech corpora projects are presented.

CMU-ARCTIC US Voice Databases

The CMU_ARCTIC databases were constructed in 2003 at the Language Technologies Institute at Carnegie Mellon University as phonetically balanced, US English single speaker databases, designed for unit selection speech synthesis research. The databases consist of around 1150 utterances carefully selected from out-of-copyright texts from Project Gutenberg. The databases include US English male and female speakers as well as other accented speakers. The distributions include 16KHz waveform and simultaneous EGG signals. Full phonetically labelling was performed by the CMU Sphinx using the FestVox based labelling scripts. No hand correction has been made. Runnable Festival Voices are included with the database distributions.

The following corpora are available :

  • US male (bdl)  – 593 a files, 539 b files
  • US male (rms)  – 593 a files, 539 b files
  • US Canadian male (jmk)  – 593 a files, 539 b files
  • US Scottish male (awb)  – 597 a files, 541 b files
  • US Indian male (ksp)  – 593 a files, 539 b files
  • US female (slt)  – 593 a files, 539 b files
  • US female (clb)  – 593 a files, 539 b files

The typical structure of a CMU_ARCTIC database is shown below :

cmu

cmu_arctic database structure

The main folders are :

  • etc/ : list of prompts; one file txt.done.data included with all utterances
  • wav/ : recorded audio data (XXXX.wav); one file per utterance
  • lab/  : labelled text files (XXXX.lab); one file per utterance

ENST and UMPC French Speech Corpora

French speech corpora have been designed for synthesis in 2013 at Télécom ParisTech (ENST : École nationale supérieure des télécommunications) and by the Institut des Systèmes Intelligents et de Robotique (ISIR), Université Pierre et Marie Curie (UPMC).

The audio data is provided in the losslessly compressed FLAC format. The speaker were recorded at a 44.1 kHz or 48 kHz sampling rate, 16 bits per sample, in mono. No filters of any sort have been applied to the raw data. Phonetic labels, automatically obtained using forced alignment using the eHMM tool from Festvox 2.1, are provided as Xwaves .lab file with the fields ENDTIME (in seconds), NUMBER (no significance) and LABEL (variant of the SAMPA phonetic alphabet.

The following corpora are available :

  • ENST Camille : recorded by Camille Dianoux, a female native speaker of French
  • UPMC Pierre : recorded by Pierre Chauvin, a male native speaker of French
  • UPMC Jessica : recorded by Jessica Durand, a female native speaker of French

The GitHub repository of a typical ENST or UPMC corpus is shown below :

upmc

upmc speech corpus repository

The main folders are :

  • prompts/ : one text_xxxx.txt file per utterance  (1.000 files)
  • labels/ : one text_xxxx.lab file per utterance (1.000 files)
  • audio.tar archive with one text_xxxx.flac file per utterance (1.000 files)

PAVOQUE German Corpus of Expressive Speech

A single speaker, multi-style corpus of German speech, with a large neutral subset, and subsets acting out four different expressive speaking styles, has been designed for synthesis in 2013 in the context of the SEMAINE and IDEAS4GAMES projects. PAVOQUE is the abbreviation for PArametrisation of prosody and VOice QUality for concatenative speech synthesis in view of Emotion expression. The speaker is Stefan Röttig, a male native speaker of German, trained as a professional actor and baritone opera singer.

The audio data is provided in the losslessly compressed FLAC format. The speaker was recorded at a 44.1 kHz sampling rate, 24 bits per sample, in mono. No filters of any sort have been applied to this raw data, but low-pass filtering at 50 Hz is recommended. The manually corrected phonetic labels are provided as Xwaves .lab files with the fields ENDTIME (in seconds), NUMBER (no significance) and LABEL (variant of the SAMPA phonetic alphabet.

The following corpora are available :

  • Neutral
  • Obadiah ist von Natur aus niedergeschlagen und blickt pessimistisch in die Zukunft.
  • Poker ist ein ausgekochter Pokerspieler. Er ist cool, ihn bringt nichts aus der Ruhe.
  • Poppy ist fröhlich, optimistisch und sieht das Gute in allen Dingen!
  • Spike ist aggressiv und geht keinem Streit aus dem Weg!

The GitHub repository of the PAVOQUE corpus is shown below :

pavoque

pavoque speech corpus repository

The main folders are :

  • Text/  one axxx.txt file per utterance (total 4.242 files)
  • ManualLabels/Neutral/ one Xxxxx.lab file per utterance (total 3.126 files : 1.591 a-files, 1.423 e-files, 112 prudence-files)
  • ManualLabels/Obadia/  one Xxxxx.lab file per utterance (total 556 files : 124 obadia-files, 400-m files, 32 poker_d-files)
  • ManualLabels/Poker/  one Xxxxx.lab file per utterance (total 682 files : 282 poker_n-files, 400 m-files)
  • ManualLabels/Poppy/ one Xxxxx.lab file per utterance (total 584 files : 159 poppy-files, 400 m-files, 25 poker__f-files)
  • ManualLabels/Spike/  one Xxxxx.lab file per utterance (total 601 files : 151 spike-files, 400 m-files, 50 poker_a-files)
  • Recordings/Neutral.tar archive  one Xxxx.wav file per utterance (3.126 files)
  • Recordings/Obadia.tar archive  one Xxxx.wav file per utterance (556 files)
  • Recordings/Poker.tar archive  one Xxxx.wav file per utterance (682 files)
  • Recordings/Poppy.tar archive  one Xxxx.wav file per utterance (584 files)
  • Recordings//Spike.tar archive  one Xxxx.wav file per utterance (601 files)

Praat

The label files (abcd.lab) can  be opened in Praat using the command

{Praat Object} 
Open > Read from special tier file > Read IntervalTier from Xwaves ..

Links :

Festival Text-to-Speech Package

Last update : April 22, 2015

Festival

The Festival Speech Synthesis System is a general multi-lingual speech synthesis system originally developed by Alan W. Black at the Centre for Speech Technology Research (CSTR) at the University of Edinburgh. Alan W. Black is now professor in the Language Technology Institute at Carnegie Mellon University where substantial contributions have been provided to Festival. The program is written in C++.

To set-up a complete Festival Environment on OS X (Yosemite 10.10.2), four packages are required :

  1. Festival-2.4 (file festival-2.4-release.tar)
  2. Edinburgh Speech-Tools (file speech_tools-2.4-release.tar)
  3. Festvox (file festvox-2.7.0-release.tar.gz)
  4. Languages (example file : english festvox_kallpc16k.tar.gz)

To compile and install the packages, I got some guidance from a Linguistic Mystic (alias Will Styler). After unzipping, the files have been moved into a common folder Festival-TTS on the desktop with the following names :

  • festival
  • speech-tools
  • festvox

The language files are installed in the festival folder in the sub-folders lib/voices/english.

The packages have been compiled in the following sequence :

mbarnig$ cd Desktop/Festival-TTS/speech_tools
mbarnig$ ./configure
mbarnig$ make
mbarnig$ make test
mbarnig$ make install
mbarnig$ cd Desktop/Festival-TTS/festival
mbarnig$ ./configure
mbarnig$ make
mbarnig$ make install
mbarnig$ cd Desktop/Festival-TTS/festvox
mbarnig$ ./configure
mbarnig$ make

At the end the voice folder with the language files was moved to the festival/lib directory.

After updating Xcode to version 6.1.1 and installing the audiotools for Xcode 6.1, I checked that afplay is working :

afplay check

afplay check

I checked also that the festival/lib/siteinit.scm file contains the  following statements :

  • (Parameter.set ‘Audio_Required_Format ‘riff)
  • (Parameter.set ‘Audio_Method ‘Audio_Command)
  • (Parameter.set ‘Audio_Command “afplay $FILE”)

The following files have been downloaded from the festvox website, unzipped and moved to the festival/lib/dicts folder :

  • festlex_CMU.tar.gz
  • festlex_OALD.tar.gz
  • festlex_POSLEX.tar.gz

I added finally the following statements to the .bash_profile file located in the homefolder (/Users/mbarnig) :

  • export FESTIVALDIR=”/Users/mbarnig/Desktop/Festival-TTS/festival”
  • export PATH=”$FESTIVALDIR/bin:$PATH”
  • export ESTDIR=”/Users/mbarnig/Desktop/Festival-TTS/speech_tools”
  • export PATH=”$ESTDIR/bin:$PATH”
  • export FESTVOXDIR=”/Users/mbarnig/Desktop/Festival-TTS/festvox”

The festival tool can now be started in the terminal window with the command

mbarnig$ $FESTIVALDIR/bin/festival

Festival

Festival version 2.4

All seems to be working great!

Festival embeds a basic small Scheme (Lisp) interpreter (SIOD : Scheme In One Defun 3.0) written by George Carrett.

Festival works in two fundamental modes, command mode and text-to-speech (tts) mode. If Festival is started without arguments (or with the option  –command), it enters the default command mode (prompt = festival>). Information included in paranthesis is treated as commands and is interpreted by the Scheme interpreter. The following commands are accepted:

festival> 
> (intro)   :  short spoken introduction
> (voice.list)   : list of available voices
> (set! utt1 (Utterance Text "Hello world"))   : 
           create an utterance and save it in a variable
> (utt.synth utt1)    : synthesize utterance to get a waveform
> (utt.play utt1) : send the synthesized waveform to the audio device
> (SayText "Good morning, welcome to Festival")   : 
           speak text (combination of the 3 preceding commands)
> (tts "myfile" nil)    : speak file instead of text
> (manual nil)  : show the content of the manual
> (manual "Accessing an utterance")  : show the section "utterance"
> (PhoneSet.list)   : show the currently defined phonesets
> (tts "doremi.xml" 'singing)  : an XML based mode for specifying 
           songs, both notes and duration
> (quit)   : exit

If Festival is started with the –tts option, it enters tts-mode. Information (in files or through standard input) is treated as text to be rendered as speech.

Other options available at the start of Festival are :

--language LANG   : set the default language to LANG.
--server   : enter server mode where Festival waits for clients on a 
    known port (default port : 1314); connected clients may send 
    commands (or text) to the server and expect waveforms back.
--script scriptfile  : run scriptfile as a Festival script file.
--heap NUMBER   : to increase the scheme heap.
--batch  : after processing file arguments do not become interactive.
--interactive  : after processing file arguments become interactive.

Script mode :

festival mbarnig$  examples/saytime
festival mbarnig$  text2wave myfile.txt -o myfile.wav

An updated Festival System Documentation with 34 chapters, edited in December 2014, is available at the festvox website.

The following Festival voices are available :

  • festvox_cmu_us_ahw_cg
  • festvox_cmu_us_aup_cg
  • festvox_cmu_us_awb_cg
  • festvox_cmu_us_axb_cg
  • festvox_cmu_us_bdl_cg
  • festvox_cmu_us_clb_cg
  • festvox_cmu_us_fem_cg
  • festvox_cmu_us_gka_cg
  • festvox_cmu_us_jmk_cg
  • festvox_cmu_us_ksp_cg
  • festvox_cmu_us_rms_cg
  • festvox_cmu_us_rxr_cg
  • festvox_cmu_us_slt_cg
  • festvox_kallpc16k
  • festvox_rablpc16k
  • Leopold : AustrianGerman
  • IMS German Festival
  • OGIgerman by CSLU
  • Swedish by SOL
  • Hindi

Hindi and German are examples of Festival languages/voices with different phone-features in the phone-set as in the standard us and english phone-sets.

Edinburgh Speech Tools

The Edinburgh Speech Tools Library is a collection of C++ class, functions and related programs for manipulating objects used in speech processing. It includes support for reading and writing waveforms, parameter files (LPC, Ceptra, F0) in various formats and converting between them. It also includes support for linguistic type objects and support for various label files and ngrams (with smoothing). In addition to the library a number of programs are included. An intonation library which includes a pitch tracker, smoother and labelling system (using the Tilt Labelling system), a classification and regression tree (CART) building program called wagon. Also there is growing support for various speech recognition classes such as decoders and HMMs.

An introduction to the Edinburgh Speech Tools is provided by Festvox.

Festvox

The Festvox project aims to make the building of new synthetic voices for Festival more systemic and better documented, by offering the following resources :

Festival Variables

Festival provides a list of variables available for general use. This list is automatically generated from the documentation strings of the variables defined in the source code. A variable can be displayed with the print command at the festival prompt. Some examples are shown hereafter :

festival>
> (print festival_version) ; current version of the system
> (print *ostype*) ; operation system that Festival is running on
> (print lexdir) ; default directory of the lexicons
> (print SynthTypes) ; list of synthesis types and functions
> (print token.letter_pos) ; POS tag for individual letters
> (print token.punctuation) ; characters treated as punctuation
> (print voice-path) ; list of folders to look for voices
> (print voice_default) ; function to load the default voice

Festival Variables

Festival Variables

Festival Functions

Festival provides a list of functions available for general use. This list is automatically generated from the documentation strings of the functions defined in the source code. A function is called at the Festival prompt. Some examples are shown hereafter :

festival>
> (pwd) ; return current directory
> (lex.list) ; list names of all currently defined lexicons
> (voice.list) ; list all potential voices in the system
> (lex.lookup WORD FEATURES) ; lookup word in current lexicon
> (lex.compile ENTRYFILE COMPILEFILE) ; compile lexical entries
> (PhoneSet.list) ; list all currently defined PhoneSets
> (quit) ; exit from Festival

Festival Functions

Festival Functions

Utterance Access Methods

Festival provides a number of standard functions that allow to access parts of an utterance, to traverse through it and to extract features.

Three utterances access methods are of particular interest :

  1. (utt.feat UTT FEATNAME)
    returns the value of feature FEATNAME in UTT
  2. (item.feat ITEM FEATNAME)
    returns the value of feature FEATNAME in ITEM
  3. (utt.features UTT RELATIONNAME FUNCLIST)
    returns vectors of feature values for each item, listed in FUNCLIST and related
    in RELATIONNAME in UTT

FEATNAME may be a

  • feature name ; example : (item.feat sylb ‘stress)
  • feature function name ; example : (item.feat sylb ‘pos_in_word)
  • pathname ; examples : (item.feat sylb ‘nn.stress)
    (item.feat sylb ‘R:SylStructure.parent.word)

Notes :
sylb is a syllable item
R: is a relation operator

RELATIONNAME may be ‘Token, ‘Word, ‘Phrase, ‘Segment, ‘Syllable, etc

FUNCLIST is a list of items ; example : ‘(name pos)

Some examples are shown hereafter :

festival>
(set! utter (SayText "Hello Marco, how are you?"))
(set! tok (utt.relation.first utter 'Token))
(utt.feat utter 'type)
(item.feat tok 'nn.name)
(item.feat tok 'R:Token.daughter1.name)
(utt.features utter 'Word '(name pos p.pos n.pos))

feats

Utterance access methods

More informations about feature functions as FEATNAME are provided in the next chapter.

Festival Feature Functions

Festival provides a list of basic feature functions available as FEATNAME in utterances. Most are only available for specific items. Some examples are shown hereafter, related to the corresponding items :

Token item

festival>
(set! utter (SayText "Hello Marco, how are you?"))
(set! tok (utt.relation.first utter 'Token))
(item.name tok) ; first token
(item.feat tok 'name) ; first token
(item.feat tok 'n.name) ; second token
(item.feat tok 'nn.name) ; third token
(item.feat tok 'whitespace)
(item.feat tok 'prepunctuation)

Utterance Token

Utterance Token

Word item

festival>
(set! utter (SayText "Hello Marco, how are you?"))
(set! wrd (item.next (utt.relation.first utter 'Word)))
(item.name wrd) ; second word
(item.feat wrd 'p.name) ; first word
(item.feat wrd 'cap)
(item.feat wrd 'word_duration)

Utterance Word

Utterance Word

Segment item

festival>
(set! utter (SayText "Hello Marco, how are you?"))
(set! seg (item.prev (item.prev (utt.relation.last utter 'Segment))))
(item.name seg) ; third last segment
(item.feat seg 'n.name) ; second last segment
(item.feat seg 'seg_pitch)
(item.feat seg 'segment_end)
(item.feat seg 'R:SylStructure.parent.parent.name)

Utterance Segment

Utterance Segment

Syllable item

festival>
(set! utter (SayText "Hello Marco, how are you?"))
(set! sylb (utt.relation.first utter 'Syllable))
(item.features sylb) ; first syllable
(item.feat sylb 'asyl_out)
(item.feat sylb 'syl_midpitch)
(utt.features utter 'Syllable '(stress))
(item.feat sylb 'nn.stress) ; stress of third syllable
(item.feat sylb 'R:SylStructure.parent.name)
(item.feat sylb 'R:SylStructure.daughter1.name)
(item.feat sylb 'R:SylStructure.daughter2.name)

Utterance Syllable

Utterance Syllable

SylStructure item

festival>
(set! utter (SayText "Hello Marco, how are you?"))
(set! sylst (item.prev (utt.relation.last utter 'SylStructure)))
(item.features sylst)
(item.feat sylst 'pos_index)
(item.feat sylst 'phrase_score)

Utterance SylStructure

Utterance SylStructure

Intonation item

festival>
(set! utter (SayText "Hello Marco, how are you?"))
(set! inton (utt.relation.first utter 'Intonation))
(item.features inton)
(item.feat inton 'id)

Utterance Intonation

Utterance Intonation

Dumping features

Extracting basic features from a set of utterances is useful for most of the training techniques for TTS voice building. Festival provides a script dumpfeats in the festival/examples folder which does this task. The results can be saved in a single feature file or in separate files for each utterance. An example is shown below, the dumpfeats script was copied in the festival folder of my test voice mbarnig_lb_voxcg :

mbarnig$ ./dumpfeats -feats "(name p.name n.name)"
-relation Segment -output myfeats.txt utts/*.utt

Festival dumpfeats

Festival dumpfeats

Links

A list of links to websites with additional informations about the Festival package is shown hereafter :

Spectrograms and speech processing

Last update : March 30, 2018

Spectrograms are visual representations of the spectrum of frequencies in a sound or other signal as they vary with time (or with some other variable). Spectrograms can be used to identify spoken words phonetically. The instrument that generates a spectrogram is called a spectrograph.

Spectrograms are approximated as a filterbank that results from a series of bandpass filters or calculated from the time signal using the Fast Fourier Transform (FFT).

FFT is an algorithm to compute the Discrete Fourier Transform (DFT) and its inverse. A significative parameter of the DFT is the choice of the Window Function. In signal processing, a window function is a mathematical function that is zero-valued outside of some chosen interval. The following window functions are common for spectrograms :

I recorded a sound example.wav file with my name spoken three times, to use as test file for different spectrogram software programs.

Real-Time Spectrogram Software

There are some great software programs to perform a spectrogram for speech analysis in realtime or with recorded sound files :

  • Javascript Spectrogram
  • Wavesurfer
  • Spectrogram16
  • SFS / RTGRAM
  • Audacity
  • RTS
  • STRAIGHT
  • iSound

Javascript Spectrogram

Jan Schnupp, sensory neuroscientist, Professor at the Department of Physiology, Anatomy and Genetics within the Division of Medical Sciences at the University of Oxford, developed an outstanding javascript program to calculate and display a real-time spectrogram in a webpage, from the input to the computer’s microphone. It requires a browser which supports HTML5 and web audio and it requires also WebRTC, which is supported in recent versions of Chrome, Firefox and Opera browsers. WebRTC is a free, open project that enables web browsers with Real-Time Communications (RTC) capabilities via simple JavaScript APIs.

Javascript spectrogram with 3x voice sound "Marco Barnig"

Javascript realtime spectrogram with 3x voice input “Marco Barnig” by microphone

Jan Schnupp is also the author of the website howyourbrainworks.net offering free, accessible introductory online lecture courses to neuroscience.

Wafesurfer

WaveSurfer is an open source multiplatform tool for sound visualization and manipulation. Typical applications are speech/sound analysis and sound annotation/transcription. WaveSurfer may be extended by plug-ins as well as embedded in other applications. A comprehensive user manual and numerous tutorials for Wavesurfer are available on the net.

WaveSurfer was developed at the Centre for Speech Technology (CCT) at the KTH Royal Institute of Technology in Sweden. The latest stable Windows release (1.8.8p5, October 27, 2017) and the source code of WaveSurfer can be downloaded from Sourceforge. The authors of Wavesurfer are Jonas Beskow and Kåre Sjölander.

wavesurfer auto

Wavesurfer auto-calculated, auto-sized spectrogram

By right-clicking in the Wafesurfer pane, a pop-up window opens with menus to add more panes, to customize the configuration and to change the parameters for analysis. In the following rendering, the panes Waveform, Pitch Contour, Formant Plot and Transcription have been added to the spectrogram pane and to the Time Axis pane. The spectrogram frequency range was cut at 5 KHz.

Wafesurfer customized

Wafesurfer customized

Two other panes can be selected: Power Plot and Data Plot. Additional specific panes can be created with plugins.

Wavesurfer uses the Snack Sound Toolkit created by Kåre Sjölander. There exist other software programs with the name Wavesurfer, for example wavesurfer.js, a customizable waveform audio visualization tool, built on top of Web Audio API and HTML5 Canvas by katspaugh.

Spectrogram16

Spectrogram16 is a calibrated, dual channel audio spectrum analyzer for Windows that can provide either a scrolling time-frequency display or a spectrum analyzer scope display in real time for any sound source connected to the sound card. A detailed user guide (51 pages) is joined to the program.

Spectrogram16 customized

Spectrogram16 customized

The tool was created by Richard Horne, the founder of Visualization Software LLC. The company closed  a few years ago. The WayBackMachine shows that Richard Horne announced in 2008 that version 16 of Spectrogram is now freeware (see also local copy). The software is still available from most  free software download websites. Richard Horne, MS, who retired as a Civilian Electrical Engineer for the Navy, is member of the Management Team of Vocal Innovations.

The Spectrogram program was (and is still) appreciated by amateur radio operators for aligning ham receivers.

SFS / RTGRAM

RTGRAM is a free Windows program for displaying a real-time scrolling spectrographic display of an audio signal. With RTGRAM you can monitor the spectro-temporal characteristics of sounds being played into the computer’s microphone or line input ports. RTGRAM is optimised for speech signals and has options for different sampling rates, analysis bandwidths (wideband = 300 Hz, narrowband = 45 Hz), temporal resolution (time per pixel = 1 – 10 ms), dynamic range (30 – 70 dB) and colour maps.

RTGRAM

RTGRAM realtime spectrogram with 3x voice input “Marco Barnig” by microphone

The current version of RTGRAM is 1.3, released in April 2010. It is part of the Speech Filing System (SFS) tools for speech research.

RTGRAM is free, but not public domain software, its intellectual property is owned by Mark Huckvale, University College London.

Audacity

Audacity is a free, open source, cross-platform software for recording and editing sounds. Audacity was started in May 2000 by Dominic Mazzoni and Roger Dannenberg at Carnegie Mellon University. The current version is 2.1.3, released on March 17, 2017.

Audacity

Audacity auto-calculated, auto-sized spectrogram

A huge documentation about Audacity with manuals, tutorials, tips, wikis, FAQ’s is available in several languages.

RTS tm

RTS (Real-Time Spectrogram) is a product of Engineering Design, founded in 1980 to address problems in instrumentation and measurement, physical acoustics, and digital signal analysis. Since 1984, Engineering Design has been the developer of the SIGNAL family of sound analysis software. RTS is highly integrated with SIGNAL.

STRAIGHT

STRAIGHT (Speech Transformation and Representation by Adaptive Interpolation of weiGHTed spectrogram) was originally designed to investigate human speech perception in terms of auditorily meaningful parametric domains. STRAIGHT is a tool for manipulating voice quality, timbre, pitch, speed and other attributes flexibly. The tool was invented by Hideki Kawahara when he was in the Advanced Telecommunications Research Institute International (ATR) in Japan. Hideki Kawahara is now Professor at the Auditory Media Laboratory, Department of Design and Information Sciences, Faculty of Systems Engineering, Wakayama University, Japan.

iSound

Irman Abdić created an audio tool (iSound) for displaying spectrograms in real time using Sphinx-4 as part of his thesis at the Faculty of Mathematics, Natural Sciences and Information Technologies (FAMNIT) from Koper, Slovenia.

No Real-Time Spectrogram Software

Other great software programs to create no-realtime spectrograms of recorded voice samples are :

  • Praat
  • SoX
  • SFS / WASP

Praat

Praat (= talk in dutch) is a free scientific computer software package for the analysis of speech in phonetics. It was designed, and continues to be developed, by Paul Boersma and David Weenink of the Institute of Phonetics Sciences at the University of Amsterdam. Praat runs on a wide range of operating systems. The program also supports speech synthesis, including articulatory synthesis.


Praat displays two windows : Praat Objects and Praat Picture.

Praat Objects Window

Praat Objects Window

Praat Picture Window

Praat Picture Window

The spectrogram can also be rendered in a customized window.

Praat

Praat customized window

The current Windows version 6.0.38 (32 and 64 bit) of Praat was released on March 29, 2018. The source code for this release is available at the Praat website. A huge documentation with FAQ’s, tutorials, publications, user guides is available for Praat. The plugins are located in the directory C:/Users/name/Praat/.

An outstanding plugin for Praat is EasyAlign. It is a user-friendly automatic phonetic alignment tool for continuous speech. It is possible to align speech from an orthographic or phonetic transcription. It requires a few minor manual steps and the result is a multi-level annotation within a TextGrid composed of phonetic, syllabic, lexical and utterance tiers. EasyAlign was developed by Jean-Philippe Goldman at the Department of Linguistics, University of Geneva.

SoX

SoX (Sound EXchange) is a free cross-platform command line utility that can convert various formats of computer audio files in to other formats. It can also apply various effects to these sound files and play and record audio files on most platforms. SoX is called the Swiss Army knife of sound processing programs.

SoX is written in standard C and was created in July 1991 by Lance Norskog. In May 1996, Chris Bagwell started to maintain and release updated versions of SoX. Throughout its history, SoX has had many contributing authors. Today Chris Bagwell is still the main developer.

The current Windows distribution is 14.4.2 released  in February 22, 2015. The source code is available at Sourceforge.

SoX provides a very powerful spectrogram effect. The spectrogram is rendered in a png image-file and shows time in the x-axis, frequency in the y-axis and audio signal amplitude in the z-axis. The z-axis values are represented by the colour of the pixels in the x-y plane. The command

sox example.wav -n spectrogram

creates the following auto-calculated, auto-sized spectrogram :

SoX auto

SoX auto-calculated, auto-sized spectrogram

The main options to customize a spectrogram created with SoX are :


-x num : change the width of the spectrogram from its default value of 800px
-Y num : sets the total height of the spectrogram; the default value is 550px
-z num : sets the dynamic range from 20 to 180 dB; the default value is 120 dB
-q num : sets the z-axis quantisation (number of different colours)
-w name : select the window function; the default function is Hann
-l : creates a printer-friendly spectrogram with a light background
-a : suppress the display of the axis lines
-t text : set an image title
-c text : set an image comment (below and to the left of the image)
-o text : set the name of the output file; the default name is spectrogram.png
rate num k : analyse a small portion of the frequency domain (up to 1/2 num kHz)



A customized rendering follows :

SoX

Customized SoX spectrogram

The customized SoX spectrogram was created with the following command :

sox example.wav -n rate 10k spectrogram -x 480 -y 240 -q 4 -c "www.web3.lu" 
-t "SoX Spectrogram of the triple speech sound Marco Barnig"

WASP

WASP is a free Windows program for the recording, display and analysis of speech. With WASP you can record and replay speech signals, save them and reload them from disk, edit annotations, and display spectrograms and a fundamental frequency track. WASP is a simple application that is complete in itself, but which is also designed to be compatible with the Speech Filing System (SFS) tools for speech research. The current version 1.54 was released in July 2013.


The following figure shows a customized WASP window with a  speech waveform pane, a wideband spectrogram, a pitch track and annotations.

WASP customized spectrogram

WASP customized spectrogram with pitch and annotation tracks

WASP is free, but not public domain software, its intellectual property is owned by Mark Huckvale, University College London.

Specific Spectrogram Software

Spectrograms can also be used for teaching, artistic or other curious purposes :

  • FaroSon
  • SpectroTyper
  • ImageSpectrogram

FaroSon

FaroSon (The Auditory Lighthouse), is a Windows program for the real-time conversion of sound into a coloured pattern representing loudness, pitch and timbre. The loudness of the sound is reflected in the brightness and saturation of the colours. The timbre of the sound is reflected in the colours themselves: sounds with predominantly bass character have a red colour, while sounds with a predominantly treble character have a blue colour. The pitch of the sound is reflected in the horizontal banding patterns: when the pitch of the sound is low, then the bands are large and far apart, and when it is high, the bands are narrow and close together. If the pitch of the sound is falling you see the bands diverge; when it is rising, you see the bands converge.

Faroson

Faroson

FaroSon is free, but not public domain software, its intellectual property is owned by Mark Huckvale, University College London.

SpectroTyper

AudioCheck offers the Internet’s largest collection of online sound tests, test tones, and tone generators. Audiocheck provides a unique online tool called SpectroTyper to insert plain text into a .wav sound file. The downloaded file plays as cool-sounding computer-like tones and is secretly readable from a spectrogram view (linear frequency scale best). It can be used for fun, to hide easter eggs in a music production or to tag copyrighted audio material with own identifiers or source informations.

Here is the barnig_txt.wav sound file with my integrated name as an example, the result is shown below in the SoX spectrogram, created with the command :

sox barnig_txt.wav -n rate 10k spectrogram -x 480 -y 120

Spectro

SoX Spectrogram of a sound with inserted text, synthesized with SpectroTyper

ImageSpectrogram

Richard David James, best known by his stage name Aphex Twin, is an British electronic musician and composer. In 1999, he released Windowlicker as a single on Warp Records. In this record he synthesized his face as a sound, only viewable in a spectrogram.

Gavin Black (alias plurSKI) created a perl script to do the same : take a digital picture and convert it into a wave file. Creating a spectrogram of that file then reproduces the original picture. More informations about this project are available on Gavin Black’s website devrand.org



Here is the barnig_portrait.wav sound file with my integrated portrait as an example, the result is shown below in the SoX spectrogram, created with the command :

sox barnig_portrait.wav -n spectrogram -x 480 -y 480

Spectro

SoX Spectrogram of a sound with inserted picture, synthesized with imageSpectrogram

Links

A list with links to websites providing additional informations about spectrograms is presented below :

Mary TTS (Text To Speech)

Last update : January 5, 2017

MaryTTS is an open-source, multilingual Text-to-Speech Synthesis platform written in Java. It was originally developed as a collaborative project of DFKI’s Language Technology Lab and the Institute of Phonetics at Saarland University. It is now maintained by the Multimodal Speech Processing Group in the Cluster of Excellence MMCI and DFKI (Deutsches Forschungszentrum für Künstliche Intelligenz GmbH).

Mary stands for Modular Architecture for Research in sYynthesis. The earliest version of MaryTTS was developed around 2000 by Marc Schröder. The current stable version is 5.2, released on September 15, 2016.

I installed Mary TTS on my Windows, Linux and Mac computers. On the Mac (OSX 10.10 Yosemite), version 5.1.2 of Mary TTS was placed on the desktop in the folders marytts-5.1.2 and marytts-builder-5.1.2. The Mary TTS Server is started first by opening a terminal window in the folder marytts-5.1 with the following command :

marytss-5.1.2 mbarnig$ bin/marytts-server.sh

To start the Mary TTS client with the related GUI, a second terminal window is opened in the same folder  with the command :

marytss-5.1.2 mbarnig$ bin/marytts-client.sh

On Windows , the related scripts are marytts-server.bat and marytts-client.bat.

As the development version 5.2 of Mary TTS supports more languages and comes with toolkits for quickly adding support for new languages and for building unit selection and HMM-based synthesis voices, I downloaded a snapshot-zip-file from Github with the most recent source code. After unzipping, the source code was placed in the folder marytts-master on the desktop.

To compile Mary TTS from source on the Mac, the latest JAVA development version (jdk-8u31-macosx-x64.dmg) and Apache Maven (apache-maven-3.2.5-bin.tar.gz), a software project management and comprehension tool, are required.

On Mac, Java is installed in

/Library/Java/JavaVirtualMachines/jdk1.8.0_31.jdk/Contents/Home/

and Maven is installed in

/usr/local/apache-maven/apache-maven-3.2.5

It is important to set the environment variables $JAVA_HOME, $M2_HOME and the $PATH to the correct values (export in /Users/mbarnig/.bash-profile).

The succesful installation of Java and Maven can be verified with the commands :

mbarnig$ java -version
mbarnig$ mvn --version

marytts-maven-java

Mary TTS : Maven and Java versions

This looks good!

In the next step I compiled the Mary TTS source code by running the command

marytts-master mbarnig$ mvn install

in the top-level marytts-master folder. This build the system, run unit and integration tests, packaged the code and installed it in the following folders :

marytts-master/target/marytts-5.2.SNAPSHOT
marytss-master/target/marytss-builder-5.2-SNAPSHOT

The build took 2:55 minutes and was succesful, without errors or warnings.

mary

Results of building MARYTTS 5.2 SNAPSHOT

The following modules have been compiled :

  • MaryTTS
  • marytts-common
  • marytts-signalproc
  • marytts-runtime
  • marytts-lang-de, en, te, tr, ru, it, fr, sv, lx (lx is a pseudo locale for a test language)
  • marytts-languages
  • marytts-client
  • marytts-builder
  • marytts-redstart
  • marytts-transcription
  • marytts-assembly with the sub-modules assembly-builder and assembly-runtime
  • voice_cmu_slt_hsmm

After checking the whole file structure, I started the Mary TTS 5.2 server

marytts-snapshot-server

Mary TTS snapshot 5.2 Server

and the Mary TTS 5.2 client

marytts-snapshot-client

Mary TTS Snapshot 5.2 client

did some trials with text to audio conversion in the GUI window

marytts-gui-client

Mary TTS Client GUI

launched the Mary TTS 5.2 component installer

Mary TTS Component Installer

Mary TTS Component Installer

and finally installed some french, german and english available voices.

marytts-installer

Mary TTS Voice Installer GUI

In the next step I will try to create my own voices and develop a voice for the luxembourgish language.

In January 2017, I updated my systems with the stable MaryTTS version 5.2 which supports the luxembourgish language.

eSpeak Formant Synthesizer

Last update : November 2, 2014

eSpeak

eSpeak is a compact multi-platform multi-language open source speech synthesizer using a formant synthesis method.

eSpeak is derived from the “Speak” speech synthesizer for British English for Acorn Risc OS computers, developed by Jonathan Duddington in 1995. He is still the author of the current eSpeak version 1.48.12 released on November 1, 2014. The sources are available on Sourceforge.

eSpeak provides two methods of formant synthesis : the original eSpeak synthesizer and a Klatt synthesizer. It can also be used as a front end for MBROLA diphone voices. eSpeak can be used as a command-line program or as a shared library. On Windows, a SAPI5 version is also installed. eSpeak supports SSML (Speech Synthesis Marking Language) and uses an ASCII representation of phoneme names which is loosely based on the Kirshenbaum system.

In formant synthesis, voiced speech (vowels and sonorant consonants) is created by using formants. Unvoiced consonants are created by using pre-recorded sounds. Voiced consonants are created as a mixture of a formant-based voiced sound in combination with a pre-recorded unvoiced sound. The eSpeakEditor allows to generate formant files for individual vowels and voiced consonants, based on a sequence of keyframes which define how the formant peaks (peaks in the frequency spectrum) vary during the sound. A sequence of formant frames can be created with a modified version of Praat, a free scientific computer software package for the analysis of speech in phonetics. The Praat formant frames, saved in a spectrum.dat file, can be converted to formant keyframes with eSpeakEdit.

To use eSpeak on the command line, type

espeak "Hello world"

There are plenty of command line options available, for instance to load from file, to adjust the volume, the pitch, the speed or the gaps between words, to select a voice or a language, etc.

To use the MBROLA voices in the Windows SAPI5 GUI or at the command line, they have to be installed during the setup of the program. It’s possible to rerun the setup to add additional voices. To list the available voices type

espeak --voices

eSpeak uses a master phoneme file containing the utility phonemes, the consonants and a schwa. The file is named phonemes (without extension) and located in the espeak/phsource program folder. The vowels are defined in the language specific phoneme files in text format. These files can also redefine consonants if you wish. The language specific phoneme text-files are located in the same espeak/phsource folder and must be referenced in the phonemes master file (see example for luxembourgish).

....
phonemetable lb base
include ph_luxembourgish

In addition to the specific phoneme file ph_luxembourgish (without extension), the following files are requested to add a new language, e.g. luxembourgish :

lb file (without extension) in the folder espeak/espeak-data/voices : a text file which in its simplest form contains only 2 lines :

name luxembourgish
language lb

lb_rules file (without extension) in the folder espeak/dictsource : a text file which contains the spelling-to-phoneme translation rules.

lb_list file (without extension) in the folder espeak/dictsource : a text file which contains pronunciations for special words (numbers, symbols, names, …).

The eSpeakEditor (espeakedit.exe) allows to compile the lb_ files into an lb_dict file (without extension) in the folder espeak/espeak-data and to add the new phonemes into the files phontab, phonindex and phondata in the same folder. These compiled files are used by eSpeak for the speech synthesis. The file phondata-manifest lists the type of data that has been compiled into the phondata file. The files dict_log and dict_phonemes provide informations about the phonemes used in the lb_rules and lb_dict files.

eSpeak applies tunes to model intonations depending on punctuation (questions, statements, attitudes, interaction). The tunes (s.. = full-stop, c.. = comma, q.. = question, e.. = exclamation) used for a language can be specified by using a tunes statement in the voice file.

tunes s1  c1  q1a  e1

The named tunes are defined in the text file espeak/phsource/intonation (without extension) and must be compiled for use by eSpeak with the espeakedit.exe program (menu : Compile intonation data).

meSpeak.js

Three years ago, Matthew Temple ported the eSpeak program from C++ to JavaScript using Emscripten : speak.js. Based on this Javascript project, Norbert Landsteiner from Austria created the meSpeak.js text-to-speech web library. The latest version is 1.9.6 released in February 2014.

meSpeak.js is supported by most browsers. It introduces loadable voice modules. The typical usage of the meSpeak.js library is shown below :

<!DOCTYPE html>
<html lang="en">
<head>
 <title>Bonjour le monde</title>
 <script type="text/javascript" src="mespeak.js"></script>
 <script type="text/javascript">
 meSpeak.loadConfig("mespeak_config.json");
 meSpeak.loadVoice("voices/fr.json");
 function speakIt() {
 meSpeak.speak("Bonjour le monde");
 }
 </script>
</head>
<body>
<h1>Try meSpeak.js</h1>
<button onclick="speakIt();">Speak It</button>
</body>
</html>

Click here to test this example.

The mespeak_config.json file contains the data of the phontab, phonindex, phondata and intonations files and the default configuration values (amplitude, pitch, …). This data is encoded as base64 octed stream. The voice.json file includes the id of the voice, the dictionary used and the corresponding binary data (base64 encoded) of these two files. There are various desktop or online Base64 Decoders and Encoders available on the net to create the required .json files (base64decode.org, motobit.com, activexdev.com, …).

meSpeak cam mix multiple parts (diiferent languages or voices) in a single utterance.meSpeak supports the Web Audio API (AudioContext) with internal wav files, Flash is used as a fallback.

Links

A list with links to websites providing additional informations about eSpeak and meSpeak follows :

Phonemes, phones, graphemes and visemes

Phonemes

A phoneme is the smallest structural unit that distinguishes meaning in a language, studied in phonology (a branch of linguistics concerned with the systematic organization of sounds in languages). Linguistics is the scientific study of language. Phonemes are not the physical segments themselves, but are cognitive abstractions or categorizations of them. They are abstract, idealised sounds that are never pronounced and never heard. Phonemes are combined with other phonemes to form meaningful units such as words or morphemes.

A morpheme is the smallest meaningful (grammatical) unit in a language. A morpheme is not identical to a word, and the principal difference between the two is that a morpheme may or may not stand alone, whereas a word, by definition, is freestanding. The field of study dedicated to morphemes is called morphology.

Phones

Concrete speech sounds can be regarded as the realisation of phonemes by individual speakers, and are referred to as phones. A phone is a unit of speech sound in phonetics (another branch of linguistics that comprises the study of the sounds of human speech).  Phones are represented with phonetic symbols. The IPA (International Phonetic Alphabet) is an alphabetic system of phonetic notation based primarily on the Latin alphabet. It was created by the International Phonetic Association as a standardized representation of the sounds of oral language.

In IPA transcription phones are conventionally placed between square brackets and phonemes are placed between slashes.

English Word : make
Phonetics : [meik]
Phonology : /me:k/   /maik/   /mei?/

A set of multiple possible phones, used to pronounce a single phoneme, is called an allophone in phonology.

Graphemes

Analogous to the phonemes of spoken languages, the smallest semantically distinguishing unit in a written language is called a grapheme. Graphemes include alphabetic letters, typographic ligatures, chinese characters, numerical digits, punctuation marks, and other individual symbols of any of the world’s writing systems.

Grapheme examples

Grapheme examples

In transcription graphemes are usually notated within angle brackets.

<a>  <W>  <5>  <i>  <> <>  <ق>

A grapheme is an abstract concept, it is represented by a specific shape in a specific typeface called a glyph. Different glyphs representing the same grapheme are called allographs.

In an ideal phonemic orthography, there would be a complete one-to-one correspondence between the graphemes and the phonemes of the language. English is highly non-phonemic, whereas Finnish come much closer to being consistent phonemic.

Visemes

A viseme is a generic facial shape that can be used to describe a particular sound. Visemes are for lipreaders, what phonemes are for listeners: the smallest standardized building blocks of words. However visemes and phonemes do not share a one-to-one correspondence.

Visemes

Visemes

Links

A list with links to websites with additional informations about phonemes, phones, graphemes and visemes is shown hereafter :