From 5bdf69cb2748ce9c83de3d9d45bea67d096fe04d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Goran=20Meki=C4=87?= Date: Sat, 30 Dec 2017 00:45:28 +0100 Subject: Get note and velocity --- drumgizmo/input/ossmidi.cc | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'drumgizmo') 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 +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& 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; } } -- cgit v1.2.3