fbpixel
Étiquettes : ,

Afin de générer des sons synthétiques sur votre ordinateur à l’aide d’une interface et créer de la musique, il est possible de transformer un Arduino en appareil MIDI.

Matériel

  • Ordinateur
  • Arduino avec port USB

Introduction au protocole MIDI

Le MIDI (Musical Instrument Digital Interface) est un protocole de communication entre instruments électroniques, contrôleurs et logiciel de musique. Il consiste à envoyer une série d’octets (commande puis données) à une vitesse de 31250 (baudrate) pour spécifier le type de message (jouer note, arrêter note, changer programme, etc.) et les informations associées (note jouée, programme sélectionné, etc.). Voici un résumé des messages MIDI.

protocol-midi-message-structure Générer des Sons avec une interface MIDI Arduino

Code pour envoyer des messages MIDI avec Arduino

Nous allons voir comment envoyer les messages MIDI via le port série. Dans cette exemple, nous allons envoyer des commandes de note successivement. Comme si on appuyait sur différentes touches d’un piano. Pour cela nous envoyons les informations suivantes dans un ordre précis:

  • commande noteOn ou Off jouer la note ou l’arrêter
  • la note jouée ou pitch
  • vitesse à laquelle la touche est enfoncée

Un grand nombre de messages existent dans le protocole MIDI afin d ‘effectuer différentes action comme changer d’instrument, moduler les notes, etc.

 int velocity = 100;//velocity of MIDI notes, must be between 0 and 127
 //higher velocity usually makes MIDI instruments louder
 
 int noteON = 144;//144 = 10010000 in binary, note on command
 int noteOFF = 128;//128 = 10000000 in binary, note off command

void setup() {
  Serial.begin(115200);
}

void loop() {
  for (int note=50;note<70;note++) {//from note 50 (D3) to note 69 (A4)
    MIDImessage(noteON, note, velocity);//turn note on
    delay(300);//hold note for 300ms
    MIDImessage(noteOFF, note, velocity);//turn note off
    delay(200);//wait 200ms until triggering next note
  }
}

void MIDImessage(int command, int MIDInote, int MIDIvelocity) {
  Serial.write(command);//send note on or note off command 
  Serial.write(MIDInote);//send pitch data
  Serial.write(MIDIvelocity);//send velocity data
}

Téleversez ce code dans le microcontrôleur Arduino avant de passer à la suite.

N.B.: la vitesse de communication MIDI est de 31250. Dans cet exemple, nous allons utiliser un convertisseur MIDI/Serial. Nous pouvons donc utiliser n’importe quel baudrate.

Configuration de génération de son MIDI avec Windows

Configurer un instrument MIDI virtuel

Pour générer du son, il nous faut un logiciel de synthèse de son ou un DAW (Digital Audio Workstation). Les DAW peuvent être assez compliqués à prendre en main. Pour ce tutoriel, nous allons utiliser un synthétiseur de son virtuel très simple: CoolSoft Virtual MIDI Synth.

  • Téléchargez et installer le logiciel CoolSoft
coolsoft-virtualmidisynth Générer des Sons avec une interface MIDI Arduino
  • Dans l’onglet MIDI Mapper, sélectionnez VirtualMIDISynth dans le périphérique par défaut de Windows Media Player
coolsoft-virtualmidisynth-mapper Générer des Sons avec une interface MIDI Arduino
  • Dans l’onglet Option, sélectionnez le périphérique de sortie audio
coolsoft-virtualmidisynth-options Générer des Sons avec une interface MIDI Arduino
  • Appuyez sur « Appliquer »

Pour que le logiciel de synthèse fonctionne, il faut utiliser une base de son (SoundFont) pour convertir les messages MIDI en sons provenant d’un piano, par exemple. Vous pouvez retrouver une liste de SoundFonts sur la page de CoolSoft. Il vous suffit ensuite de télécharger le fichier .sf2 que vous souhaitez et l’ajouter dans l’interface CoolSoft.

coolsoft-virtualmidisynth-soundfonts Générer des Sons avec une interface MIDI Arduino

Configurer le convertisseur Série vers MIDI

La communication MIDI est un protocole particulier différent de la communication USB. Pour prendre en compte les messages MIDI envoyés par l’Arduino via le port USB, il va nous falloir un convertisseur Serial vers MIDI

Pour cela nous utilisons le logiciel Hairless Midi to Serial Bridge, qui va nous permettre de convertir les messages série en message MIDI.

  • Téléchargez et ouvrez le logiciel Hairless
hairless-midi-serial-converter Générer des Sons avec une interface MIDI Arduino
  • Sélectionnez l’Arduino que vous avez branché sur votre PC dans la liste déroulante « Serial Port »
  • Sélectionnez ensuite VirtualMIDISynth dans la liste déroulante « MIDI Out »
hairless-midi-serial-converter-converting Générer des Sons avec une interface MIDI Arduino

Si vous activez le Debug MIDI messages, vous devriez voir défiler les notes jouées et leurs vitesses.

Si la sortie audio de votre ordinateur est activée, vous dévriez entendre des notes de musique.

N.B.: Vous ne pourrez pas téléverser de code dans l’Arduino si la case Serial <->MIDI Bridge On est cochée.

Vous avez, à présent, créé votre première interface MIDI avec Arduino et pouvez faire vos premiers pas dans la synthèse sonore.

Applications

  • Créer un contrôleur MIDI avec Arduino, des boutons et potentiomètres.

Sources