diff --git a/src/midi.js b/src/midi.js index 0f533a0..1653ad7 100644 --- a/src/midi.js +++ b/src/midi.js @@ -1,4 +1,8 @@ -export async function sendMidiMessage(midiChannelName, sampleNumber, midiAccess) { +export async function sendMidiMessage( + midiChannelName, + sampleNumber, + midiAccess +) { try { console.log(midiChannelName, sampleNumber); const availableMidiOutputs = midiAccess.outputs.values(); @@ -16,6 +20,7 @@ export async function sendMidiMessage(midiChannelName, sampleNumber, midiAccess) } } + if (!midiOut) return; // MIDI Note On (Play Note) midiOut.send([0x90, 35 + sampleNumber, 127]); diff --git a/src/script.js b/src/script.js index 152e8ba..60596c4 100644 --- a/src/script.js +++ b/src/script.js @@ -4,7 +4,6 @@ import { DataStream } from "./socket.js"; import { Renderer } from "./render.js"; document.addEventListener("DOMContentLoaded", async () => { - const midiAccess = await navigator.requestMIDIAccess(); const conductor = new Conductor(); await conductor.init(); @@ -13,24 +12,27 @@ document.addEventListener("DOMContentLoaded", async () => { let strikes = 0; const strikeEvery = 2; - const renderer = new Renderer(); dataStream.addEventListener("strike", () => { console.log(strikes); //** select instrument */ - if (strikes === strikeEvery){ - + if (strikes === strikeEvery) { const keys = Object.keys(instruments); const randomIndex = Math.floor(Math.random() * keys.length); const selectedInstrument = instruments[keys[randomIndex]]; - + //** select sample */ const numSamples = selectedInstrument.numSamples; const randomSampleNumber = Math.floor(Math.random() * numSamples); - + renderer.placeIcon(selectedInstrument); - sendMidiMessage(selectedInstrument.midiChannelName, randomSampleNumber + 1, midiAccess); + if (midiAccess) + sendMidiMessage( + selectedInstrument.midiChannelName, + randomSampleNumber + 1, + midiAccess + ); strikes = 0; } strikes++;