77 lines
2.0 KiB
Markdown
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.
|