From 68b4b9f5a925efcea6b13e5415f940d30106d5f9 Mon Sep 17 00:00:00 2001 From: cvancau Date: Sun, 9 Aug 2026 16:36:17 +0200 Subject: [PATCH] Ajouter src/utils/midiHelper.js --- src/utils/midiHelper.js | 47 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/utils/midiHelper.js diff --git a/src/utils/midiHelper.js b/src/utils/midiHelper.js new file mode 100644 index 0000000..215e7f5 --- /dev/null +++ b/src/utils/midiHelper.js @@ -0,0 +1,47 @@ +// Stocke l'interface MIDI physique de sortie +let activeMidiOutput = null; + +/** + * Initialise l'accès à la Web MIDI API du navigateur (Exige un contexte HTTPS ou localhost) + */ +export const initWebMidi = () => { + if (navigator.requestMIDIAccess) { + navigator.requestMIDIAccess({ sysex: true }) // REQUIS pour le SysEx du microKORG + .then((midiAccess) => { + const outputs = Array.from(midiAccess.outputs.values()); + if (outputs.length > 0) { + activeMidiOutput = outputs[0]; // Sélectionne par défaut la première interface physique + console.log(`[MIDI ALAPATCH] Connecté au port de sortie : ${activeMidiOutput.name}`); + } else { + console.warn("[MIDI ALAPATCH] Aucune interface de sortie MIDI physique trouvée."); + } + }) + .catch(err => console.error("[MIDI ALAPATCH] Accès refusé par le navigateur : ", err)); + } else { + console.error("[MIDI ALAPATCH] Ce navigateur ne gère pas l'API Web MIDI."); + } +}; + +/** + * Transmet un message de changement de paramètre (Parameter Change) en SysEx + * @param {number} parameterId - L'adresse interne du bouton (ex: 0x1E pour le Cutoff) + * @param {number} value - La valeur du curseur (0 à 127) + */ +export const sendMicroKorgParam = (parameterId, value) => { + if (!activeMidiOutput) return; // Si aucune carte MIDI n'est branchée, on ignore + + // Trame System Exclusive standard du protocole Korg microKORG Original (2002) + const sysExMessage = [ + 0xF0, // Début du message SysEx + 0x42, // Identification du fabricant (Korg) + 0x30, // Canal MIDI Global (0x30 = Canal 1) + 0x58, // Identification du modèle (microKORG) + 0x41, // Type de commande : Parameter Change + parameterId, // ID du potentiomètre ciblé (ex: 30 pour le Cutoff) + value, // Position du curseur (0-127) + 0xF7 // Fin du message SysEx + ]; + + // Envoi physique immédiat dans le câble USB-MIDI + activeMidiOutput.send(sysExMessage); +};