Je vais présenter ici un script simpliste pour générer un signal midi depuis une application NodeJs.
Installation
Pour cet exemple, nous avons besoin de :
- NodeJs
- Express
- EasyMidi
mkdir Project
cd Project
npm init
npm install express
npm install easymidi
En complément, il nous faut installer 2 logiciels tiers :
LoopMidi qui nous permet de créer un périphérique midi virtuel
et
Midi-OX qui permet de visualiser les logs.
Configuration
LoopMidi
Démarre LoopMidi et créé un nouveau périphérique en lui assignant un nom et en appuyant sur le bouton "+"
Midi-OX
Démarre Midi-OX et affiche le moniteur si il n'apparait pas
Ensuite, plug LoopMidi avec midi-ox en allant dans Options->Midi Devices
Pour finir, sélectionne le périphérique que vous avez créé avec LoopMidi dans la partie "MIDI Inputs" (1) et "Microsoft GS Wavetable Synth" dans "MIDI Outputs" (3). Si tout est ok, ils apparaîtront respectivement dans "Port Map Objects" (2) et "Port Mapping" (3).
Main.js
Dans le dossier du projet, ajoute le fichier main.js
let easymidi = require("easymidi")
let express = require('express')
let output = new easymidi.Output("NAME OF VIRTUAL DEVICE")
const app = express()
let is_on = false;
app.get('/', function (req, res) {
res.sendFile(__dirname + '/index.html');
})
app.post('/click', (req, res)=>{
console.log('received')
output.send("cc", {
controller: 37,
value: (is_on) ? 0:127,
channel: 0
})
is_on = !is_on;
res.sendStatus(201);
})
app.listen(3000)
Ce script génère un serveur http affichant simplement un bouton.
Le but du script est de déclancher un signal midi chaque fois que le bouton "ON/OFF" est cliqué
Pour lier le script au périphérique midi virtuel, il faut indiquer le nom du périphérique à la ligne suivant :
let output = new easymidi.Output("NAME OF VIRTUAL DEVICE")
Ensuite, création du fichier index.html suivant :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="button">ON/OFF</button>
<script>
document.getElementById('button').onclick = ()=>{
fetch('/click', {method: 'POST'})
}
</script>
</body>
</html>
Start
Execute le script main.js
node main.js
Et ouvre la page http://localhost:3000 pour afficher le bouton d'envoi de signal midi. Chaque fois que le bouton est cliqué, un signal midi est envoyé au périphérique LoopMidi et intercepté par Midi-OX.
Bravo, tu sais envoyer un signal midi avec NodeJs :)
Sources
Pour cette présentation, je me suis beaucoup aidé de cette vidéo
Pour en savoir plus sur les signaux possible à envoyer, je conseille de lire la section "Message Reference" sur le github de easymidi
Tous les codes pour cet exemple sont disponible sur mon github
Top comments (0)