From f349e36a7f134730e605b83b654b65237bc4a9fe Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Wed, 2 Oct 2013 03:05:10 +0100 Subject: [PATCH] -Fixed issue with double-register of Controller instances --- src/controller/controller.cxx | 1 - src/controller/genericmidi.cxx | 4 ++-- src/jack.cxx | 2 +- src/observer/midi.cxx | 21 +++++++++++++++++++++ src/observer/midi.hxx | 2 ++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/controller/controller.cxx b/src/controller/controller.cxx index 9cf01a9..0c143fb 100644 --- a/src/controller/controller.cxx +++ b/src/controller/controller.cxx @@ -10,7 +10,6 @@ extern Jack* jack; Controller::Controller() { - jack->getControllerUpdater()->registerController( this ); } void Controller::reset(){}; diff --git a/src/controller/genericmidi.cxx b/src/controller/genericmidi.cxx index e9837fb..cdcb6db 100644 --- a/src/controller/genericmidi.cxx +++ b/src/controller/genericmidi.cxx @@ -325,7 +325,7 @@ void GenericMIDI::midi(unsigned char* midi) int data = midi[1]; float value = midi[2] / 127.f; - //LUPPP_NOTE("called %i %i %f", status, data, value ); + LUPPP_NOTE("GenericMIDI::midi() %i %i %f", status, data, value ); // iterate over bindings, execute binding action if matches for(unsigned int i = 0; i < midiToAction.size(); i++) @@ -373,8 +373,8 @@ void GenericMIDI::launchScene( int scene ) data[0] = 144; data[1] = 82 + scene; data[2] = 127; - //jack->midiObserverWriteMIDI( _port, &data[0] ); LUPPP_NOTE("this = %i GenericMIDI::launchScene()", this ); + writeMidi( data ); } diff --git a/src/jack.cxx b/src/jack.cxx index 8616bd9..619bf07 100644 --- a/src/jack.cxx +++ b/src/jack.cxx @@ -216,7 +216,7 @@ Looper* Jack::getLooper(int t) void Jack::registerMidiObserver( MidiObserver* mo ) { - LUPPP_NOTE("%s","Jack::registerMidiObserver()" ); + LUPPP_NOTE("Jack::registerMidiObserver()" ); midiObservers.push_back( mo ); } diff --git a/src/observer/midi.cxx b/src/observer/midi.cxx index 98613a8..9f9fdff 100644 --- a/src/observer/midi.cxx +++ b/src/observer/midi.cxx @@ -15,6 +15,27 @@ MidiObserver::MidiObserver() : } +void MidiObserver::writeMidi( unsigned char* data ) +{ + void* portBuffer = jack_port_get_buffer( jackInputPort, jack->getBuffersize() ); + + unsigned char* buffer = jack_midi_event_reserve( portBuffer, 0, 3); + if( buffer == 0 ) + { + std::cout << "Error: APC writeMidi() write buffer == 0" << std::endl; + return; + } + else + { + cout << "JC::writeMidi() " << int(data[0]) << ", " << int(data[1]) << ", " << int(data[2]) << endl; + //memcpy( buffer, data, sizeof(unsigned char)*3 ); + buffer[0] = data[0]; + buffer[1] = data[1]; + buffer[2] = data[2]; + } + +} + void MidiObserver::registerMidiPorts(std::string name) { // register the JACK MIDI ports diff --git a/src/observer/midi.hxx b/src/observer/midi.hxx index 46609cc..75be9d6 100644 --- a/src/observer/midi.hxx +++ b/src/observer/midi.hxx @@ -32,6 +32,8 @@ class MidiObserver void registerMidiPorts(std::string name); virtual void midi(unsigned char* data){}; + + void writeMidi( unsigned char* data ); private: // there are jack_port_t* registered ports