DEV Community

Remy Jacquand
Remy Jacquand

Posted on

Déclancher un signal midi avec NodeJs sur Windows

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
Enter fullscreen mode Exit fullscreen mode

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 "+"
add loopmidi device

Midi-OX

Démarre Midi-OX et affiche le moniteur si il n'apparait pas
open monitor midi-ox

Ensuite, plug LoopMidi avec midi-ox en allant dans Options->Midi Devices
option midi-Ox

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).

midi-ox midi device

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)
Enter fullscreen mode Exit fullscreen mode

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")
Enter fullscreen mode Exit fullscreen mode

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>
Enter fullscreen mode Exit fullscreen mode

Start

Execute le script main.js

node main.js
Enter fullscreen mode Exit fullscreen mode

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.

log 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

Latest comments (0)