Outils pour utilisateurs

Outils du site


Panneau latéral

Accès aux Documents

parole:faire_parler_vos_cartes_arduino

Comment faire parler vos cartes Arduino(s) ?

La genèse de la synthèse vocale

Les premières puces vocales ( TMS5100 , TMS5220 … ) de Texas Instrument, apparues en 1978, ont été largement utilisées dans la série des “dictées magiques” de Texas Instrument ou encore dans les premiers ordinateurs 16bits TI-99/4A. Cette technologie repose entièrement sur une forme d'encodage LPC (Linear Predictive Coding) de la voix humaine. Cet encodage développé par l'armée Américaine dans ces “vocoder” permettait déjà fin des années 60 de “digitaliser” et de crypter les communications de l'armée tout en s'accomodant des débits très bas ( typiquement 2400bits/seconde soit 300 Octets/seconde sont suffisants pour transmettre un message vocal compréhensible ).

  • Jean-Luc Deladrière a apporter des modifications à cette librairie en donnant la possibilité de rêgler la hauteur du son ( pitch ) , la vitesse ( speed ) ainsi que la distortion ( bending ) lors de la restitution vocale. Sa version est également disponible sur github ( talkie2 ).
  • Cette dernière version a été complétée par Technozone51 afin d'intégrer les réglages de pitch, speed et bending directement dans la classe de l'objet pour une utilisation plus simple de la librairie d'origine. cette librairie talkietz est disponible en téléchargement un peu plus bas sur cette page.

Le câblage du projet

Cablâge du projet

Pour un premier test, il vous suffira de connecter un petit haut-parleur ( entre 4 et 16 ohm ) entre la broche gnd et la broche digital d3 de votre carte Arduino Uno. Pour un son plus fort, il vous faudra ajouter un petit amplificateur à votre montage.

Restriction importante : La librairie de restitution vocale ne fonctionne que sur les cartes à base de processeurs ATMEGA168 ou ATMEGA328 cadencés à 16Mhz. Vous ne pouvez donc utiliser que les cartes Arduino Uno, Duemilanove ou Diecimila. Cela ne fonctionnera pas avec une Mega ou une Leonardo !

Restriction importante : La librairie impose l'utilisation de la broche 3, il est impossible d'utiliser une autre broche pour la restitution vocale.

Librairie et sketch Arduino

  • Lancer Arduino et charger l'exemple proposé avec la librairie talkietz en suivant les menus :

Fichier > Exemples > Talkietz > Demo

Téléverser ce sketch et normalement vous devriez entendre votre carte arduino s'exclamer toutes les 5 secondes “Attention Danger !”.

Restriction importante : La librairie talkietz utilise le Timer1 et le Timer2 ce qui entraîne une incompatibilité avec par exemple l'instruction analogWrite() et avec un grand nombre d'autres bibliothèques Arduino comme PWM, IRremote, Servo … A tester au cas par cas !

Comme on peut le voir sur l'image ci-dessous, les chaines LPC des mots à prononcer sont incluses dans le code avec la directive PROGMEM afin d'être stockée dans la mémoire flash de la carte arduino Uno.

Personaliser les phrases à prononcer

Pour prononcer un mot, on appelle la méthode say de l'objet voice en lui passant comme paramètre le nom du tableau contenant la chaine LPC. Par exemple le mot “attention” est prononcé en appelant :

voice.say(spW010458);

Dans le Setup, on peut voir les méthodes voice.SetSpeed, voice.SetPitch et voice.BendingOff qui servent a règler la vitesse, la hauteur de son et la distortion. Par défaut ces paramêtres sont réglés sur :

voice.SetSpeed(800); 
voice.SetPitch(700);
voice.BendingOff();

Prononcer les mots

Ajouter du vocabulaire

L'encodage LPC (Linear Predictive Coding) de la voix et son formatage pour l'émulateur de TMS5220 n'est pas une mince affaire. Après pas mal de recherches, je n'ai trouvé qu'un vieux logiciel 16bits ( ne pouvant s'éxécuter que sur windows xp ! ) du nom de QBoxpro que l'on peut trouver sur cette page. L'utilisation de ce logiciel étant peu documentée (voir ici ), la tâche n'était pas facile. D'autant plus que j'ai entrepris de traduire un dictionnaire français de 142694 mots en chaines LPC directement utilisables sous Arduino. Une fois les homophones filtrés, cela a abouti à la création d'une base de donnée de 65 Mo contenant pas moins de 71343 chaines LPC distinctes. Evidement, l'automatisation du processus de lecture et d'encodage des mots m'as permis d'arriver au terme de cette entreprise. Je suis fière de pouvoir vous présenter le résultat :

Suivez ce lien pour accéder à la base de donnée des chaines LPC

La vidéo ci-dessous montre à quel point il est facile d'ajouter des phrases dans vos projets :

Restrictions importantes

Pour rappel, l'utilisation de la librairie talkietz impose les restrictions suivantes :

  • La librairie de restitution vocale ne fonctionne que sur les cartes à base de processeurs ATMEGA168 ou ATMEGA328 cadencés à 16Mhz. Vous ne pouvez donc utiliser que les cartes Arduino Uno, Duemilanove ou Diecimila. Cela ne fonctionnera pas avec une Mega ou une Leonardo !
  • La librairie impose l'utilisation de la broche 3, il est impossible d'utiliser une autre broche pour la restitution vocale.
  • La librairie talkietz utilise le Timer1 et le Timer2 ce qui entraîne une incompatibilité avec par exemple l'instruction analogWrite() et avec un grand nombre d'autres bibliothèques Arduino comme PWM, IRremote, Servo … A tester au cas par cas !

Afin d'outrepasser toutes les limitations ci-dessus, Technozone51 a développé un prototype de shield Arduino qui intègre la totalité de la base de donnée des chaines LPC stockées dans de la mémoire Flash. Le shield se commande par une simple liaison série et ne monopolise donc plus votre carte Arduino qui peut alors utiliser toutes les autres librairies sans craindre une incompatibilité ! De plus le shield est utilisable sur toutes les cartes arduino : y compris la mega ou la Leonardo …

Utilisation avec Blockly@rduino

A venir …

parole/faire_parler_vos_cartes_arduino.txt · Dernière modification: 2015/09/25 16:26 par admin