Description
Select MIDI program-change records by explicit zero-based program numbers; no General MIDI instrument-name or bank-selection model.
MIDI 1.0 channel messages use a status byte identifying a message type and a channel, followed by one or two seven-bit data bytes. This family uses channel indexes 0–15 and raw program values 0–127. Raw message bytes do not include musical timing, instrument state or a MIDI file container.1
Select MIDI program-change records by explicit zero-based program numbers; no General MIDI instrument-name or bank-selection model.
When to use this tool
Use this tool to select MIDI program-change records by explicit zero-based program numbers; no General MIDI instrument-name or bank-selection model.
How to use the tool and how it works
- Enter messagesJson, programs using the field definitions below. For JSON text, serialize the explicit records in the shown shape.
- Run the operation. Correct input errors before interpreting an output.
- Read result.messages. Use the ordering, boundary rules and absence conditions described below.
Keep program-change records whose zero-based program byte occurs in programs, retaining input order and channels.2
| Input field | Meaning and units | Accepted input |
|---|---|---|
| messagesJson | JSON text encoding array of {status: number, data: array of number}. Keep the record keys and value types shown in the decoded example below. | Text, at most 8,192 UTF-16 code units; the operation’s grammar also applies. |
| programs | Program bytes 0–127 to retain, not one-based program names. | Dense list of at most 128 finite numbers; integer/shape constraints above also apply. |
These are the decoded structures used in the example’s JSON text fields. Supply the corresponding serialized JSON strings as input.
{
"messagesJson": [
{
"status": 192,
"data": [
10
]
},
{
"status": 193,
"data": [
11
]
}
]
} | Output field | Interpretation |
|---|---|
| result | Object containing the named fields below. |
| result.messages | Explicit validated or transformed {status, data} records in source order. |
{
"input": {
"messagesJson": "[{\"status\":192,\"data\":[10]},{\"status\":193,\"data\":[11]}]",
"programs": [
10
]
},
"output": {
"result": {
"messages": [
{
"status": 192,
"data": [
10
]
}
]
}
}
} Limitations and assumptions
- Program numbers are 0–127; names and bank-selection context are not inferred.
- Message data bytes must be integers 0–127 and channel statuses 128–239. Channels are zero-based; this family does not implement MIDI 2.0 UMP, audio synthesis or a complete timed MIDI file.
- Every declared top-level input field is required and unexpected fields are rejected. Ordinary strings are limited to 8,192 UTF-16 code units and lists to 128 entries, with tighter operation-specific bounds where stated. JSON text has bounded nesting and node counts.
- Numeric outputs must be finite and no larger in absolute magnitude than the safe-integer limit; operations returning exact large integers use decimal text. Positions are zero-based and spans end exclusively unless the operation explicitly states a different convention.
Alternative or Complementary methods
Separate channel-message encoding from timing, running status and device interpretation. Use a MIDI sequencer or full file/stream parser when those additional layers matter.
References
-
Summary of MIDI 1.0 Messages — The MIDI Association
-
Tool behavior and example: MIDI Channel Message Program Selector — tool.io
Similar or alternative tools
- MIDI Channel Message Controller Selector
Select explicit MIDI control-change records for a supplied seven-bit controller number, preserving channels and occurrence order.
- MIDI Channel Message Byte Count
Return required MIDI 1.0 channel-message byte counts from an explicit status, excluding running-status omission and system messages.