Refactor and cleanup CC dispatch logic
This commit is contained in:
parent
394b374b7f
commit
1130fceea5
7 changed files with 173 additions and 116 deletions
98
amp.cpp
98
amp.cpp
|
|
@ -2,98 +2,162 @@
|
|||
#include "amp.h"
|
||||
#include "mustang.h"
|
||||
|
||||
int
|
||||
AmpCC::control_common1( int parm, int bucket, int value ) {
|
||||
return amp->control_common1( parm, bucket, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::control_common2( int parm, int bucket, int value ) {
|
||||
return amp->control_common2( parm, bucket, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::dispatch( int cc, int value ) {
|
||||
|
||||
switch( cc ) {
|
||||
case 69:
|
||||
// Gain
|
||||
return cc69( value );
|
||||
break;
|
||||
case 70:
|
||||
// Channel volume
|
||||
return cc70( value );
|
||||
break;
|
||||
case 71:
|
||||
// Treble
|
||||
return cc71( value );
|
||||
break;
|
||||
case 72:
|
||||
// Mid
|
||||
return cc72( value );
|
||||
break;
|
||||
case 73:
|
||||
// Bass
|
||||
return cc73( value );
|
||||
break;
|
||||
case 74:
|
||||
// Sag
|
||||
return cc74( value );
|
||||
break;
|
||||
case 75:
|
||||
// Bias
|
||||
return cc75( value );
|
||||
break;
|
||||
case 76:
|
||||
// Noise Gate
|
||||
return cc76( value );
|
||||
break;
|
||||
case 77:
|
||||
// Cabinet
|
||||
return cc77( value );
|
||||
break;
|
||||
case 78:
|
||||
// Presence / Gain2 / Cut
|
||||
return cc78( value );
|
||||
break;
|
||||
case 79:
|
||||
// Blend / Master Volume
|
||||
return cc79( value );
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::cc69( int value ) {
|
||||
return amp->control_common1( 0x01, 0x0c, value );
|
||||
return control_common1( 0x01, 0x0c, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::cc70( int value ) {
|
||||
return amp->control_common1( 0x00, 0x0c, value );
|
||||
return control_common1( 0x00, 0x0c, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::cc71( int value ) {
|
||||
return amp->control_common1( 0x04, 0x0c, value );
|
||||
return control_common1( 0x04, 0x0c, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::cc72( int value ) {
|
||||
return amp->control_common1( 0x05, 0x0c, value );
|
||||
return control_common1( 0x05, 0x0c, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::cc73( int value ) {
|
||||
return amp->control_common1( 0x06, 0x0c, value );
|
||||
return control_common1( 0x06, 0x0c, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::cc74( int value ) {
|
||||
if ( value > 2 ) return 0;
|
||||
return amp->control_common2( 0x13, 0x8f, value );
|
||||
return control_common2( 0x13, 0x8f, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::cc75( int value ) {
|
||||
return amp->control_common1( 0x0a, 0x0d, value );
|
||||
return control_common1( 0x0a, 0x0d, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::cc76( int value ) {
|
||||
if ( value > 4 ) return 0;
|
||||
return amp->control_common2( 0x0f, 0x90, value );
|
||||
return control_common2( 0x0f, 0x90, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC::cc77( int value ) {
|
||||
if ( value < 1 || value > 12 ) return 0;
|
||||
return amp->control_common2( 0x11, 0x8e, value );
|
||||
return control_common2( 0x11, 0x8e, value );
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
AmpCC1::cc78( int value ) {
|
||||
return amp->control_common1( 0x07, 0x0c, value );
|
||||
return control_common1( 0x07, 0x0c, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC1::cc79( int value ) {
|
||||
return amp->control_common1( 0x02, 0x0c, value );
|
||||
return control_common1( 0x02, 0x0c, value );
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
AmpCC2::cc78( int value ) {
|
||||
return amp->control_common1( 0x02, 0x0c, value );
|
||||
return control_common1( 0x02, 0x0c, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC2::cc79( int value ) {
|
||||
return amp->control_common1( 0x03, 0x0c, value );
|
||||
return control_common1( 0x03, 0x0c, value );
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
AmpCC3::cc78( int value ) {
|
||||
return amp->control_common1( 0x07, 0x0c, value );
|
||||
return control_common1( 0x07, 0x0c, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC3::cc79( int value ) {
|
||||
return amp->control_common1( 0x03, 0x0c, value );
|
||||
return control_common1( 0x03, 0x0c, value );
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
AmpCC4::cc78( int value ) {
|
||||
return amp->control_common1( 0x07, 0x0c, value );
|
||||
return control_common1( 0x07, 0x0c, value );
|
||||
}
|
||||
|
||||
int
|
||||
AmpCC4::cc79( int value ) {
|
||||
return amp->control_common1( 0x03, 0x0c, value );
|
||||
return control_common1( 0x03, 0x0c, value );
|
||||
}
|
||||
|
|
|
|||
29
amp.h
29
amp.h
|
|
@ -14,31 +14,37 @@ class Mustang;
|
|||
class AmpCC {
|
||||
|
||||
protected:
|
||||
|
||||
Mustang * amp;
|
||||
|
||||
public:
|
||||
// Only base class is friend of Mustang, so forward calls from
|
||||
// derived classes through these methods.
|
||||
int control_common1( int parm, int bucket, int value );
|
||||
int control_common2( int parm, int bucket, int value );
|
||||
|
||||
public:
|
||||
AmpCC( Mustang * theAmp ) : amp(theAmp) {}
|
||||
|
||||
virtual int dispatch( int cc, int value );
|
||||
|
||||
private:
|
||||
// Gain
|
||||
int cc69( int value );
|
||||
virtual int cc69( int value );
|
||||
// Ch. Volume
|
||||
int cc70( int value );
|
||||
virtual int cc70( int value );
|
||||
// Treble
|
||||
int cc71( int value );
|
||||
virtual int cc71( int value );
|
||||
// Mid
|
||||
int cc72( int value );
|
||||
virtual int cc72( int value );
|
||||
// Bass
|
||||
int cc73( int value );
|
||||
virtual int cc73( int value );
|
||||
// Sag
|
||||
virtual int cc74( int value );
|
||||
// Bias
|
||||
virtual int cc75( int value );
|
||||
// Noise Gate
|
||||
int cc76( int value );
|
||||
virtual int cc76( int value );
|
||||
// Cabinet
|
||||
int cc77( int value );
|
||||
virtual int cc77( int value );
|
||||
|
||||
// Dummy in base class
|
||||
virtual int cc78( int value ) { return 0;}
|
||||
|
|
@ -52,6 +58,7 @@ public:
|
|||
class AmpCC1 : public AmpCC {
|
||||
public:
|
||||
AmpCC1( Mustang * theAmp ) : AmpCC(theAmp) {}
|
||||
private:
|
||||
// Presence
|
||||
virtual int cc78( int value );
|
||||
// Blend
|
||||
|
|
@ -64,6 +71,7 @@ public:
|
|||
class AmpCC2 : public AmpCC {
|
||||
public:
|
||||
AmpCC2( Mustang * theAmp ) : AmpCC(theAmp) {}
|
||||
private:
|
||||
// Gain2
|
||||
virtual int cc78( int value );
|
||||
// Master Volume
|
||||
|
|
@ -76,6 +84,7 @@ public:
|
|||
class AmpCC3 : public AmpCC {
|
||||
public:
|
||||
AmpCC3( Mustang * theAmp ) : AmpCC(theAmp) {}
|
||||
private:
|
||||
// Cut
|
||||
virtual int cc78( int value );
|
||||
// Master Volume
|
||||
|
|
@ -90,6 +99,7 @@ public:
|
|||
class AmpCC4 : public AmpCC {
|
||||
public:
|
||||
AmpCC4( Mustang * theAmp ) : AmpCC(theAmp) {}
|
||||
private:
|
||||
// Presence
|
||||
virtual int cc78( int value );
|
||||
// Master Volume
|
||||
|
|
@ -102,6 +112,7 @@ public:
|
|||
class AmpCC5 : public AmpCC {
|
||||
public:
|
||||
AmpCC5( Mustang * theAmp ) : AmpCC(theAmp) {}
|
||||
private:
|
||||
virtual int cc78( int value ) { return 0;}
|
||||
virtual int cc79( int value ) { return 0;}
|
||||
};
|
||||
|
|
|
|||
10
mustang.cpp
10
mustang.cpp
|
|
@ -219,18 +219,24 @@ void Mustang::updateReverb(void) {
|
|||
}
|
||||
|
||||
|
||||
int Mustang::effect_toggle(int state_index, int state)
|
||||
int Mustang::effect_toggle(int cc, int value)
|
||||
{
|
||||
int ret, received;
|
||||
unsigned char array[LENGTH];
|
||||
|
||||
// Translate 23..26 --> 2..5 (current state index)
|
||||
int state_index = cc - 21;
|
||||
int state;
|
||||
if ( value >= 0 && value <= 63 ) state = 1;
|
||||
else if ( value > 63 && value <= 127 ) state = 0;
|
||||
|
||||
memset(array, 0x00, LENGTH);
|
||||
array[0] = 0x19;
|
||||
array[1] = 0xc3;
|
||||
// Translate DSP to family
|
||||
array[FAMILY] = curr_state[state_index][DSP] - 3;
|
||||
// Invert logic
|
||||
array[ACTIVE_INVERT] = state > 0 ? 0 : 1;
|
||||
array[ACTIVE_INVERT] = state;
|
||||
array[FXSLOT] = curr_state[state_index][FXSLOT];
|
||||
#if 0
|
||||
for ( int i=0; i<15; i++ ) fprintf( stderr, "%02x ", array[i] );
|
||||
|
|
|
|||
20
mustang.h
20
mustang.h
|
|
@ -128,8 +128,10 @@
|
|||
#define SPRING_63_ID 0x21
|
||||
#define SPRING_65_ID 0x0b
|
||||
|
||||
class Mustang
|
||||
{
|
||||
class Mustang {
|
||||
friend class AmpCC;
|
||||
friend class ReverbCC;
|
||||
|
||||
public:
|
||||
Mustang();
|
||||
~Mustang();
|
||||
|
|
@ -144,13 +146,7 @@ public:
|
|||
int load_memory_bank(int);
|
||||
int save_effects(int , char *, int , struct fx_pedal_settings *);
|
||||
|
||||
// State: 1 = off, 0 = on
|
||||
int effect_toggle(int category, int state);
|
||||
|
||||
int control_common1(int parm, int bucket, int value);
|
||||
int control_common2(int parm, int bucket, int value);
|
||||
|
||||
int efx_common1(int parm, int bucket, int type, int value);
|
||||
int effect_toggle(int cc, int value);
|
||||
|
||||
AmpCC * getAmp( void ) { return curr_amp;}
|
||||
ReverbCC * getReverb( void ) { return curr_reverb;}
|
||||
|
|
@ -185,9 +181,13 @@ public:
|
|||
AmpCC * curr_amp;
|
||||
ReverbCC * curr_reverb;
|
||||
|
||||
int control_common1(int parm, int bucket, int value);
|
||||
int control_common2(int parm, int bucket, int value);
|
||||
|
||||
int efx_common1(int parm, int bucket, int type, int value);
|
||||
|
||||
void updateAmp(void);
|
||||
void updateReverb(void);
|
||||
|
||||
};
|
||||
|
||||
#endif // MUSTANG_H
|
||||
|
|
|
|||
|
|
@ -42,90 +42,28 @@ void message_action( double deltatime, std::vector< unsigned char > *message, vo
|
|||
int rc = 0;
|
||||
int cc = (*message)[1];
|
||||
int value = (*message)[2];
|
||||
AmpCC *ampModel = mustang.getAmp();
|
||||
ReverbCC *reverbModel = mustang.getReverb();
|
||||
|
||||
// Effects on/off
|
||||
if ( cc >= 23 && cc <= 26 ) {
|
||||
// Translate 23..26 --> 2..5 (current state index)
|
||||
int index = cc - 21;
|
||||
int state;
|
||||
if ( value >= 0 && value <= 63 ) state = 0;
|
||||
else if ( value > 63 && value <= 127 ) state = 1;
|
||||
rc = mustang.effect_toggle( index, state );
|
||||
rc = mustang.effect_toggle( cc, value );
|
||||
}
|
||||
// Set reverb model
|
||||
else if ( cc == 58 ) {
|
||||
rc = mustang.setReverb( value );
|
||||
}
|
||||
// Level
|
||||
else if ( cc == 59 ) {
|
||||
rc = reverbModel->cc59( value );
|
||||
}
|
||||
// Decay
|
||||
else if ( cc == 60 ) {
|
||||
rc = reverbModel->cc60( value );
|
||||
}
|
||||
// Dwell
|
||||
else if ( cc == 61 ) {
|
||||
rc = reverbModel->cc61( value );
|
||||
}
|
||||
// Diffusion
|
||||
else if ( cc == 62 ) {
|
||||
rc = reverbModel->cc62( value );
|
||||
}
|
||||
// Tone
|
||||
else if ( cc == 63 ) {
|
||||
rc = reverbModel->cc63( value );
|
||||
// Reverb CC handler
|
||||
else if ( cc >= 59 && cc <= 63 ) {
|
||||
ReverbCC *reverbModel = mustang.getReverb();
|
||||
rc = reverbModel->dispatch( cc, value );
|
||||
}
|
||||
// Set amp model
|
||||
else if ( cc == 68 ) {
|
||||
// fprintf( stderr, "DEBUG: %d\n", value );
|
||||
rc = mustang.setAmp( value );
|
||||
}
|
||||
// Gain
|
||||
else if ( cc == 69 ) {
|
||||
rc = ampModel->cc69( value );
|
||||
}
|
||||
// Channel volume
|
||||
else if ( cc == 70 ) {
|
||||
rc = ampModel->cc70( value );
|
||||
}
|
||||
// Treble
|
||||
else if ( cc == 71 ) {
|
||||
rc = ampModel->cc71( value );
|
||||
}
|
||||
// Mid
|
||||
else if ( cc == 72 ) {
|
||||
rc = ampModel->cc72( value );
|
||||
}
|
||||
// Bass
|
||||
else if ( cc == 73 ) {
|
||||
rc = ampModel->cc73( value );
|
||||
}
|
||||
// Sag
|
||||
else if ( cc == 74 ) {
|
||||
rc = ampModel->cc74( value );
|
||||
}
|
||||
// Bias
|
||||
else if ( cc == 75 ) {
|
||||
rc = ampModel->cc75( value );
|
||||
}
|
||||
// Noise Gate
|
||||
else if ( cc == 76 ) {
|
||||
rc = ampModel->cc76( value );
|
||||
}
|
||||
// Cabinet
|
||||
else if ( cc == 77 ) {
|
||||
rc = ampModel->cc77( value );
|
||||
}
|
||||
// Presence / Gain2 / Cut
|
||||
else if ( cc == 78 ) {
|
||||
rc = ampModel->cc78( value );
|
||||
}
|
||||
// Blend / Master Volume
|
||||
else if ( cc == 79 ) {
|
||||
rc = ampModel->cc79( value );
|
||||
// Amp CC Handler
|
||||
else if ( cc >= 69 && cc <= 79 ) {
|
||||
AmpCC *ampModel = mustang.getAmp();
|
||||
rc = ampModel->dispatch( cc, value );
|
||||
}
|
||||
if ( rc ) {
|
||||
fprintf( stderr, "Error: CC#%d failed. RC = %d\n", cc, rc );
|
||||
|
|
|
|||
45
reverb.cpp
45
reverb.cpp
|
|
@ -2,28 +2,63 @@
|
|||
#include "reverb.h"
|
||||
#include "mustang.h"
|
||||
|
||||
int
|
||||
ReverbCC::efx_common1(int parm, int bucket, int type, int value) {
|
||||
return amp->efx_common1( parm, bucket, type, value );
|
||||
}
|
||||
|
||||
int
|
||||
ReverbCC::dispatch( int cc, int value ) {
|
||||
|
||||
switch ( cc ) {
|
||||
case 59:
|
||||
// Level
|
||||
return cc59( value );
|
||||
break;
|
||||
case 60:
|
||||
// Decay
|
||||
return cc60( value );
|
||||
break;
|
||||
case 61:
|
||||
// Dwell
|
||||
return cc61( value );
|
||||
break;
|
||||
case 62:
|
||||
// Diffusion
|
||||
return cc62( value );
|
||||
break;
|
||||
case 63:
|
||||
// Tone
|
||||
return cc63( value );
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
ReverbCC::cc59( int value ) {
|
||||
return amp->efx_common1( 0x00, 0x0b, REVERB_STATE, value );
|
||||
return efx_common1( 0x00, 0x0b, REVERB_STATE, value );
|
||||
}
|
||||
|
||||
int
|
||||
ReverbCC::cc60( int value ) {
|
||||
return amp->efx_common1( 0x01, 0x0b, REVERB_STATE, value );
|
||||
return efx_common1( 0x01, 0x0b, REVERB_STATE, value );
|
||||
}
|
||||
|
||||
int
|
||||
ReverbCC::cc61( int value ) {
|
||||
return amp->efx_common1( 0x02, 0x0b, REVERB_STATE, value );
|
||||
return efx_common1( 0x02, 0x0b, REVERB_STATE, value );
|
||||
}
|
||||
|
||||
int
|
||||
ReverbCC::cc62( int value ) {
|
||||
return amp->efx_common1( 0x03, 0x0b, REVERB_STATE, value );
|
||||
return efx_common1( 0x03, 0x0b, REVERB_STATE, value );
|
||||
}
|
||||
|
||||
int
|
||||
ReverbCC::cc63( int value ) {
|
||||
return amp->efx_common1( 0x04, 0x0b, REVERB_STATE, value );
|
||||
return efx_common1( 0x04, 0x0b, REVERB_STATE, value );
|
||||
}
|
||||
|
||||
|
|
|
|||
7
reverb.h
7
reverb.h
|
|
@ -8,13 +8,16 @@ class Mustang;
|
|||
class ReverbCC {
|
||||
|
||||
protected:
|
||||
|
||||
Mustang * amp;
|
||||
|
||||
public:
|
||||
int efx_common1(int parm, int bucket, int type, int value);
|
||||
|
||||
public:
|
||||
ReverbCC( Mustang * theAmp ) : amp(theAmp) {}
|
||||
|
||||
int dispatch( int cc, int value );
|
||||
|
||||
private:
|
||||
// Level
|
||||
int cc59( int value );
|
||||
// Decay
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue