Input observations
{{ summaryValue }}

{{ summaryLine }}

Input{{ example ? 'Synthetic' : 'Local only' }}Messages{{ values ? values.stats.messages : '—' }}Expected notes{{ values && values.stats.expected ? values.stats.expected : 'Not set' }}

{{ state }}

MIDI input setup
Start requests input access. Exports include device labels and messages; observations stay in this tab. Reset before switching inputs or inspecting an example.

{{ status }}

Choose the range your controller sends. Presets are starting points; transposition may change the numbers.
Inclusive lowest and highest MIDI note, from 0 to 127.
to
All channels by default. System messages remain visible with any channel.
Hide clock and active sensing rows without changing accepted message counts.
{{ hide_clock ? 'Hidden' : 'Shown' }}

{{ exportStatus }}

{{ reportText }}

{{ exportStatus }}

{{ header }}Copy
{{ cell }}

No matching observations.

Synthetic example — no physical device tested.

{{ exportStatus }}

{{ header }}Copy
{{ cell }}

No controller messages observed in this channel filter.

Synthetic example — no physical device tested.

{{ exportStatus }}

{{ header }}Copy
{{ column === 0 ? Number(cell).toFixed(1) : cell }}

No matching observations.

Synthetic example — no physical device tested.

{{ values.events.length }} latest rows of {{ values.stats.event_rows_total }} after filters; all retained records remain in this session.

{{ exportStatus }}

Chart unavailable; note velocities remain in the ledgers.

No nonzero note-on velocities in the selected channel filter.

Similar tools

A computer can receive every key press from a MIDI keyboard while producing no sound. Musical Instrument Digital Interface (MIDI) carries performance instructions, including which note starts, how it was played and when it ends. A synthesizer or software instrument turns those instructions into audio. Checking that messages arrive helps separate a connection or routing problem from a problem with the instrument producing the sound.

The same messages also connect drum pads, pedals, faders and other controls to music software. A useful check identifies what each action sends, then compares it with what the receiving instrument expects. Four terms explain most of that conversation.

Note number
A number from 0 to 127 identifying a note or mapped trigger. A keyboard usually uses it for pitch, while a drum pad can use it to select a percussion sound. Transposition changes the number sent by the same physical key.
Velocity
The value attached to a new note, from 1 to 127. It can influence loudness or tone according to the receiving instrument. It is not a calibrated measurement of finger force or sound level.
Channel
One of 16 numbered groups for routing messages. The same note number on two channels can address different musical parts, so a release on one channel does not release the other channel's note.
Control change (CC)
A controller number paired with a value. Common assignments include modulation, volume and sustain, but configurable hardware and software mappings can give a control a different job.

Velocity and pressure describe different parts of a performance. Velocity accompanies the initial strike. Aftertouch describes pressure applied afterward, either for an individual note or for a whole channel. Some controllers use a fixed velocity or offer response curves, so repeated values can reflect a setting rather than a faulty sensor.

Releasing a key normally sends a Note off message. A Note on message with velocity zero also means release. Sustain is a separate control message, and a receiving instrument may continue sounding after the key has been released. A record of key messages therefore cannot establish exactly which sounds remain audible.

A meaningful coverage check uses the note numbers the controller actually sends. Octave names vary between products, and transposition or split keyboard settings can change the expected range or channel. An unplayed note provides no evidence of failure. Even after a deliberate press, missing input can come from the connection, operating system, browser access or routing, so message observations alone cannot certify a physical defect.

How to Use This Tool:

Connect the intended controller and keep this tab visible while capturing. One MIDI input is monitored at a time.

  1. Choose Expected notes if you want to check coverage. The default is No expected range. Keyboard presets are starting points, so account for any transposition. For Custom note range, enter both endpoints as whole numbers from 0 to 127, with the lower number first. Equal endpoints check one note. A missing, reversed or invalid endpoint keeps Start disabled until corrected.
  2. Select Start and allow MIDI access if the browser asks. When no input is selected, the first connected input exposed by the browser is selected automatically. Check MIDI input and wait for the listening status before playing.
    If the selected input is wrong, select Stop, save any observations you need, then select Reset. You can then choose another MIDI input and start again.
  3. Play and release each note you intend to check, then move each relevant control through its intended travel. Repeat a few notes with softer and firmer strikes. During live capture, the numbered grid lights notes whose messages are awaiting release.
  4. Select Stop before changing the expected range or the filters under Advanced. Initially, Channel filter includes all channels and repetitive events are shown. Changing these settings reviews the retained observations without requiring another performance.
  5. Review Observation report and Note coverage, then use Start to repeat an unexpected observation on the same input. Stop preserves the evidence, and Start resumes the same session. Keep the report and relevant ledger if you need to describe the behavior to support.

Inspect synthetic example provides an illustrative recording without accessing hardware. Reset is required before replacing retained live observations with the example, and before starting live capture from the example. Reset clears the observations but keeps the range and filter preferences. It does not revoke browser MIDI permission.

Interpreting Results:

Observed means that a Note on with nonzero velocity arrived in the selected channel view. Never observed means no such strike was received, even if a release message arrived. For an expected note that remains unobserved, check its transmitted number and channel before repeating the press. The expected range marks notes to check; it does not discard observations outside that range.

  • Messages counts accepted MIDI messages in the selected channel view, including system messages. Capture boundaries and rejected inputs are not accepted messages. A rising count with no observed notes can come from controllers or timing messages.
  • Controller ledger keeps each channel and CC number separate. Minimum, maximum and latest values describe the messages received so far. A partial sweep or a configured value range can explain a narrow span; it is not automatically a defective fader or pedal.
  • Velocity response plots received strike velocity against note number. Repeat the same notes while keeping the controller's velocity settings unchanged when comparing responses. The points show transmitted values, not measured physical force.
  • Awaiting release identifies a channel and note pair without a matching release in the current uninterrupted capture. It does not diagnose a stuck key or confirm that audio is still sounding.

With All channels, note coverage combines the same note number across channels. Two strikes of note 60 on different channels still count as one distinct observed note, although two channel and note pairs may await release. Use a single-channel view when that distinction matters.

The channel filter recalculates the summaries, ledgers and velocity points from retained data. System messages remain included. Hide repetitive events only removes Clock and Active sensing rows from the event view; accepted-message counts remain unchanged. If the filtered view contains no accepted messages, the result tabs are hidden until a view with accepted messages is selected or new matching messages arrive.

Technical Details:

MIDI 1.0 channel messages begin with a status byte identifying the message family and channel. The following data bytes each contain a value from 0 to 127. In the hexadecimal patterns below, n is the channel minus one, from 0 to F, corresponding to displayed channels 1 to 16.

Message decoding

MIDI 1.0 channel message patterns and their following data bytes
Status Message Following data bytes, in order
8n Note off Note number, release velocity.
9n Note on Note number, velocity. Values 1 to 127 start a note; zero means release.
An Polyphonic pressure Note number, pressure value.
Bn Control change or channel mode Controller number, value. Controller numbers 120 to 127 are channel-mode messages.
Cn Program change One raw program number from 0 to 127.
Dn Channel pressure One pressure value for the channel.
En Pitch bend Least significant seven bits, then most significant seven bits.

For example, 90 3C 64 contains a channel 1 Note on, note 60 and velocity 100. A later 90 3C 00 releases that note rather than adding a zero-velocity strike. Hexadecimal values describe the received bytes; note and velocity values in the ledgers are decimal.

Recognized system messages include quarter frame, song position, song select, tune request, Clock, Start, Continue, Stop, Active sensing and System reset. They have no channel. Quarter-frame data remains a raw value rather than reconstructed timecode. Song position combines two seven-bit values into a number of six-clock units.

Each accepted input must contain one complete supported message with the correct number of bytes. Unsupported status values, malformed lengths and data bytes outside 0 to 127 are rejected. System Exclusive (SysEx) messages are excluded.

Coverage and release rules

The note names use C4 for MIDI note 60. Both endpoints belong to an expected range, so its size is calculated as follows.

N = H − L + 1

Here, L and H are the lowest and highest expected note numbers, and N is the number of expected notes. The remaining count includes only expected numbers without a received nonzero Note on. Because observed notes can lie outside the expected range, subtracting the total observed-note count from N can give the wrong answer.

Every nonzero Note on adds a strike and a velocity observation. Pending releases are tracked once per channel and note number, so repeated Note ons for the same pair do not create a count of sounding voices. A Note off clears only its matching pair. A release without that pair is counted as unmatched, which can happen when capture begins after the original press.

Some received commands also clear pending note indications. These conditions describe message tracking and do not verify the response of a synthesizer.

Received commands that clear pending note indications
Received command Required value Pending notes cleared
CC 120, 123, 124, 125 or 127 0 That channel only.
CC 126 0 to 16, inclusive That channel only.
System reset No data value All channels.

Other values for those CC messages are logged without assuming a release. CC 121 and CC 122 do not clear pending notes here. Capture starts, stops, disconnections and hidden-tab pauses also clear uncertain holds. None of these clearances invent individual Note off messages or increase the release count.

Sustain values are recorded under CC 64. The conventional switch interpretation is off from 0 to 63 and on from 64 to 127, but the monitor retains the raw values and does not infer pedal-dependent sounding voices. Similarly, CC numbers with familiar labels describe conventional assignments, not verified mappings inside the receiving instrument. Paired CC values and parameter-selection sequences remain individual messages rather than being combined into higher-resolution controller settings.

Pitch-bend formula and program numbering

Pitch bend combines two seven-bit data values into one 14-bit number. Its raw value B and centered value C are calculated without rounding.

B = d1 + 128 × d2 C = B − 8192

The first data value, d₁, contains the least significant bits, and the second, d₂, contains the most significant bits. Both range from 0 to 127. Raw bend spans 0 to 16,383, with center at 8,192; the centered display spans −8,192 to 8,191. For E0 00 40, the two data values are 0 and 64, giving raw 8,192 and centered 0. A bend value does not specify semitones by itself because the receiving instrument determines the bend sensitivity.

Program change is displayed as the received number from 0 to 127. Some instruments label programs from 1 to 128, so raw program 12 can correspond to displayed program 13. The instrument's bank and program mapping determine the sound; a program number alone does not identify a universal preset.

Receipt timing

Receipt times are milliseconds relative to the capture session's starting clock. Browser event timestamps are used when valid, with a browser-clock fallback otherwise. Negative or backward times are raised to zero or the previous retained time, and corrections are identified. The event table displays one decimal place, while its CSV exports retain the underlying numeric values. Pauses do not restart the clock, so resumed capture can show a gap. These times describe receipt in the browser; they do not measure the delay from physical key movement, USB polling rate or audio latency.

Limits and Privacy:

Live capture requires HTTPS or trusted localhost, a browser with Web MIDI support and permission allowed by the browser and site policy. The operating system must expose a connected MIDI input. If no input appears, check power, the cable or interface, the controller's operating mode, operating-system recognition and any required driver. If access is denied, review the site's MIDI permission and retry Start after correcting the restriction.

  • Hiding the tab or disconnecting the active input pauses capture and preserves previous observations. Hiding the tab also cancels a pending start while permission or input opening is unresolved. Return or reconnect, then select Start to resume; capture does not resume automatically. Stop can also cancel this page's pending start, but does not revoke permission or guarantee that a browser permission prompt closes.
  • The session stops at 2,000 retained records, including accepted inputs, rejected-input records and capture boundaries. Clock and Active sensing still consume this limit when their rows are hidden. Save the evidence you need, then Reset for another session.
  • Event ledger displays and exports only the latest 100 rows after filtering. Earlier retained records still contribute to the note and controller summaries and velocity observations. An event export is therefore a bounded trace, not the complete retained history.
  • MIDI observations and input labels are processed in this tab's memory and are not uploaded by the tool. Reset, reloading or closing the page removes the observations. The URL can preserve range and display-filter preferences, but does not carry device identifiers, device labels or recorded messages.
  • Copied or downloaded reports include the selected input label and observations. Ledger and chart exports contain their selected evidence. Page and chart resources can still load over the network, so local MIDI processing does not imply that the entire page works without network access.

The tool receives MIDI 1.0 input only. It sends no MIDI messages, requests no SysEx access and generates no audio. Browser observations and synthetic examples do not certify a device's physical condition or every stage of its connection.

Worked Examples:

Coverage in the synthetic recording

With All channels selected and repetitive events Shown, choose Inspect synthetic example. It sets an expected range of 60 to 72, containing 13 note numbers. Notes 60, 64, 67 and 72 receive nonzero strikes and subsequent releases, leaving nine expected notes never observed. The 15 accepted messages include more than note strikes, so the message count exceeds the four observed notes. This is an illustrative recording with no physical device tested; the nine gaps represent notes absent from that recording.

Reviewing one channel without losing the recording

In the same synthetic recording, select Channel 1. Notes 60, 64 and 72 remain observed, while note 67 belongs to channel 2. Ten of the 13 expected notes now remain unobserved. The accepted-message count is 10, including the channel-independent Clock message. Enabling Hide repetitive events reduces the event ledger to nine rows while the message count stays at 10. Returning to All channels restores the four-note coverage view from the same retained evidence.

References: