ACMX 2.136.0
Dual-Backend Real-Time GPU Video Synthesis
Loading...
Searching...
No Matches
midi.hpp
Go to the documentation of this file.
1#ifndef ACMXVK_MIDI_HPP
2#define ACMXVK_MIDI_HPP
3
4#include <cstdint>
5#include <memory>
6#include <ostream>
7#include <string>
8#include <vector>
9
10namespace acmxvk::midi {
11
12 struct MidiMessage {
13 double delta_seconds = 0.0;
14 std::vector<unsigned char> bytes;
15 std::uint64_t sequence = 0;
16 };
17
18 struct MidiMapping {
21 unsigned char status = 0;
22 unsigned char data1 = 0;
23 unsigned char data2 = 0;
24 };
25
26 [[nodiscard]] std::vector<MidiMapping>
27 load_mapping_file(const std::string &filename);
28
29 class MidiInput {
30 public:
31 MidiInput();
33
34 MidiInput(const MidiInput &) = delete;
35 MidiInput &operator=(const MidiInput &) = delete;
36
37 bool open(int port = 0);
38 void close();
39 [[nodiscard]] bool is_open() const;
40 [[nodiscard]] std::vector<MidiMessage> poll_messages();
41 [[nodiscard]] std::uint64_t dropped_message_count() const;
42
43 static void list_ports(std::ostream &output);
44
45 private:
46 class Impl;
47 std::unique_ptr<Impl> impl;
48 };
49
50} // namespace acmxvk::midi
51
52#endif
std::uint64_t dropped_message_count() const
Definition midi.cpp:291
std::vector< MidiMessage > poll_messages()
Definition midi.cpp:287
static void list_ports(std::ostream &output)
Definition midi.cpp:295
bool is_open() const
Definition midi.cpp:283
std::unique_ptr< Impl > impl
Definition midi.hpp:47
MidiInput(const MidiInput &)=delete
MidiInput & operator=(const MidiInput &)=delete
bool open(int port=0)
Definition midi.cpp:275
std::vector< MidiMapping > load_mapping_file(const std::string &filename)
Definition midi.cpp:53
unsigned char status
Definition midi.hpp:21
unsigned char data1
Definition midi.hpp:22
unsigned char data2
Definition midi.hpp:23
std::vector< unsigned char > bytes
Definition midi.hpp:14
std::uint64_t sequence
Definition midi.hpp:15