Tool

Virtual MIDI controller

Sixteen pads, eight faders, a pitch bend strip, a program change, transport buttons and a panic button, all sending real MIDI from a browser tab. The pads play drum sounds of their own, so it works before any MIDI is connected. Nothing is uploaded.

Press a pad, or the keys Z X C V, A S D F, Q W E R, 1 2 3 4.

Not sending MIDI yet. The pads still play their own sounds.

Pads

Faders

center

Play it

  • You: Press a pad with the mouse or a finger, or use the keys Z X C V, A S D F, Q W E R and 1 2 3 4, which sit in the same four rows as the pads.
  • The page: Plays a drum sound, lights the pad and shows the MIDI message it made, in words and in hex.
  • Check: The bottom left pad, Z, is the bass drum, note 36.

Hold a pad and the note stays on, because Note Off is sent when you let go.

Send it to a music app or a device

  1. Open this page in Chrome, Edge or Firefox.
  2. Press Send to a MIDI output and allow MIDI.
  3. Pick the output: a synth, an interface, or a virtual cable to an app on the same computer.
  4. In the music app, turn that port on as a MIDI input and arm a track.

On a Mac the virtual cable is the IAC Driver, which is built in, and the IAC Driver page turns it on. The browser sends to a port, and the music app listens to the same port. Safari does not offer MIDI to web pages, so there the pads only play their own sounds.

Know what each control sends

ControlMessageBytes, on channel 10
Pad downNote On, with the velocity from the slider99, note, velocity
Pad upNote Off89, note, 00
FaderControl Change, value 0 to 127B9, controller, value
Pitch bendPitch Bend, 0 to 16383, and back to the center when you let goE9, fine half, coarse half
Send program changeProgram ChangeC9, program
Start, Continue, StopThe transport messagesFA, FB, FC
PanicAll Sound Off, All Notes Off and sustain up, on every channelBn 78 00, Bn 7B 00, Bn 40 00

The page starts on channel 10 because that is where General MIDI instruments keep their drums. Change the channel at the top and every control follows. The MIDI message decoder reads any of these bytes back into words.

Teach a knob with one fader

  • You: Put the music app's knob into MIDI learn, then move one fader here.
  • The app: Ties the knob to that fader's controller number on that channel.
  • Check: Move the fader again and the knob follows.

Move only one control while an app is learning, or it may learn the wrong one. MIDI learn explains the idea, and the MIDI CC list names every controller number.

Put pads and faders on a game controller

InputConfig, the free Mac app I make, sends the same messages from hardware you can hold: buttons send notes, and sticks and triggers send Control Change or pitch bend, through its own virtual MIDI port that music apps see whenever it runs. A trigger is a fader you can squeeze, and a stick is two of them. Gamepad to MIDI on a Mac builds a playable layout, and MIDI output lists every message it can send.

Questions

What is a virtual MIDI controller?

Software that sends the same MIDI messages a hardware controller would: notes from pads, Control Change from faders and knobs, pitch bend and program changes. This one runs in a browser tab.

Can a web page send MIDI to a DAW?

Yes, in Chrome, Edge and Firefox, which offer MIDI to web pages. On a Mac, turn on the IAC Driver in Audio MIDI Setup, choose it as the output here, and enable the same bus as a MIDI input in the DAW.

Does the virtual MIDI controller work in Safari?

The pads and their built-in drum sounds do. Sending MIDI does not, because Safari does not offer MIDI to web pages.

Which notes do the pads send?

Notes 36 to 51 to begin with, the General MIDI drum notes from Bass Drum 1 up, with the lowest note at the bottom left. Change First pad note to move all sixteen.

Which keys play the pads?

The four rows 1 2 3 4, Q W E R, A S D F and Z X C V, laid out like the pads on screen. Z is the bottom left pad.

Can I change which CC a fader sends?

Yes. Type any controller number from 0 to 127 in the box beside a fader. The page shows that controller's standard name.

What does the panic button send?

All Sound Off (CC 120), All Notes Off (CC 123) and sustain pedal up (CC 64 at 0) on all sixteen channels, which silences a stuck note on most instruments.

Does it send MIDI clock?

No. It sends Start, Continue and Stop, which are single messages. A clock is a steady stream of 24 messages a beat, which is a job for a DAW or a hardware clock.

Related

Download InputConfig on the Mac App StoreFree. macOS 14 or later. No account, nothing leaves your Mac. Open source on GitHub.

Updated