Cette page décrit la mise en oeuvre d'une carte son de chez Robertsonics
portant le nom de "Wav trigger". Une réalisation de e.serinette basée sur cette
carte avait été présentée par Yann Baraffe
ici.
Pour de plus amples renseignements consulter le
site du fabricant.
Avertissement : Il semblerait que cette carte soit désormais remplacée
par une nouvelle carte appelée Tsunami et qui serait plus performante. Ceci étant,
il est toujours possible de commander la Wav trigger dans plusieurs boutiques
internet ou même directement chez
Sparkfun qui a été associé
à son développement.
Présentation
Cette carte n'est pas un synthétiseur à proprement parler. Elle ne fabrique
aucun son et comme son nom l'indique, elle joue et enchaine des fichiers au
format .wav qui sont stockés dans une carte mémoire au format Micro SD.
La carte est construite autour d'un microcontrôleur ARM de type STM32 et elle
inclut un convertisseur CNA ainsi qu'un petit ampli. Cet ampli de faible
puissance peut être désactivé et on dispose également d'une sortie sur un jack
pouvant attaquer un ampli BF externe.
Dans notre cas, les fichiers correspondront aux notes que l'on veut faire jouer
à notre instrument. On trouvera donc un fichier .wav par note.
L'adressage des fichiers à jouer peut s'effectuer selon 3 modes :
- Une sélection directe au moyen de 16 boutons que l'on peut raccorder sur un
des côtés de la carte.
- Un ensemble de commandes envoyées via une liaison série.
- Enfin et c'est là que ça devient intéressant, ces commandes peuvent également
prendre la forme de simples messages midi de type note On ou Off.
Câblage et alimentation
Dans le cas d'une carte son pour e.serinette, on ne peut faire plus simple
puisqu'il suffit de la raccorder aux 3 fils du connecteur midi d'une carte PPCaP
: Le 5 V, la masse et la sortie midi. Dans ce cas, on effectuera le strap 5V sur la
carte Wav trigger. Son rôle est de choisir la source du 5 V : soit externe s'il
est présent, soit produit par le régulateur local en son absence.
Mais... il s'avère que la Wav trigger tire pas mal sur le 5V (environ 200 mA) et
ça fait bien chauffer le
régulateur d'une carte arduino de type Nano. Il est donc
préférable de l'alimenter par son connecteur d'alimentation et dans ce cas on ne fait pas le
pont sur le 5V. On veillera toutefois à ne pas non plus dépasser 12 V car
cette-fois-ci, ce sera le régulateur de la Wav trigger qui chauffera !
Côté raccordement, rien de difficile
Les échantillons
Ou "samples" ou encore "Soundfonts" qui sont les dénominations sous lesquelles on peut les trouver sur le
web.
Là, ça se complique un petit peu.
1. Ces échantillons doivent obligatoirement être au format .wav, non compressés,
codés en 16 bits stéréo et échantillonnés à 44100 Hz. Autrement dit,
c'est le standard CD. Attention aux échantillons mono que l'on trouve assez
souvent sur le web
et qui ne conviennent pas. Les fichiers au format SF peuvent être convertis en .wav
avec un logiciel comme Audacity (importation en "raw", découpe et
exportation...).
2. Tous les fichiers .wav doivent être situés à la racine de la carte SD (pas de
répertoires).
3. De manière à différencier les notes midi ainsi que les différents timbres
d'instruments, le nommage des fichiers .wav doit suivre des règles très précises et
pas forcément simples.
Le principe de base est de faire commencer le nom du fichier par le numéro midi
de la note qu'il joue. C'est assez trivial pour le premier jeu de notes (premier
instrument), mais comme les développeurs de la Wav trigger ont voulut économiser
de la mémoire, la numérotation du deuxième jeu continue après la 128ème note du
premier et ça devient vite le bazar. Il existe des formules de calcul sur le
site de Robertsonics, mais le plus simple
est encore de se référer à
ce document.
4. Il faut aussi savoir qu'on ne peut pas faire boucler les échantillons pour
produire des notes très longues. Donc la durée maximale des notes que l'on peut
sortir ne dépend que de la durée des échantillons. Pas question donc de jouer un
bourdon continu sur Amazing grace avec des échantillons de 3 secondes ;o)
5. Enfin, toujours à la racine de la carte SD on doit trouver un fichier nommé
wavtrigr.ini qui au plus simple ne comporte que la ligne : #MIDI 3.
La présence de ce fichier est actée par 3 clignotements de la led rouge de la
Wav trigger lors de sa mise sous tension. Il peut être construit au moyen de
cet utilitaire.
A titre d'exemple, voici le contenu de ma carte SD
(140 Mo) qui contient 6 timbres différents. Le wavtrigr.ini est également
présent. Donc il suffit de coller le contenu du répertoire Carte_2_PP
sur une carte SD et ça devrait fonctionner à condition que la fonction de
changement d'instruments de PPCaP envoie les bon messages Program change.
Il faut donc également charger ce fichier
personnalisé d'instruments dans PPCaP.
La première position du sélecteur d'instruments délivre le n° 79 de manière non
modifiable. Ce numéro d'instrument étant impossible pour la Wav trigger, elle ne
donnera aucun son dans cette position. Ensuite à partir de la position 2 on aura successivement les
numéros suivants qui seront envoyés et les timbres correspondants seront joués
par la Wav trigger.
- n° 1 : L'orgue à flûtes d'un célèbre outil de composition musicale.
- n° 0 : L'un de mes orgues à flûtes
- n° 2 : L'orgue de foire de Yann Baraffe
- n° 3 : Le même orgue de foire sans les percussions
- n° 4 : Un accordéon diatonique à 2 registres
- n° 5 : Un autre accordéon diatonique à 3 registres
A noter : L'ordre "bizarre" 1, 0, 2, 3... est requis par les versions de
PPCaP jusqu'à la 6.1. A partir de la 6.2 on peut mettre l'ordre naturel 0, 1, 2,
3...
La carte SD
Et ça se complique encore ;o)
J'ai essayé 4 type de cartes SD avant d'en trouver une qui convient.
Robertsonics donne des
recommandations
et je ne saurais que trop conseiller d'en tenir compte, ce sera du temps de
gagné ! Ce qu'il faut retenir, c'est que ce n'est pas parce qu'une carte est
performante pour de la vidéo ou du son en streaming (cartes pour appareil photos,
téléphones ou caméras
"de sportifs" par exemple) qu'elle sera également performante sur de multiples
accès aléatoires avec une latence de l'ordre de la milliseconde qui sont les
conditions requises
pour le fonctionnement de la Wav trigger.
Il existe un test pour savoir si une carte est éligible ou non. On y reviendra
plus loin. En tous cas, la carte ci-dessous convient parfaitement (bien vu René
;o)) et n'est pas très
onéreuse.
Une carte non adaptée se manifeste par la présence de sortes des craquements
(des "glitches") dans le son, voir même d'un plantage de la Wav trigger rendant
sa sortie muette à tout moment pendant l'exécution d'un morceau.
En résumé :
- Se procurer une Wav trigger.
- Câbler 5Vin, Rx et GND de la Wav trigger sur un connecteur 3 points vers le
connecteur midi de PPCaP.
- Alimenter la Wav trigger en 12 V maximum par son connecteur
d'alimentation (+ au centre).
- Se procurer une carte SD comme ci-dessus et y déposer le contenu de
Carte_2_PP. On doit avoir tous les fichiers "à plat" à la racine.
- Par le menu Paramètres de ProCaP, charger le fichier
table_instrus_Wav_trigger.txt dans l'arduino de la e.serinette.
- Positionner le commutateur d'instruments à partir de la position 2.
- Et jouer !
Exemple d'intégration
Associée à un petit ampli en classe D, cette carte donne des résultats assez
bluffants. La tentation était donc grande de l'intégrer dans un nouveau petit
instrument.
Batterie Li-Ion de 16.8 V. D'où les résistances sur l'alim de
la Wav trigger pour descendre à environ 10 V.
Commandes "tout aligné" façon PP ;o)
Dimensions : 150 x 150 x 300 mm. Coffret en merisier massif et
poids total de 3.3 kg.
Musique !
Attention : Ce qui suit
n'est absolument pas nécessaire à la mise en œuvre de la carte et s'adresse en
premier lieu aux curieux ayant un minimum d'expérience en électronique !
Test d'une carte SD/Modification de firmware
Ce test nécessite le chargement d'un firmware spécifique dans la Wav trigger.
Voir
ici.
On téléchargera également l'outil de
mise à jour.
Pour effectuer ce chargement ou dérouler le test, il faut passer par une
interface USB/serial et un émulateur de terminal série. La carte d'interface habituellement
dédiée à cet usage est la "FTDI basics" et elle n'est pas forcément bon
marché. Qu'à cela ne tienne... Pour un usage occasionnel on peut se débrouiller avec une bonne
vieille carte arduino.
L'idée est d'utiliser le composant USB de l'arduino tout en
empêchant l'Atmega de démarrer.
1. La première étape consiste à récupérer les signaux CTS (Clear To Send) et DTR
(DaTa Ready). C'est un peu sportif mais ça se fait. Voir ci-dessous sur une
carte Nano.
2. Ensuite on procède au raccordement des 6 fils du connecteur
série de la Wav trigger comme suit :
. GND arduino sur le GND de la WT
. CTS de l'arduino (le fil jaune ici) sur la borne suivante de la WT
. 5V de l'arduino sur le 5 V WT
. RX arduino sur RX de la WT
. TX arduino sur TX de la WT
. Et enfin le DTR de l'arduino (fil violet) sur la dernière broche
3. Puis on fait le pont 5 V sur la Wav trigger pour signifier
qu'on va l'alimenter par l'arduino et on bascule le commutateur qui est à côté
du connecteur d'alimentation, de la position Run à la position Load
4. Dernière chose : On empêche l'Atmega de la carte arduino de
démarrer en mettant sa broche Reset à la masse (reset permanent).
5. Il ne reste plus qu'à :
- Raccorder l'USB
- Lancer l'outil de mise à jour précédemment téléchargé.
- Sélectionner le fichier hexa du nouveau firmware et cliquer Program quand la
touche passe en vert.
On peut alors utiliser le programme de test des cartes SD :
- Rebasculer le commutateur de la carte Wav trigger en position RUN.
- Débrancher puis rebrancher l'USB de manière à provoquer un cycle power off/on
qui va redémarrer le processeur de la Wav trigger.
- Lancer l'IDE arduino puis son terminal série en spécifiant une vitesse de
57600 bauds.
On a le choix entre 4 commandes mono-caractère que l'on peut
envoyer par le terminal :
- La lettre i (I) affiche les informations concernant la carte.
- La lettre t (T) lance le test.
- La lettre s (S) stoppe le test.
- La lettre r (R) donne les résultats du test en cours à tout moment pendant son
déroulement.
Le programme de test écrit des fichiers de données sur la carte
et les relit ensuite de manière aléatoire en chronométrant les temps d'accès. Le
test complet porte sur 1 million de lectures et dure environ une vingtaine de
minutes.
- Une carte peut être considérée comme "jouable" si on ne comptabilise aucune
opération qui dure plus de 20 ms. Mais il ne faudra pas compter sur des
enchainement rapides de fichiers. Donc pas bon pour nous.
- Il en faut le moins possible entre 2 ms et 20 ms.
- Une carte sera considérée excellente, en particulier pour le contrôle en midi
si aucun cycle ne dépasse 2 ms.
Séquence d'initialisation et résultats de tests sur une carte
médiocre (2716 lectures entre 2 et 5 ms)
Pour terminer, on revient au firmware initial de la carte par la
même procédure : Commutateur sur Load, sélection du fichier hexa etc...
Et puis ça peut être l'occasion de passer à la dernière version en sachant que
toutes les versions
sont ici.