MIDI Protocol & Serial Bus Documented by bipluk Audio Lab

MIDI Running Status Optimization

A MIDI 1.0 bandwidth optimization rule allowing repeated channel voice messages to omit the status byte, saving 33% wire bandwidth.

# Mathematical Formula & Architecture

Logic Specification
[Status: 0x90, Note: 0x3C, Vel: 0x64], [Note: 0x3E, Vel: 0x64], [Note: 0x40, Vel: 0x64] (Status 0x90 implied).
Implementation Reference:
def parse_midi_with_running_status(stream: bytes):
    last_status = None
    i = 0
    while i < len(stream):
        byte = stream[i]
        if byte >= 0x80 and byte <= 0xEF: # Channel status byte
            last_status = byte
            i += 1
            param1, param2 = stream[i], stream[i+1]
            i += 2
            yield (last_status, param1, param2)
        elif byte < 0x80 and last_status: # Running status data byte
            param1, param2 = byte, stream[i+1]
            i += 2
            yield (last_status, param1, param2)
        elif byte == 0xF0: # SysEx CANCELS running status!
            last_status = None
            end_idx = stream.find(b'\xF7', i)
            yield stream[i:end_idx+1]
            i = end_idx + 1

# Deep Technical Analysis & Historical Context

Because 31,250 baud only transmits ~3,125 bytes per second, transmitting rapid keyboard arpeggios or dense pitch bend data could easily choke the 5-pin DIN bus. To maximize throughput, the 1983 MIDI standard introduced 'Running Status'. When multiple messages of the same type (e.g. Note On, Pitch Bend) occur consecutively, the transmitter only sends the status byte once. Subsequent messages omit the status byte and send only the 2 data bytes, reducing bandwidth consumption by 33%. Crucially, any System Real-Time or System Exclusive message immediately resets and invalidates running status across the receiver's parser.

⚠

Common Studio Pitfall & Hardware Hazard

Naive software parsers that do not track running status will drop or corrupt every note after the first chord in a live MIDI stream.

# Hardware Synthesizers Using This Technology

Click any synthesizer below to explore its specific memory protect routine, factory soundbanks, and Web MIDI SysEx cloud backup engine:

# Frequently Asked Engineering Questions

Does SysEx use running status?

No. SysEx is variable-length and always begins with 0xF0. In fact, receiving 0xF0 cancels any active running status on the bus.

Related Engineering Concepts

31250 bps

Back Up Your Hardware Patches Directly in Your Browser

bipluk communicates directly with your 1980s and 90s synthesizers via Web MIDI. Zero driver headaches, automatic checksum calculation, and encrypted cloud preservation.

← Back to Complete Glossary Index