-Updated Controller and ControllerUpdater classes

This commit is contained in:
Harry van Haaren 2013-07-31 18:01:51 +01:00
parent 32593e7eac
commit 60727b10be
8 changed files with 47 additions and 17 deletions

View file

@ -5,7 +5,9 @@
extern Jack* jack;
AkaiAPC::AkaiAPC()
AkaiAPC::AkaiAPC() :
Controller(),
MidiObserver("apc")
{
}

View file

@ -12,6 +12,8 @@ class AkaiAPC : public Controller, public MidiObserver
public:
AkaiAPC();
std::string getName(){return "Akai APC";}
void mute(int t, bool b);
void volume(int t, float f);
void recordArm(int t, bool b);

View file

@ -3,17 +3,11 @@
#ifndef LUPPP_CONTROLLER_H
#define LUPPP_CONTROLLER_H
#include <string>
class Controller
{
public:
/*
make a state class for a whole track
class TrackState {
int track;
};
*/
enum ClipMode {
CLIP_MODE_EMPTY,
CLIP_MODE_PLAYING,
@ -27,8 +21,12 @@ class Controller
Controller(){};
virtual ~Controller(){};
/// name string to show in UI
virtual std::string getName() = 0;
//virtual void setTrack(TrackState& t);
/// functionality
virtual void mute(int t, bool b){};
virtual void volume(int t, float f){};
virtual void recordArm(int t, bool r){};

View file

@ -15,14 +15,20 @@ using namespace std;
class ControllerUpdater
{
public:
ControllerUpdater()
ControllerUpdater() {}
void registerController( Controller* controller )
{
c.push_back( new AkaiAPC() );
std::cout << "ControllerUpdater registering controller: " <<
controller->getName() << endl;
c.push_back( controller );
}
void mute(int t, bool b)
{
for(unsigned int i = 0; i < c.size(); i++) c.at(i)->mute(t,b);
for(unsigned int i = 0; i < c.size(); i++)
c.at(i)->mute(t,b);
}
void clipSelect(int t, int clip, Controller::ClipMode cm)

View file

@ -102,6 +102,9 @@ Jack::Jack() :
void Jack::activate()
{
// move to "settings" class or so
controllerUpdater->registerController( new AkaiAPC() );
jack_activate( client );
jack_transport_start(client);
}
@ -156,8 +159,18 @@ int Jack::process (jack_nframes_t nframes)
writeToGuiRingbuffer( &e );
// check each looper for MIDI match
for( int i = 0; i < midiObservers.size(); i++ )
{
midiObservers.at(i)->midi( (unsigned char*) in_event.buffer[0] );
}
//std::for_each( midiObservers.begin(), midiObservers.end(), [](MidiObserver* mo) { mo->midi( ); } );
/*
for(unsigned int i = 0; i < loopers.size(); i++)
loopers.at(i)->midi( (unsigned char*)&in_event.buffer[0] );
*/
masterMidiInputIndex++;
}

View file

@ -45,7 +45,14 @@ class Jack
Metronome* getMetronome(){return &metronome;}
TrackOutput* getTrackOutput(int t){return trackOutputs.at(t);}
TimeManager* getTimeManager(){return &timeManager;}
ControllerUpdater* getControllerUpdater(){return &controllerUpdater;}
ControllerUpdater* getControllerUpdater(){return controllerUpdater;}
/// register MIDI observers: they're called when a MIDI message arrives on
/// a port they're watching
void registerMidiObserver( MidiObserver* mo )
{
midiObservers.push_back( mo );
}
/// sets reverb bus parameters
@ -59,12 +66,14 @@ class Jack
Metronome metronome;
TimeManager timeManager;
ControllerUpdater controllerUpdater;
ControllerUpdater* controllerUpdater;
vector<Looper*> loopers;
vector<TrackOutput*> trackOutputs;
vector<MidiObserver*> midiObservers;
int nframes;
int samplerate;

View file

@ -7,5 +7,5 @@ extern Jack* jack;
MidiObserver::MidiObserver( std::string portName )
{
//jack->registerMidiObserver( this );
}

View file

@ -14,8 +14,8 @@ extern Jack* jack;
class MidiObserver
{
public:
/// registers class with jack's MIDI handling, with optional MIDI port name
MidiObserver( std::string portName = "" );
/// registers class with jack's MIDI handling, with MIDI port name
MidiObserver( std::string portName );
/// gets called with each MIDI message from the controller. Deal with its
/// input here, and route to the appropriate function in Luppp