Browse Source

Add midi-join plugin

tags/1.9.7
falkTX 10 years ago
parent
commit
c5a26a37a7
1 changed files with 144 additions and 0 deletions
  1. +144
    -0
      source/native-plugins/midi-join.c

+ 144
- 0
source/native-plugins/midi-join.c View File

@@ -0,0 +1,144 @@
/*
* Carla Native Plugins
* Copyright (C) 2012-2014 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 doc/GPL.txt file.
*/

#include "CarlaNative.h"
#include "CarlaMIDI.h"

#include <stdlib.h>
#include <stdio.h>

// -----------------------------------------------------------------------

typedef struct {
const NativeHostDescriptor* host;
} MidiSplitHandle;

// -----------------------------------------------------------------------

static NativePluginHandle midijoin_instantiate(const NativeHostDescriptor* host)
{
MidiSplitHandle* const handle = (MidiSplitHandle*)malloc(sizeof(MidiSplitHandle));

if (handle == NULL)
return NULL;

handle->host = host;
return handle;
}

#define handlePtr ((MidiSplitHandle*)handle)

static void midijoin_cleanup(NativePluginHandle handle)
{
free(handlePtr);
}

static void midijoin_process(NativePluginHandle handle, float** inBuffer, float** outBuffer, uint32_t frames, const NativeMidiEvent* midiEvents, uint32_t midiEventCount)
{
const NativeHostDescriptor* const host = handlePtr->host;
NativeMidiEvent tmpEvent;

for (uint32_t i=0; i < midiEventCount; ++i)
{
const NativeMidiEvent* const midiEvent = &midiEvents[i];

printf("midijoin_process %i\n", midiEvent->port);
if (midiEvent->port >= MAX_MIDI_CHANNELS)
continue;

const uint8_t status = (uint8_t)MIDI_GET_STATUS_FROM_DATA(midiEvent->data);

tmpEvent.port = 0;
tmpEvent.time = midiEvent->time;
tmpEvent.data[0] = status | (midiEvent->port & MIDI_CHANNEL_BIT);
tmpEvent.data[1] = midiEvent->data[1];
tmpEvent.data[2] = midiEvent->data[2];
tmpEvent.data[3] = midiEvent->data[3];
tmpEvent.size = midiEvent->size;

host->write_midi_event(host->handle, &tmpEvent);
}

return;

// unused
(void)inBuffer;
(void)outBuffer;
(void)frames;
}

#undef handlePtr

// -----------------------------------------------------------------------

static const NativePluginDescriptor midijoinDesc = {
.category = NATIVE_PLUGIN_CATEGORY_UTILITY,
.hints = NATIVE_PLUGIN_IS_RTSAFE,
.supports = NATIVE_PLUGIN_SUPPORTS_EVERYTHING,
.audioIns = 0,
.audioOuts = 0,
.midiIns = 16,
.midiOuts = 1,
.paramIns = 0,
.paramOuts = 0,
.name = "MIDI Join",
.label = "midijoin",
.maker = "falkTX",
.copyright = "GNU GPL v2+",

.instantiate = midijoin_instantiate,
.cleanup = midijoin_cleanup,

.get_parameter_count = NULL,
.get_parameter_info = NULL,
.get_parameter_value = NULL,
.get_parameter_text = NULL,

.get_midi_program_count = NULL,
.get_midi_program_info = NULL,

.set_parameter_value = NULL,
.set_midi_program = NULL,
.set_custom_data = NULL,

.ui_show = NULL,
.ui_idle = NULL,

.ui_set_parameter_value = NULL,
.ui_set_midi_program = NULL,
.ui_set_custom_data = NULL,

.activate = NULL,
.deactivate = NULL,
.process = midijoin_process,

.get_state = NULL,
.set_state = NULL,

.dispatcher = NULL
};

// -----------------------------------------------------------------------

void carla_register_native_plugin_midijoin(void);

void carla_register_native_plugin_midijoin(void)
{
carla_register_native_plugin(&midijoinDesc);
}

// -----------------------------------------------------------------------

Loading…
Cancel
Save