diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/audioinputenginemidi.cc | 3 | ||||
-rw-r--r-- | src/audioinputenginemidi.h | 5 | ||||
-rw-r--r-- | src/midiprocessor.cc | 60 | ||||
-rw-r--r-- | src/midiprocessor.h | 42 |
4 files changed, 108 insertions, 2 deletions
diff --git a/src/audioinputenginemidi.cc b/src/audioinputenginemidi.cc index 3ac2a96..44a7354 100644 --- a/src/audioinputenginemidi.cc +++ b/src/audioinputenginemidi.cc @@ -33,7 +33,8 @@ #include <hugin.hpp> AudioInputEngineMidi::AudioInputEngineMidi() - : refs(REFSFILE) + : midi_processor{mmap} + , refs(REFSFILE) { is_valid = false; } diff --git a/src/audioinputenginemidi.h b/src/audioinputenginemidi.h index 19f7da4..ffa8018 100644 --- a/src/audioinputenginemidi.h +++ b/src/audioinputenginemidi.h @@ -32,6 +32,7 @@ #include "midimapper.h" #include "instrument.h" #include "configfile.h" +#include "midiprocessor.h" class AudioInputEngineMidi : public AudioInputEngine @@ -59,8 +60,10 @@ public: protected: MidiMapper mmap; - + private: + MidiProcessor midi_processor; + std::string midimap; bool is_valid; diff --git a/src/midiprocessor.cc b/src/midiprocessor.cc new file mode 100644 index 0000000..1cf9f49 --- /dev/null +++ b/src/midiprocessor.cc @@ -0,0 +1,60 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * midiprocessor.cc + * + * Thu May 12 09:41:25 CEST 2016 + * Copyright 2016 Christian Glöckner + * cgloeckner@freenet.de + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DrumGizmo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with DrumGizmo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "midiprocessor.h" + +MidiProcessor::MidiProcessor(MidiMapper& midi_mapper) + : midi_mapper{midi_mapper} { +} + +bool MidiProcessor::operator()(std::size_t size, unsigned char const * buffer, event_t& out) { + if (size != 3u) { + // not enough data + return false; + } + + // determine event type + switch (buffer[0] & 0xF0) { + case 0x90: + out.type = TYPE_ONSET; + break; + + default: + // yet unsupported type + return false; + } + + // lookup instrument + int instr = midi_mapper.lookup(buffer[1]); + if (instr == -1) { + // key does not map to an instrument + return false; + } + + out.instrument = (std::size_t)instr; + out.velocity = buffer[2] / 127.0; + return true; +} diff --git a/src/midiprocessor.h b/src/midiprocessor.h new file mode 100644 index 0000000..7254375 --- /dev/null +++ b/src/midiprocessor.h @@ -0,0 +1,42 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * midiprocessor.h + * + * Thu May 12 08:20:49 CEST 2016 + * Copyright 2016 Christian Glöckner + * cgloeckner@freenet.de + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * DrumGizmo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with DrumGizmo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#pragma once +#include <vector> + +#include "event.h" +#include "midimapper.h" + +class MidiProcessor { +private: + MidiMapper& midi_mapper; + +public: + MidiProcessor(MidiMapper& midi_mapper); + + bool operator()(std::size_t size, unsigned char const * buffer, event_t& out); +}; + |