diff testApp.mm @ 45:c2fffc8ea84d

10 timbre params.
author Robert Tubb <rt300@eecs.qmul.ac.uk>
date Tue, 23 Apr 2013 18:29:55 +0100
parents a1e75b94c505
children 1e266647840d
line wrap: on
line diff
--- a/testApp.mm	Mon Apr 22 18:32:34 2013 +0100
+++ b/testApp.mm	Tue Apr 23 18:29:55 2013 +0100
@@ -552,52 +552,90 @@
 #pragma mark sending to pd and midi
 void testApp::sendParametersToPD(){
     static int previousSequence;
-    // frequencer stuff to get 16 steps
     
-     vector<double> vals;
-     
-     
-     vals.push_back((sliderVals[0]+32)*8.); // DC offset
-     for(int i=1; i<5;i++){
-     vals.push_back((sliderVals[i] - 64)*2.);
-     }
-    
-    vector<double> steps = frequencer.freqMagEdit(freqIndexes, vals);
-    List seqSteps;
-    seqSteps.addSymbol("seqSteps");
-    for(int i=0; i < 16; i++){
-        seqSteps.addFloat(round(steps[i]));
+    if(core.patchName == "synth5paramMM.pd"){
+        // frequencer stuff to get 16 steps
+        
+        vector<double> vals;
+        
+        
+        vals.push_back((sliderVals[0]+32)*8.); // DC offset
+        for(int i=1; i<5;i++){
+            vals.push_back((sliderVals[i] - 64)*2.);
+        }
+        
+        vector<double> steps = frequencer.freqMagEdit(freqIndexes, vals);
+        List seqSteps;
+        seqSteps.addSymbol("seqSteps");
+        for(int i=0; i < 16; i++){
+            seqSteps.addFloat(round(steps[i]));
+        }
+        core.pd.sendList("fromOF", seqSteps);
+        
+        
+        // send synth params
+        sendOscShape(sliderVals[5]);
+        sendFiltType(sliderVals[6]);
+        sendFiltFreq(sliderVals[7]);
+        sendEnvShape(sliderVals[8]);
+        sendModFreq(sliderVals[9]);
+        
+    }else if (core.patchName == "synth10param.pd"){
+        // for 10 param synth we get sequence from saved presets
+        // and send 5 extra synth params
+        if(currentSequence != previousSequence){
+            List seqSteps;
+            
+            seqSteps.addSymbol("seqSteps");
+            if(currentSequence >= sequences.size() || currentSequence < 0){
+                cout << "ERROR: not a valid sequence index\n";
+                for(int i=0; i < 16; i++){
+                    seqSteps.addFloat(50);
+                }
+            }else{
+                for(int i=0; i < 16; i++){
+                    seqSteps.addFloat(round(sequences[currentSequence][i]));
+                }
+            }
+            
+            core.pd.sendList("fromOF", seqSteps);
+            previousSequence = currentSequence;
+        }
+        /*
+         @"Amp Env",@"Waveform",@"FM amount",@"FM frequency",@"Reverb",
+         @"Filter Type",@"Filter Cut off",@"Filter Resonance",@"Filter Envelope",@"SOMETHING",
+         */
+        // send synth params
+        sendAmpEnvShape(sliderVals[0]);
+        sendOscShape(sliderVals[1]);
+        sendFMAmt(sliderVals[2]);
+        sendModFreq(sliderVals[3]);
+        sendRevAmt(sliderVals[4]);
+        
+        sendFiltType(sliderVals[5]);
+        sendFiltFreq(sliderVals[6]);
+        sendResonance(sliderVals[7]);
+        sendFiltEnvShape(sliderVals[8]);
+        sendFiltEnvModAmt(sliderVals[9]);
+        //sendUmame(sliderVals[8]);
+        //sendX(sliderVals[2]);
+        //sendX(sliderVals[3]);
+        
+        
+        
+
+        
+        
     }
-    core.pd.sendList("fromOF", seqSteps);
+
 
     /*
-    if(currentSequence != previousSequence){
-        List seqSteps;
-        
-        seqSteps.addSymbol("seqSteps");
-        if(currentSequence >= sequences.size() || currentSequence < 0){
-            cout << "ERROR: not a valid sequence index\n";
-            for(int i=0; i < 16; i++){
-                seqSteps.addFloat(50);
-            }
-        }else{
-            for(int i=0; i < 16; i++){
-                seqSteps.addFloat(round(sequences[currentSequence][i]));
-            }
-        }
-        
-        core.pd.sendList("fromOF", seqSteps);
-        previousSequence = currentSequence;
+    cout << "SLIDERVALS: ";
+    for(int i=0;i<10;i++){
+        cout << sliderVals[i] << ",";
     }
-     */
-    
-    // send synth params
-    sendOscShape(sliderVals[5]);
-    sendFiltType(sliderVals[6]);
-    sendFiltFreq(sliderVals[7]);
-    sendEnvShape(sliderVals[8]);
-    sendModFreq(sliderVals[9]);
-
+    cout << '\n';
+    */
     
 }
 //--------------------------------------------------------------
@@ -1009,6 +1047,9 @@
     return y0;
 }
 //---------------------------------------------------------------
+//---------------------------------------------------------------
+//---------------------------------------------------------------
+#pragma mark SYNTH PARAM SENDING TO PD CURVES 
 void testApp::sendOscShape(int ctrlin){
     if(ctrlin < 0 || ctrlin > 127){
         cout << "ERROR: bad slider value!";
@@ -1019,13 +1060,13 @@
     static int numcontrols = 5;
     //float values[points][controls] =
     float ctrlout[numcontrols];
-    string ctrlName[5] = {"pWidth" , "sqVol", "sawVol", "sineVol", "FMAmt"};
-    float values[5][5] =
-    {{0.5, 0., 0., 1., 1.}, // 0
-        {0.5, 0., 0., 1., 0.},  // 32
-        {0.5, 0., 1., 0., 0.},  // 64
-        {0.5, 1., 1., 0., 0.},  // 96
-        {0.01,1., 1., 0., 0.}}; // 127
+    string ctrlName[4] = {"pWidth" , "sqVol", "sawVol", "sineVol"};
+    float values[5][4] =
+    {{0.5, 0., 0., 1.}, // 0
+        {0.5, 0., 0., 1.},  // 32
+        {0.5, 0., 1., 0.},  // 64
+        {0.5, 1., 1., 0.},  // 96
+        {0.01,1., 1., 0.}}; // 127
     
     float fidx = (numpoints-1)*ctrlin/128.;
     int idx = floor(fidx);
@@ -1049,6 +1090,49 @@
         cout << "ERROR: bad slider value!";
         return;
     }
+    /*
+    static int numpoints = 3;
+    static int numcontrols = 2;
+    //float values[points][controls] =
+    float ctrlout[numcontrols];
+    string ctrlName[2] = {"fType","reson"};
+    float values[3][2] =
+    {{0., 45}, // 0
+        {0.5, 120},  // 64
+        {1., 55}}; // 127
+      */
+    
+    static int numpoints = 2;
+    static int numcontrols = 1;
+    //float values[points][controls] =
+    float ctrlout[numcontrols];
+    string ctrlName[2] = {"fType"};
+    float values[2][1] =
+    {{0.}, // 0
+        {1.},}; // 127
+    
+    float fidx = (numpoints-1)*ctrlin/128.;
+    int idx = floor(fidx);
+    float frac = fidx - idx;
+
+    for(int i=0; i < numcontrols; i++){
+        ctrlout[i] = (1 - frac)*values[idx][i] + (frac)*values[idx+1][i];
+        // send to PD
+        List toPD;
+        
+        toPD.addSymbol(ctrlName[i]);
+        toPD.addFloat(ctrlout[i]); // rounding here??
+        
+        core.pd.sendList("fromOF", toPD);
+        //cout << ctrlName[i] << "sending" << ctrlout[i] << "\n";
+    }
+}
+//---------------------------------------------------------------
+void testApp::sendFiltTypeOld(int ctrlin){
+    if(ctrlin < 0 || ctrlin > 127){
+        cout << "ERROR: bad slider value!";
+        return;
+    }
     static int numpoints = 3;
     static int numcontrols = 4;
     //float values[points][controls] =
@@ -1192,6 +1276,21 @@
     }
 }
 //---------------------------------------------------------------
+void testApp::sendFiltEnvModAmt(int ctrlin){
+    if(ctrlin < 0 || ctrlin > 127){
+        cout << "ERROR: bad slider value!";
+        return;
+    }
+    float amt = ctrlin/127.0;
+    List toPD;
+    
+    toPD.addSymbol("fenv");
+    toPD.addSymbol("amount");
+    toPD.addFloat(amt); // rounding here??
+    
+    core.pd.sendList("fromOF", toPD);
+}
+//---------------------------------------------------------------
 void testApp::sendModFreq(int ctrlin){
     if(ctrlin < 0 || ctrlin > 127){
         cout << "ERROR: bad slider value!";
@@ -1206,9 +1305,110 @@
     core.pd.sendList("fromOF", toPD);
 }
 //---------------------------------------------------------------
+//---------------------------------------------------------------
+void testApp::sendRevAmt(int ctrlin){
+    if(ctrlin < 0 || ctrlin > 127){
+        cout << "ERROR: bad slider value!";
+        return;
+    }
+    static int numpoints = 5;
+    static int numcontrols = 2;
+    //float values[points][controls] =
+    float ctrlout[numcontrols];
+    string ctrlName[3] = {"revDryWet" , "revLength"};
+    float values[5][3] =
+        {{0., 0.1}, // 0
+        {0., 0.1},  // 32
+        {0.3, 30.},  // 64
+        {0.6, 60.},  // 96
+        {1., 95.}}; // 127
+    
+    float fidx = (numpoints-1)*ctrlin/128.;
+    int idx = floor(fidx);
+    float frac = fidx - idx;
+    for(int i=0; i < numcontrols; i++){
+        ctrlout[i] = (1 - frac)*values[idx][i] + (frac)*values[idx+1][i];
+        // send to PD
+        List toPD;
+        toPD.addSymbol(ctrlName[i]);
+        toPD.addFloat(ctrlout[i]); // rounding here??
+        
+        core.pd.sendList("fromOF", toPD);
+        //cout << ctrlName[i] << "sending" << ctrlout[i] << "\n";
+    }
 
-
-
+}
+//---------------------------------------------------------------
+void testApp::sendResonance(int ctrlin){
+    if(ctrlin < 0 || ctrlin > 127){
+        cout << "ERROR: bad slider value!";
+        return;
+    }
+    float res = ctrlin;
+    List toPD;
+    
+    toPD.addSymbol("reson");
+    toPD.addFloat(res); // rounding here??
+    
+    core.pd.sendList("fromOF", toPD);
+}
+//---------------------------------------------------------------------------
+void testApp::sendFMAmt(int ctrlin){
+    static int numpoints = 4;
+    static int numcontrols = 1;
+    //float values[points][controls] =
+    float ctrlout[numcontrols];
+    string ctrlName[1] = {"FMAmt"};
+    float values[4][1] =
+    {{0.}, // 0
+        {0.},  // 
+        {0.3},  //
+        {1.}}; // 127
+    
+    float fidx = (numpoints-1)*ctrlin/128.;
+    int idx = floor(fidx);
+    float frac = fidx - idx;
+    for(int i=0; i < numcontrols; i++){
+        ctrlout[i] = (1 - frac)*values[idx][i] + (frac)*values[idx+1][i];
+        // send to PD
+        List toPD;
+        toPD.addSymbol(ctrlName[i]);
+        toPD.addFloat(ctrlout[i]); // rounding here??
+        
+        core.pd.sendList("fromOF", toPD);
+        //cout << ctrlName[i] << "sending" << ctrlout[i] << "\n";
+    }
+}
+//---------------------------------------------------------------------------
+void testApp::sendDistortion(int ctrlin){
+    static int numpoints = 5;
+    static int numcontrols = 2;
+    //float values[points][controls] =
+    float ctrlout[numcontrols];
+    string ctrlName[2] = {"sigGain", "sineGain"};
+    float values[5][2] =
+    {{0., 0.}, // 0
+        {0., 0.},  //
+        {20, 0.},  //
+        {45 , 0.},  //
+        {0, 18}}; // 127
+    
+    float fidx = (numpoints-1)*ctrlin/128.;
+    int idx = floor(fidx);
+    float frac = fidx - idx;
+    for(int i=0; i < numcontrols; i++){
+        ctrlout[i] = (1 - frac)*values[idx][i] + (frac)*values[idx+1][i];
+        // send to PD
+        List toPD;
+        toPD.addSymbol(ctrlName[i]);
+        toPD.addFloat(ctrlout[i]); // rounding here??
+        
+        core.pd.sendList("fromOF", toPD);
+        //cout << ctrlName[i] << "sending" << ctrlout[i] << "\n";
+    }
+}
+//---------------------------------------------------------------------------
+//===========================================================================
 //---------------------------------------------------------------------------
 void saveSequences(){
     ofFile sequenceFile(ofxiPhoneGetDocumentsDirectory() + "pilot_sequences.json" ,ofFile::WriteOnly);
@@ -1254,7 +1454,10 @@
 void testApp::loadSequences(){
     
     // read in sequence preset file
-    string jsonFile = ofxiPhoneGetDocumentsDirectory() + "pilot_sequences.json";
+    string jsonFile = ofFilePath::getAbsolutePath(ofToDataPath("pilot_sequences.json"));
+
+    cout << "SQUENCES FILE: " << jsonFile << "\n";
+    //string jsonFile = ofxiPhoneGetDocumentsDirectory() + "pilot_sequences.json";
     
     Json::Value root;
     Json::Reader reader;