| 17 | std::vector<libremidi::midi_out> midiout; |
| 18 | |
| 19 | my_app() |
| 20 | { |
| 21 | auto callback = [&](int port, const libremidi::message& msg) { |
| 22 | std::cout << msg << std::endl; |
| 23 | midiout[port].send_message(msg); |
| 24 | }; |
| 25 | |
| 26 | auto res = MIDIClientCreate(CFSTR("My App"), 0, 0, &handle); |
| 27 | if (res != noErr) |
| 28 | throw std::runtime_error("Could not start CoreMIDI"); |
| 29 | |
| 30 | // Create our configuration |
| 31 | auto api_input_config = libremidi::coremidi_input_configuration{.context = handle}; |
| 32 | auto api_output_config = libremidi::coremidi_output_configuration{.context = handle}; |
| 33 | |
| 34 | // Create 16 inputs and 16 outputs |
| 35 | for (int i = 0; i < 16; i++) |
| 36 | { |
| 37 | midiin.emplace_back( |
| 38 | libremidi::input_configuration{ |
| 39 | .on_message = [=](const libremidi::message& msg) { callback(i, msg); }}, |
| 40 | api_input_config); |
| 41 | midiin[i].open_virtual_port("Input: " + std::to_string(i)); |
| 42 | |
| 43 | midiout.emplace_back(libremidi::output_configuration{}, api_output_config); |
| 44 | midiout[i].open_virtual_port("Output: " + std::to_string(i)); |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | ~my_app() { MIDIClientDispose(handle); } |
| 49 | }; |
nothing calls this directly
no test coverage detected