cs-midi-docs/docs/manual/02-midi/02-sending-messages.md

77 lines
2.0 KiB
Markdown

# Sending MIDI Messages
> Original: [Sending MIDI messages](https://tttapa.github.io/Control-Surface/Doxygen/d3/df7/midi-tutorial.html)
## Direct sending
Use the interface object directly when you don't need the element system:
```cpp pico
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
#include <cs_midi.h>
using namespace cs;
BluetoothMIDI_Interface midi;
int main() {
stdio_init_all();
if (cyw43_arch_init()) return 1;
midi.begin();
MIDIAddress note = {MIDI_Notes::C[4], Channel_1};
midi.sendNoteOn(note, 127);
sleep_ms(500);
midi.sendNoteOff(note, 0);
while (true) {
midi.update();
sleep_ms(1);
}
}
```
## Channel voice messages
| Method | Arguments | Description |
|--------|-----------|-------------|
| `sendNoteOn` | address, velocity | Note On |
| `sendNoteOff` | address, velocity | Note Off |
| `sendControlChange` | address, value | Control Change (0-127) |
| `sendProgramChange` | address | Program Change |
| `sendPitchBend` | channel, value | Pitch Bend (0-16383, center 8192) |
| `sendChannelPressure` | channel, pressure | Channel Pressure |
| `sendKeyPressure` | address, pressure | Polyphonic Key Pressure |
## System common messages
| Method | Arguments | Description |
|--------|-----------|-------------|
| `sendMTCQuarterFrame` | type, value | MIDI Time Code quarter frame |
| `sendSongPositionPointer` | beats | Song position (14-bit) |
| `sendSongSelect` | song | Song number (0-127) |
| `sendTuneRequest` | — | Tune request |
## System exclusive
```cpp pico
uint8_t sysex[] = {0xF0, 0x7E, 0x7F, 0x06, 0x01, 0xF7};
midi.sendSysEx(sysex);
```
## Real-time messages
| Method | Description |
|--------|-------------|
| `sendTimingClock` | MIDI clock tick |
| `sendStart` | Start sequence |
| `sendContinue` | Continue sequence |
| `sendStop` | Stop sequence |
| `sendActiveSensing` | Active sensing |
| `sendSystemReset` | System reset |
## Flushing
Call `midi.sendNow()` to flush buffered messages immediately.