aboutsummaryrefslogtreecommitdiffstats
path: root/src/mdaEPiano.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2010-02-22 21:24:34 +0000
committerDavid Robillard <d@drobilla.net>2010-02-22 21:24:34 +0000
commitadacb33bf4eadcd49a744177bf3f059e7b2f2f52 (patch)
tree922620c99fdc348529002d1a000ec0e8f94f3041 /src/mdaEPiano.cpp
parent4514036c46168f4bbc693649989d53bdffe6137b (diff)
downloadmda.lv2-adacb33bf4eadcd49a744177bf3f059e7b2f2f52.tar.gz
mda.lv2-adacb33bf4eadcd49a744177bf3f059e7b2f2f52.tar.bz2
mda.lv2-adacb33bf4eadcd49a744177bf3f059e7b2f2f52.zip
Merge with upstream r2.
git-svn-id: http://svn.drobilla.net/lad/trunk/mda-lv2@2471 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/mdaEPiano.cpp')
-rw-r--r--src/mdaEPiano.cpp77
1 files changed, 38 insertions, 39 deletions
diff --git a/src/mdaEPiano.cpp b/src/mdaEPiano.cpp
index 61ffcb5..fbff1d5 100644
--- a/src/mdaEPiano.cpp
+++ b/src/mdaEPiano.cpp
@@ -19,15 +19,15 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster
if(programs)
{
//fill patches...
- long i=0;
+ LvzInt32 i=0;
fillpatch(i++, "Default", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f);
fillpatch(i++, "Bright", 0.500f, 0.500f, 1.000f, 0.800f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.500f);
fillpatch(i++, "Mellow", 0.500f, 0.500f, 0.000f, 0.000f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.246f, 0.000f);
fillpatch(i++, "Autopan", 0.500f, 0.500f, 0.500f, 0.500f, 0.250f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.246f, 0.000f);
fillpatch(i++, "Tremolo", 0.500f, 0.500f, 0.500f, 0.500f, 0.750f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.246f, 0.000f);
- fillpatch(i++, " ", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f);
- fillpatch(i++, " ", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f);
- fillpatch(i++, " ", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f);
+ fillpatch(i++, "(default)", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f);
+ fillpatch(i++, "(default)", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f);
+ fillpatch(i++, "(default)", 0.500f, 0.500f, 0.500f, 0.500f, 0.500f, 0.650f, 0.250f, 0.500f, 0.50f, 0.500f, 0.146f, 0.000f);
setProgram(0);
}
@@ -91,10 +91,10 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster
kgrp[32].pos = 414487; kgrp[32].end = 422408; kgrp[32].loop = 2169;
//extra xfade looping...
- for(long k=0; k<28; k++)
+ for(LvzInt32 k=0; k<28; k++)
{
- long p0 = kgrp[k].end;
- long p1 = kgrp[k].end - kgrp[k].loop;
+ LvzInt32 p0 = kgrp[k].end;
+ LvzInt32 p1 = kgrp[k].end - kgrp[k].loop;
float xf = 1.0f;
float dxf = -0.02f;
@@ -109,7 +109,7 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster
}
//initialise...
- for(long v=0; v<NVOICES; v++)
+ for(LvzInt32 v=0; v<NVOICES; v++)
{
voice[v].env = 0.0f;
voice[v].dec = 0.99f; //all notes off
@@ -129,7 +129,8 @@ mdaEPiano::mdaEPiano(audioMasterCallback audioMaster) : AudioEffectX(audioMaster
void mdaEPiano::update() //parameter change
{
- size = (long)(12.0f * param[2] - 6.0f);
+ float * param = programs[curProgram].param;
+ size = (LvzInt32)(12.0f * param[2] - 6.0f);
treb = 4.0f * param[3] * param[3] - 1.0f; //treble gain
if(param[3] > 0.5f) tfrq = 14000.0f; else tfrq = 5000.0f; //treble freq
@@ -144,7 +145,7 @@ void mdaEPiano::update() //parameter change
if(param[6] < 0.25f) velsens -= 0.75f - 3.0f * param[6];
width = 0.03f * param[7];
- poly = 1 + (long)(31.9f * param[8]);
+ poly = 1 + (LvzInt32)(31.9f * param[8]);
fine = param[9] - 0.5f;
random = 0.077f * param[10] * param[10];
stretch = 0.0f; //0.000434f * (param[11] - 0.5f); parameter re-used for overdrive!
@@ -156,7 +157,7 @@ void mdaEPiano::resume()
{
Fs = getSampleRate();
iFs = 1.0f / Fs;
- dlfo = 6.283f * iFs * (float)exp(6.22f * param[5] - 2.61f); //lfo rate
+ dlfo = 6.283f * iFs * (float)exp(6.22f * programs[curProgram].param[5] - 2.61f); //lfo rate
DECLARE_LVZ_DEPRECATED (wantEvents) ();
}
@@ -170,19 +171,14 @@ mdaEPiano::~mdaEPiano () //destroy any buffers...
void mdaEPiano::setProgram(LvzInt32 program)
{
- long i;
-
- mdaEPianoProgram *p = &programs[program];
curProgram = program;
- for(i=0; i<NPARAMS; i++) param[i] = p->param[i];
- update();
+ update();
}
void mdaEPiano::setParameter(LvzInt32 index, float value)
{
- mdaEPianoProgram *p = &programs[curProgram];
- param[index] = p->param[index] = value;
+ programs[curProgram].param[index] = value;
update();
//if(editor) editor->postUpdate(); ///For GUI
@@ -191,7 +187,7 @@ void mdaEPiano::setParameter(LvzInt32 index, float value)
}
-void mdaEPiano::fillpatch(long p, const char *name, float p0, float p1, float p2, float p3, float p4,
+void mdaEPiano::fillpatch(LvzInt32 p, char *name, float p0, float p1, float p2, float p3, float p4,
float p5, float p6, float p7, float p8, float p9, float p10,float p11)
{
strcpy(programs[p].name, name);
@@ -204,7 +200,7 @@ void mdaEPiano::fillpatch(long p, const char *name, float p0, float p1, float p2
}
-float mdaEPiano::getParameter(LvzInt32 index) { return param[index]; }
+float mdaEPiano::getParameter(LvzInt32 index) { return programs[curProgram].param[index]; }
void mdaEPiano::setProgramName(char *name) { strcpy(programs[curProgram].name, name); }
void mdaEPiano::getProgramName(char *name) { strcpy(name, programs[curProgram].name); }
void mdaEPiano::setBlockSize(LvzInt32 blockSize) { AudioEffectX::setBlockSize(blockSize); }
@@ -229,7 +225,7 @@ bool mdaEPiano::getOutputProperties(LvzInt32 index, LvzPinProperties* properties
bool mdaEPiano::getProgramNameIndexed(LvzInt32 category, LvzInt32 index, char* text)
{
- if(index<NPROGS)
+ if ((unsigned int)index < NPROGS)
{
strcpy(text, programs[index].name);
return true;
@@ -283,6 +279,7 @@ void mdaEPiano::getParameterName(LvzInt32 index, char *label)
void mdaEPiano::getParameterDisplay(LvzInt32 index, char *text)
{
char string[16];
+ float * param = programs[curProgram].param;
switch(index)
{
@@ -297,7 +294,7 @@ void mdaEPiano::getParameterDisplay(LvzInt32 index, char *text)
case 5: sprintf(string, "%.2f", (float)exp(6.22f * param[5] - 2.61f)); break; //LFO Hz
case 7: sprintf(string, "%.0f", 200.0f * param[index]); break;
- case 8: sprintf(string, "%ld", poly); break;
+ case 8: sprintf(string, "%d", poly); break;
case 10: sprintf(string, "%.1f", 50.0f * param[index] * param[index]); break;
case 11: sprintf(string, "%.1f", 100.0f * param[index]); break;
default: sprintf(string, "%.0f", 100.0f * param[index]);
@@ -333,9 +330,9 @@ void mdaEPiano::process(float **inputs, float **outputs, LvzInt32 sampleFrames)
{
float* out0 = outputs[0];
float* out1 = outputs[1];
- long event=0, frame=0, frames, v;
+ LvzInt32 event=0, frame=0, frames, v;
float x, l, r, od=overdrive;
- long i;
+ LvzInt32 i;
while(frame<sampleFrames)
{
@@ -383,10 +380,10 @@ void mdaEPiano::process(float **inputs, float **outputs, LvzInt32 sampleFrames)
if(frame<sampleFrames)
{
- if(activevoices == 0 && param[4] > 0.5f)
+ if(activevoices == 0 && programs[curProgram].param[4] > 0.5f)
{ lfo0 = -0.7071f; lfo1 = 0.7071f; } //reset LFO phase - good idea?
- long note = notes[event++];
- long vel = notes[event++];
+ LvzInt32 note = notes[event++];
+ LvzInt32 vel = notes[event++];
noteOn(note, vel);
}
}
@@ -402,9 +399,9 @@ void mdaEPiano::processReplacing(float **inputs, float **outputs, LvzInt32 sampl
{
float* out0 = outputs[0];
float* out1 = outputs[1];
- long event=0, frame=0, frames, v;
+ LvzInt32 event=0, frame=0, frames, v;
float x, l, r, od=overdrive;
- long i;
+ LvzInt32 i;
while(frame<sampleFrames)
{
@@ -456,10 +453,10 @@ void mdaEPiano::processReplacing(float **inputs, float **outputs, LvzInt32 sampl
if(frame<sampleFrames)
{
- if(activevoices == 0 && param[4] > 0.5f)
+ if(activevoices == 0 && programs[curProgram].param[4] > 0.5f)
{ lfo0 = -0.7071f; lfo1 = 0.7071f; } //reset LFO phase - good idea?
- long note = notes[event++];
- long vel = notes[event++];
+ LvzInt32 note = notes[event++];
+ LvzInt32 vel = notes[event++];
noteOn(note, vel);
}
}
@@ -471,10 +468,11 @@ void mdaEPiano::processReplacing(float **inputs, float **outputs, LvzInt32 sampl
}
-void mdaEPiano::noteOn(long note, long velocity)
+void mdaEPiano::noteOn(LvzInt32 note, LvzInt32 velocity)
{
+ float * param = programs[curProgram].param;
float l=99.0f;
- long v, vl=0, k, s;
+ LvzInt32 v, vl=0, k, s;
if(velocity > 0)
{
@@ -497,13 +495,13 @@ void mdaEPiano::noteOn(long note, long velocity)
if(note > 60) l += stretch * (float)k; //stretch
s = size;
- if(velocity > 40) s += (long)(sizevel * (float)(velocity - 40));
+ if(velocity > 40) s += (LvzInt32)(sizevel * (float)(velocity - 40));
k = 0;
while(note > (kgrp[k].high + s)) k += 3; //find keygroup
l += (float)(note - kgrp[k].root); //pitch
l = 32000.0f * iFs * (float)exp(0.05776226505 * l);
- voice[vl].delta = (long)(65536.0f * l);
+ voice[vl].delta = (LvzInt32)(65536.0f * l);
voice[vl].frac = 0;
if(velocity > 48) k++; //mid velocity sample
@@ -547,9 +545,10 @@ void mdaEPiano::noteOn(long note, long velocity)
LvzInt32 mdaEPiano::processEvents(LvzEvents* ev)
{
- long npos=0;
+ float * param = programs[curProgram].param;
+ LvzInt32 npos=0;
- for (long i=0; i<ev->numEvents; i++)
+ for (LvzInt32 i=0; i<ev->numEvents; i++)
{
if((ev->events[i])->type != kLvzMidiType) continue;
LvzMidiEvent* event = (LvzMidiEvent*)ev->events[i];
@@ -600,7 +599,7 @@ LvzInt32 mdaEPiano::processEvents(LvzEvents* ev)
default: //all notes off
if(midiData[1]>0x7A)
{
- for(long v=0; v<NVOICES; v++) voice[v].dec=0.99f;
+ for(LvzInt32 v=0; v<NVOICES; v++) voice[v].dec=0.99f;
sustain = 0;
muff = 160.0f;
}