MCPcopy Create free account
hub / github.com/celtera/libremidi / main

Function main

examples/echo.cpp:14–71  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12#include <thread>
13
14int main()
15{
16#if defined(_WIN32) && __has_include(<winrt/base.h>)
17 // Necessary for using WinUWP and WinMIDI, must be done as early as possible in your main()
18 winrt::init_apartment();
19#endif
20
21 libremidi::observer obs;
22 auto inputs = obs.get_input_ports();
23 auto outputs = obs.get_output_ports();
24
25 if (inputs.size() == 0)
26 {
27 std::cerr << "No available input port.\n";
28 return -1;
29 }
30 if (outputs.size() == 0)
31 {
32 std::cerr << "No available output port.\n";
33 return -1;
34 }
35
36 libremidi::midi_out midiout{
37 libremidi::output_configuration{}, libremidi::midi_out_configuration_for(obs)};
38
39 libremidi::midi_in midiin{
40 {
41 // Set our callback function.
42 .on_message =
43 [&](const libremidi::message& message) {
44 std::cout << message << std::endl;
45 auto _ = midiout.send_message(message);
46 },
47 },
48 libremidi::midi_in_configuration_for(obs)};
49
50 if (stdx::error err = midiout.open_port(outputs[0]); err.is_set())
51 {
52 }
53 if (!midiout.is_port_connected())
54 {
55 std::cerr << "Could not connect to midi out\n";
56 return -1;
57 }
58 midiin.open_port(inputs[0]);
59 if (!midiin.is_port_connected())
60 {
61 std::cerr << "Could not connect to midi in\n";
62 return -1;
63 }
64
65 std::cout << "Creating an echo bridge: " << inputs[0].display_name << " => "
66 << outputs[0].display_name << "\n";
67 while (1)
68 std::this_thread::sleep_for(std::chrono::milliseconds(100));
69 char input;
70 std::cin.get(input);
71}

Callers

nothing calls this directly

Calls 7

get_input_portsMethod · 0.45
get_output_portsMethod · 0.45
sizeMethod · 0.45
send_messageMethod · 0.45
open_portMethod · 0.45
is_port_connectedMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected