diff options
author | Goran Mekić <meka@tilda.center> | 2017-12-30 00:45:28 +0100 |
---|---|---|
committer | Goran Mekić <meka@tilda.center> | 2017-12-30 15:18:26 +0100 |
commit | 5bdf69cb2748ce9c83de3d9d45bea67d096fe04d (patch) | |
tree | f07490e219d4166c9e14214c87be04b5f18c612c /drumgizmo/input | |
parent | a6343737453b34335a7a5494c8ac6b393d15604c (diff) |
Get note and velocity
Diffstat (limited to 'drumgizmo/input')
-rw-r--r-- | drumgizmo/input/ossmidi.cc | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/drumgizmo/input/ossmidi.cc b/drumgizmo/input/ossmidi.cc index 56d77f0..4473557 100644 --- a/drumgizmo/input/ossmidi.cc +++ b/drumgizmo/input/ossmidi.cc @@ -32,6 +32,10 @@ #include <iostream> +static int const NOTE_ON = 0x90; +static int const NOTE_MASK = 0xF0; + + OSSInputEngine::OSSInputEngine() : AudioInputEngineMidi{} , dev{"/dev/midi"} @@ -95,15 +99,15 @@ void OSSInputEngine::run(size_t pos, size_t len, std::vector<event_t>& events) unsigned char buf[128]; if ((l = read (fd, buf, sizeof (buf))) != -1) { - for (int i = 0; i < l; i++) - { - if (buf[i] & 0x80) /* Status byte */ - { - std::cout << std::endl; - } - std::cout << buf[i]; + int masked_note = buf[0] & NOTE_MASK; + if (masked_note == NOTE_ON) { + int note = buf[1]; + int velocity = buf[2]; + std::cout << "note = " << note << ", velocity = " << velocity << std::endl; } - std::cout << std::flush; + } else if (errno != EAGAIN) { + std::cerr << "Error code: " << errno << std::endl; + std::cerr << std::strerror(errno) << std::endl; } } |