int startAlgorithm(TumbleParameters& p) { static FunctionEvent tn; // a Temporary Note for copying into eventBuffer int ploc = storeParameters(tparam, p); if (ploc < 0) { cout << "Warning: Parameter space is full. Not adding new algorithm" << endl; return -1; } // setting the fields of the function note tn.setFunction(TumbleNoteFunction); tn.setChannel(channel); tn.setKeyno(0); tn.setVelocity(0); tn.charValue(0) = (char)ploc; // store location of the parameters tn.setStatus(EVENT_STATUS_ACTIVE); tn.setOnTime(t_time + p.i[0] - anticipation); // display the basic algorithm info cout << "Tumble: Time: " << t_time << "\tStart = " << (int)p.current << "\tPattern = . "; for (int i=1; i<p.n.getSize(); i++) { cout << (int)p.n[i] << " "; } cout << "(" << (int)p.n[0] << ")"; cout << " ioi: " << p.i[0]; cout << endl; return eventBuffer.insert(tn); }
void createTrill(int key1, int key2, int velocity, int channel, int duration) { static FunctionEvent tn; // a Temporary Note for copying into eventBuffer // key1 should always be smaller than key2 int temp; if (key1 > key2) { temp = key1; key1 = key2; key2 = temp; } // setting the fields of the function note tn.setFunction(TrillAlgorithm); tn.setChannel(channel); tn.setKeyno(key1); tn.setVelocity(velocity); // set extra parameters tn.charValue(15) = 0; // 0 = play key1 next, 1 = play key2 next tn.charValue(14) = key2; // secondary pitch tn.intValue(10) = t_time; // initialization time tn.setStatus(EVENT_STATUS_ACTIVE); // start time of function and the duration between calling it tn.setOnDur(t_time + duration, duration); eventBuffer.insert(tn); cout << "Trill = " << key1 << " to " << key2 << "\tRate = " << duration << endl; }
void playgliss(int basenote, int loudness, int channel, int duration, int distancee) { static FunctionEvent tn; // a Temporary Note for copying into eventBuffer // setting the fields of the function note tn.shortValue(14) = distancee; tn.setFunction(EnhanceFunction); tn.setChannel(channel); tn.setKeyno(basenote + distancee); tn.setVelocity(loudness - 5); tn.setStatus(EVENT_STATUS_ACTIVE); // start time of function and the duration between calling it tn.setOnDur(t_time, duration); eventBuffer.insert(tn); cout << "StartKey = " << basenote << "\tLoudness = " << loudness << "\tRate = " << duration << "\tDirection = " << distancee << endl; }
void createDecay(int channel, int key, int duration, int velocity) { static FunctionEvent tn; // temporary function for copying into eventBuffer tn.shortValue(14) = gap; // gap between successive notes tn.setFunction(EchoAlgorithm); tn.setChannel(channel); tn.setKeyno(key); decaystates[key] = velocity * decayrate; tn.setVelocity((int)decaystates[key]); tn.setStatus(EVENT_STATUS_ACTIVE); // start time of function and the duration between calling it tn.setOnDur(t_time, duration); eventBuffer.insert(tn); cout << "Key= " << key << "\tDuration = " << duration + gap << "\tVelocity = " << velocity << endl; }