|
- /*
- * Carla Native Plugins
- * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * any later version.
- *
- * This program 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 General Public License for more details.
- *
- * For a full copy of the GNU General Public License see the COPYING file
- */
-
- #include "carla_native.hpp"
-
- class MidiSplitPlugin : public PluginDescriptorClass
- {
- public:
- MidiSplitPlugin(const HostDescriptor* host)
- : PluginDescriptorClass(host)
- {
- }
-
- ~MidiSplitPlugin()
- {
- }
-
- protected:
- // -------------------------------------------------------------------
- // Plugin process calls
-
- void activate()
- {
- memset(events, 0, sizeof(MidiEvent) * MAX_MIDI_EVENTS);
- }
-
- void process(float**, float**, uint32_t, uint32_t midiEventCount, MidiEvent* midiEvents)
- {
- MidiEvent midiEvent;
-
- for (uint32_t i=0; i < midiEventCount; i++)
- {
- memcpy(&midiEvent, &midiEvents[i], sizeof(MidiEvent));
-
- uint8_t status = midiEvent.data[0];
- uint8_t channel = status & 0x0F;
-
- CARLA_ASSERT(channel < 16);
-
- if (channel >= 16)
- continue;
-
- status -= channel;
-
- midiEvent.port = channel;
- midiEvent.data[0] = status;
-
- writeMidiEvent(&midiEvent);
- }
- }
-
- // -------------------------------------------------------------------
-
- private:
- static const unsigned short MAX_MIDI_EVENTS = 512;
- MidiEvent events[MAX_MIDI_EVENTS];
-
- PluginDescriptorClassEND(MidiSplitPlugin)
- };
-
- // -----------------------------------------------------------------------
-
- static PluginDescriptor midiSplitDesc = {
- /* category */ PLUGIN_CATEGORY_UTILITY,
- /* hints */ 0x0,
- /* audioIns */ 0,
- /* audioOuts */ 0,
- /* midiIns */ 1,
- /* midiOuts */ 16,
- /* paramIns */ 0,
- /* paramOuts */ 0,
- /* name */ "MIDI Split",
- /* label */ "midiSplit",
- /* maker */ "falkTX",
- /* copyright */ "GNU GPL v2+",
- PluginDescriptorFILL(MidiSplitPlugin)
- };
-
- // -----------------------------------------------------------------------
-
- void carla_register_native_plugin_midiSplit()
- {
- carla_register_native_plugin(&midiSplitDesc);
- }
-
- // -----------------------------------------------------------------------
|