void TouchTracker::addPeakToKeyState(const MLSignal& in) { mTemp.copy(in); for(int i=0; i<kMaxPeaksPerFrame; ++i) { // get highest peak from temp. Vec3 peak = mTemp.findPeak(); float z = peak.z(); // add peak to key state, or bail if (z > mOnThreshold) { Vec2 pos = in.correctPeak(peak.x(), peak.y()); int key = getKeyIndexAtPoint(pos); if(within(key, 0, mNumKeys)) { // send peak energy to key under peak. KeyState& keyState = mKeyStates[key]; MLRange kdzRange(mOnThreshold, mMaxForce*0.5, 0.001f, 1.f); float iirCoeff = kdzRange.convertAndClip(z); float dt = mCalibrator.differenceFromTemplateTouch(in, pos); //debug() << "new PEAK dt: " << dt << "\n"; keyState.mK = iirCoeff; keyState.zIn = z; keyState.dtIn = dt; if(mQuantizeToKey) { keyState.posIn = keyState.mKeyCenter; } else { keyState.posIn = pos; } } } else { break; } } }