Site icon AranaCorp

Générer des Sons avec une interface MIDI Arduino

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

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.

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:

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.

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.

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.

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

Sources

Quitter la version mobile