|
|
@ -23,80 +23,48 @@ |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Algorithm arrangements, based on the DX1 display. |
|
|
|
* Algorithm arrangements, based on the DX1 display. |
|
|
|
* Feedop 7 == custom draw |
|
|
|
|
|
|
|
*/ |
|
|
|
*/ |
|
|
|
const char algoArr[][14] = { |
|
|
|
static const char algoArr[][13] = { |
|
|
|
// 1 2 3 4 5 6 7 8 9 A B C D F
|
|
|
|
// 1 2 3 4 5 6 7 8 9 A B C D
|
|
|
|
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 0, 5, 6, 6 }, // 1
|
|
|
|
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 0, 5, -6 }, // 1
|
|
|
|
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 0, 5, 6, 2 }, // 2
|
|
|
|
{ 0, 0, 1, 3, 0, 0, 0, -2, 4, 0, 0, 5, 6 }, // 2
|
|
|
|
{ 0, 0, 1, 4, 0, 0, 0, 2, 5, 0, 3, 6, 0, 6 }, // 3
|
|
|
|
{ 0, 0, 1, 4, 0, 0, 0, 2, 5, 0, 3, -6, 0 }, // 3
|
|
|
|
{ 0, 0, 1, 4, 0, 0, 0, 2, 5, 0, 3, 6, 0, 7 }, // 4
|
|
|
|
{ 0, 0, 1, -4, 0, 0, 0, 2, -5, 0, 3, -6, 0 }, // 4
|
|
|
|
{ 0, 1, 3, 5, 0, 0, 0, 2, 4, 6, 0, 0, 0, 6 }, // 5
|
|
|
|
{ 0, 1, 3, 5, 0, 0, 0, 2, 4, -6, 0, 0, 0 }, // 5
|
|
|
|
{ 0, 1, 3, 5, 0, 0, 0, 2, 4, 6, 0, 0, 0, 7 }, // 6
|
|
|
|
{ 0, 1, 3, -5, 0, 0, 0, 2, 4, -6, 0, 0, 0 }, // 6
|
|
|
|
{ 0, 1, 3, 0, 0, 0, 2, 4, 5, 0, 0, 6, 0, 2 }, // 7
|
|
|
|
{ 0, 1, 3, 0, 0, 0, -2, 4, 5, 0, 0, 6, 0 }, // 7
|
|
|
|
{ 0, 1, 3, 0, 0, 0, 2, 4, 5, 0, 0, 6, 0, 4 }, // 8
|
|
|
|
{ 0, 1, 3, 0, 0, 0, 2, -4, 5, 0, 0, 6, 0 }, // 8
|
|
|
|
{ 0, 1, 3, 0, 0, 0, 2, 4, 5, 0, 0, 0, 0, 2 }, // 9
|
|
|
|
{ 0, 1, 3, 0, 0, 0, -2, 4, 5, 0, 0, 0, 0 }, // 9
|
|
|
|
{ 0, 0, 0, 4, 1, 0, 5, 6, 2, 0, 0, 3, 0, 3 }, // 10
|
|
|
|
{ 0, 0, 0, 4, 1, 0, 5, 6, 2, 0, 0, -3, 0 }, // 10
|
|
|
|
{ 0, 0, 0, 4, 1, 0, 5, 6, 2, 0, 0, 3, 0, 6 }, // 11
|
|
|
|
{ 0, 0, 0, 4, 1, 0, 5, -6, 2, 0, 0, 3, 0 }, // 11
|
|
|
|
{ 0, 0, 3, 0, 1, 0, 4, 5, 6, 2, 0, 0, 0, 2 }, // 12
|
|
|
|
{ 0, 0, 3, 0, 1, 0, 4, 5, 6, -2, 0, 0, 0 }, // 12
|
|
|
|
{ 0, 0, 3, 0, 1, 0, 4, 5, 6, 2, 0, 0, 0, 6 }, // 13
|
|
|
|
{ 0, 0, 3, 0, 1, 0, 4, 5, -6, 2, 0, 0, 0 }, // 13
|
|
|
|
// 1 2 3 4 5 6 7 8 9 A B C D F
|
|
|
|
// 1 2 3 4 5 6 7 8 9 A B C D
|
|
|
|
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 5, 6, 0, 6 }, // 14
|
|
|
|
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 5, -6, 0 }, // 14
|
|
|
|
{ 0, 0, 1, 3, 0, 0, 0, 2, 4, 0, 5, 6, 0, 2 }, // 15
|
|
|
|
{ 0, 0, 1, 3, 0, 0, 0, -2, 4, 0, 5, 6, 0 }, // 15
|
|
|
|
{ 0, 0, 1, 0, 0, 0, 2, 3, 5, 0, 4, 6, 0, 6 }, // 16
|
|
|
|
{ 0, 0, 1, 0, 0, 0, 2, 3, 5, 0, 4, -6, 0 }, // 16
|
|
|
|
{ 0, 0, 1, 0, 0, 0, 2, 3, 5, 0, 4, 6, 0, 2 }, // 17
|
|
|
|
{ 0, 0, 1, 0, 0, 0, -2, 3, 5, 0, 4, 6, 0 }, // 17
|
|
|
|
{ 0, 0, 1, 0, 0, 0, 2, 3, 4, 0, 0, 5, 6, 3 }, // 18
|
|
|
|
{ 0, 0, 1, 0, 0, 0, 2, -3, 4, 0, 0, 5, 6 }, // 18
|
|
|
|
{ 0, 0, 1, 4, 5, 0, 0, 2, 6, 0, 3, 0, 0, 6 }, // 19
|
|
|
|
{ 0, 0, 1, 4, 5, 0, 0, 2, -6, 0, 3, 0, 0 }, // 19
|
|
|
|
{ 0, 1, 2, 0, 4, 0, 3, 0, 5, 6, 0, 0, 0, 3 }, // 20
|
|
|
|
{ 0, 1, 2, 0, 4, 0, -3, 0, 5, 6, 0, 0, 0 }, // 20
|
|
|
|
{ 0, 1, 2, 4, 5, 0, 3, 0, 6, 0, 0, 0, 0, 3 }, // 21
|
|
|
|
{ 0, 1, 2, 4, 5, 0, -3, 0, 6, 0, 0, 0, 0 }, // 21
|
|
|
|
{ 0, 1, 3, 4, 5, 0, 2, 0, 6, 0, 0, 0, 0, 6 }, // 22
|
|
|
|
{ 0, 1, 3, 4, 5, 0, 2, 0, -6, 0, 0, 0, 0 }, // 22
|
|
|
|
{ 0, 1, 2, 4, 5, 0, 0, 3, 6, 0, 0, 0, 0, 6 }, // 23
|
|
|
|
{ 0, 1, 2, 4, 5, 0, 0, 3, -6, 0, 0, 0, 0 }, // 23
|
|
|
|
{ 1, 2, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 6 }, // 24
|
|
|
|
{ 1, 2, 3, 4, 5, 0, 0, 0, -6, 0, 0, 0, 0 }, // 24
|
|
|
|
{ 1, 2, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 6 }, // 25
|
|
|
|
{ 1, 2, 3, 4, 5, 0, 0, 0, -6, 0, 0, 0, 0 }, // 25
|
|
|
|
{ 0, 1, 2, 0, 4, 0, 0, 3, 5, 6, 0, 0, 0, 6 }, // 26
|
|
|
|
{ 0, 1, 2, 0, 4, 0, 0, 3, 5, -6, 0, 0, 0 }, // 26
|
|
|
|
// 1 2 3 4 5 6 7 8 9 A B C D F
|
|
|
|
// 1 2 3 4 5 6 7 8 9 A B C D
|
|
|
|
{ 0, 1, 2, 0, 4, 0, 0, 3, 5, 6, 0, 0, 0, 3 }, // 27
|
|
|
|
{ 0, 1, 2, 0, 4, 0, 0, -3, 5, 6, 0, 0, 0 }, // 27
|
|
|
|
{ 0, 1, 3, 6, 0, 0, 2, 4, 0, 0, 5, 0, 0, 5 }, // 28
|
|
|
|
{ 0, 1, 3, 6, 0, 0, 2, 4, 0, 0, -5, 0, 0 }, // 28
|
|
|
|
{ 0, 1, 2, 3, 5, 0, 0, 0, 4, 6, 0, 0, 0, 6 }, // 29
|
|
|
|
{ 0, 1, 2, 3, 5, 0, 0, 0, 4, -6, 0, 0, 0 }, // 29
|
|
|
|
{ 0, 1, 2, 3, 6, 0, 0, 0, 4, 0, 0, 5, 0, 5 }, // 30
|
|
|
|
{ 0, 1, 2, 3, 6, 0, 0, 0, 4, 0, 0, -5, 0 }, // 30
|
|
|
|
{ 1, 2, 3, 4, 5, 0, 0, 0, 0, 6, 0, 0, 0, 6 }, // 31
|
|
|
|
{ 1, 2, 3, 4, 5, 0, 0, 0, 0, -6, 0, 0, 0 }, // 31
|
|
|
|
{ 1, 2, 3, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 6 } // 32
|
|
|
|
{ 1, 2, 3, 4, 5, -6, 0, 0, 0, 0, 0, 0, 0 } // 32
|
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
void EnvDisplay::paint(Graphics &g) { |
|
|
|
|
|
|
|
int rate[4]; |
|
|
|
|
|
|
|
int level[4]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g.setColour(Colours::black.withAlpha(0.5f)); |
|
|
|
|
|
|
|
g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f); |
|
|
|
|
|
|
|
g.setColour(Colours::white); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 4; i++) { |
|
|
|
|
|
|
|
rate[i] = s_rate[i]->getValue(); |
|
|
|
|
|
|
|
level[i] = s_level[i]->getValue(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env.init(rate, level, 99 << 5, 0); |
|
|
|
|
|
|
|
env.keydown(true); |
|
|
|
|
|
|
|
for (int i = 0; i < 72; i++) { |
|
|
|
|
|
|
|
int32_t pos = env.getsample(); |
|
|
|
|
|
|
|
for (int j = 0; j < 16; j++) { |
|
|
|
|
|
|
|
env.getsample(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
g.setPixel(i, 32 - (sqrt(pos) / 512)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
env.keydown(false); |
|
|
|
|
|
|
|
for (int i = 0; i < 24; i++) { |
|
|
|
|
|
|
|
int32_t pos = env.getsample(); |
|
|
|
|
|
|
|
for (int j = 0; j < 16; j++) { |
|
|
|
|
|
|
|
env.getsample(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
g.setPixel(i + 72, 32 - (sqrt(pos) / 512)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AlgoDisplay::AlgoDisplay() { |
|
|
|
AlgoDisplay::AlgoDisplay() { |
|
|
|
algo = NULL; |
|
|
|
static char tmpAlgo = 0; |
|
|
|
|
|
|
|
algo = &tmpAlgo; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -105,10 +73,6 @@ AlgoDisplay::AlgoDisplay() { |
|
|
|
void AlgoDisplay::paint(Graphics &g) { |
|
|
|
void AlgoDisplay::paint(Graphics &g) { |
|
|
|
int alg; |
|
|
|
int alg; |
|
|
|
|
|
|
|
|
|
|
|
if ( algo == NULL ) { |
|
|
|
|
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( *algo <= 31 ) {
|
|
|
|
if ( *algo <= 31 ) {
|
|
|
|
alg = *algo; |
|
|
|
alg = *algo; |
|
|
|
} else { |
|
|
|
} else { |
|
|
@ -116,32 +80,31 @@ void AlgoDisplay::paint(Graphics &g) { |
|
|
|
} |
|
|
|
} |
|
|
|
const char *arr = algoArr[alg]; |
|
|
|
const char *arr = algoArr[alg]; |
|
|
|
|
|
|
|
|
|
|
|
g.setColour (Colours::black.withAlpha(0.5f)); |
|
|
|
g.setColour (Colours::black.withAlpha(0.1f)); |
|
|
|
g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f); |
|
|
|
g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f); |
|
|
|
|
|
|
|
|
|
|
|
for(int i=0;i<13;i++) { |
|
|
|
for(int i=0;i<13;i++) { |
|
|
|
char target = arr[i]; |
|
|
|
int target = arr[i]; |
|
|
|
bool feedback = target == arr[13]; |
|
|
|
|
|
|
|
if ( target == 0 ) |
|
|
|
if ( target == 0 ) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
|
|
if ( i < 6 ) { |
|
|
|
if ( i < 6 ) { |
|
|
|
drawOp(g, i, 3, target, feedback); |
|
|
|
drawOp(g, i, 3, target); |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ( i < 10 ){ |
|
|
|
if ( i < 10 ){ |
|
|
|
drawOp(g, (i-6)+1, 2, target, feedback); |
|
|
|
drawOp(g, (i-6)+1, 2, target); |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ( i < 12 ) { |
|
|
|
if ( i < 12 ) { |
|
|
|
drawOp(g, (i-10)+2, 1, target, feedback); |
|
|
|
drawOp(g, (i-10)+2, 1, target); |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// last one
|
|
|
|
// last one
|
|
|
|
drawOp(g, (i-12)+3, 0, target, feedback); |
|
|
|
drawOp(g, (i-12)+3, 0, target); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
String algoTxt; |
|
|
|
String algoTxt; |
|
|
@ -149,9 +112,9 @@ void AlgoDisplay::paint(Graphics &g) { |
|
|
|
g.drawText(algoTxt, 5, 1, 21, 14, Justification::left, true); |
|
|
|
g.drawText(algoTxt, 5, 1, 21, 14, Justification::left, true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void AlgoDisplay::drawOp(Graphics &g, int x, int y, int num, bool feedback) { |
|
|
|
void AlgoDisplay::drawOp(Graphics &g, int x, int y, int num) { |
|
|
|
String txt; |
|
|
|
String txt; |
|
|
|
txt << num; |
|
|
|
txt << abs(num); |
|
|
|
|
|
|
|
|
|
|
|
int offx = 24; |
|
|
|
int offx = 24; |
|
|
|
int offy = 17; |
|
|
|
int offy = 17; |
|
|
@ -160,13 +123,91 @@ void AlgoDisplay::drawOp(Graphics &g, int x, int y, int num, bool feedback) { |
|
|
|
g.fillRect(x*offx+4, y*offy+3, offx-2, offy-1); |
|
|
|
g.fillRect(x*offx+4, y*offy+3, offx-2, offy-1); |
|
|
|
g.setColour(Colour(0xFFFFFFFF)); |
|
|
|
g.setColour(Colour(0xFFFFFFFF)); |
|
|
|
g.drawText(txt, x*offx+3, y*offy+2, offx+2, offy+2, Justification::centred, true); |
|
|
|
g.drawText(txt, x*offx+3, y*offy+2, offx+2, offy+2, Justification::centred, true); |
|
|
|
if ( feedback ) { |
|
|
|
if ( num < 0 ) { |
|
|
|
g.setColour(Colour(0xFFFFFFFF)); |
|
|
|
g.setColour(Colour(0xFFFFFFFF)); |
|
|
|
int x1 = (x*offx) + 24; |
|
|
|
int x1 = (x*offx) + 24; |
|
|
|
g.drawLine(x1+1, y*offy+3, x1+1, y*offy+offy+2, 3); |
|
|
|
g.drawLine(x1+1, y*offy+3, x1+1, y*offy+offy+2, 3); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void EnvDisplay::paint(Graphics &g) { |
|
|
|
|
|
|
|
int rate[4]; |
|
|
|
|
|
|
|
int level[4]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g.setColour(Colours::black.withAlpha(0.1f)); |
|
|
|
|
|
|
|
g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f); |
|
|
|
|
|
|
|
g.setColour(Colours::white); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < 4; i++) { |
|
|
|
|
|
|
|
rate[i] = s_rate[i]->getValue(); |
|
|
|
|
|
|
|
level[i] = s_level[i]->getValue(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
env.init(rate, level, 99 << 5, 0); |
|
|
|
|
|
|
|
env.keydown(true); |
|
|
|
|
|
|
|
for (int i = 0; i < 72; i++) { |
|
|
|
|
|
|
|
int32_t pos = env.getsample(); |
|
|
|
|
|
|
|
for (int j = 0; j < 16; j++) { |
|
|
|
|
|
|
|
env.getsample(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
g.setPixel(i, 32 - (sqrt(pos) / 512)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
env.keydown(false); |
|
|
|
|
|
|
|
for (int i = 0; i < 24; i++) { |
|
|
|
|
|
|
|
int32_t pos = env.getsample(); |
|
|
|
|
|
|
|
for (int j = 0; j < 16; j++) { |
|
|
|
|
|
|
|
env.getsample(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
g.setPixel(i + 72, 32 - (sqrt(pos) / 512)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PitchEnvDisplay::PitchEnvDisplay() { |
|
|
|
|
|
|
|
static char tmpDisplay[8]; |
|
|
|
|
|
|
|
memset(&tmpDisplay, 0x00, 8); |
|
|
|
|
|
|
|
pvalues = (char *) &tmpDisplay; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PitchEnvDisplay::paint(Graphics &g) { |
|
|
|
|
|
|
|
g.setColour(Colours::black.withAlpha(0.1f)); |
|
|
|
|
|
|
|
g.fillRoundedRectangle (0.0f, 0.0f, (float) getWidth(), (float) getHeight(), 1.0f); |
|
|
|
|
|
|
|
g.setColour(Colours::white); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char *levels = pvalues; |
|
|
|
|
|
|
|
char *rates = pvalues + 4; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
float dist[4]; |
|
|
|
|
|
|
|
float total; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int old = pitchenv_tab[levels[3]] + 128; |
|
|
|
|
|
|
|
// find the scale
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for(int i=0;i<4;i++) { |
|
|
|
|
|
|
|
int nw = pitchenv_tab[levels[i]] + 128; |
|
|
|
|
|
|
|
dist[i] = abs(old - nw) / pitchenv_rate[rates[i]]; |
|
|
|
|
|
|
|
total += dist[i]; |
|
|
|
|
|
|
|
old = nw; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO : this is WIP
|
|
|
|
|
|
|
|
int ratio = 96 / total; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int oldx = 0; |
|
|
|
|
|
|
|
int oldy = (pitchenv_tab[levels[3]] + 128) / 10; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for(int i=0;i<4;i++) { |
|
|
|
|
|
|
|
int newx = dist[i] * ratio + oldx; |
|
|
|
|
|
|
|
int newy = (pitchenv_tab[levels[i]] + 128) / 10; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
g.drawLine(oldx, oldy, newx, newy, 2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
oldx = newx; |
|
|
|
|
|
|
|
oldy = newy; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void VuMeter::paint(Graphics &g) { |
|
|
|
void VuMeter::paint(Graphics &g) { |
|
|
|
|
|
|
|
|
|
|
|
// taken from the drawLevelMeter ;
|
|
|
|
// taken from the drawLevelMeter ;
|
|
|
|