Comment faire parler vos cartes Arduino(s)

Transcription

Comment faire parler vos cartes Arduino(s)
2016/09/29 10:30
1/6
Comment faire parler vos cartes Arduino(s) ?
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 ).
●
●
●
Peter Knight a dévellopé la librairie talkie ( disponible sur github ) qui émule le fonctionnement de
ces puces vocales sur une carte Arduino Uno.
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
Technozone51 Documentation Center - http://www.technozone51.fr/dokuwiki2/
Last
update:
parole:faire_parler_vos_cartes_arduino http://www.technozone51.fr/dokuwiki2/doku.php?id=parole:faire_parler_vos_cartes_arduino
2015/09/25
16:26
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
●
●
Pour commencer, téléchargez la librairie talkietz. Dézipper l'archive et installez le répertoire talkietz
dans le répertoire libraries du logiciel 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.
http://www.technozone51.fr/dokuwiki2/
Printed on 2016/09/29 10:30
2016/09/29 10:30
3/6
Comment faire parler vos cartes Arduino(s) ?
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();
Technozone51 Documentation Center - http://www.technozone51.fr/dokuwiki2/
Last
update:
parole:faire_parler_vos_cartes_arduino http://www.technozone51.fr/dokuwiki2/doku.php?id=parole:faire_parler_vos_cartes_arduino
2015/09/25
16:26
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 :
http://www.technozone51.fr/dokuwiki2/
Printed on 2016/09/29 10:30
2016/09/29 10:30
5/6
Comment faire parler vos cartes Arduino(s) ?
Video
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 …
Technozone51 Documentation Center - http://www.technozone51.fr/dokuwiki2/
Last
update:
parole:faire_parler_vos_cartes_arduino http://www.technozone51.fr/dokuwiki2/doku.php?id=parole:faire_parler_vos_cartes_arduino
2015/09/25
16:26
From:
http://www.technozone51.fr/dokuwiki2/ - Technozone51 Documentation Center
Permanent link:
http://www.technozone51.fr/dokuwiki2/doku.php?id=parole:faire_parler_vos_cartes_arduino
Last update: 2015/09/25 16:26
http://www.technozone51.fr/dokuwiki2/
Printed on 2016/09/29 10:30

Documents pareils