void control_update(s_playercontrols ** playercontrols, int numplayers) { unsigned long k; unsigned long i; int player; int t; s_playercontrols * pcontrols; unsigned port[4]; for(i=0; i<4; i++) port[i] = getPad(i); for(player=0; player<numplayers; player++) { pcontrols = playercontrols[player]; k = 0; for(i=0; i<32; i++){ t = pcontrols->settings[i]; if(t >= PAD_START && t <= PAD_END) { int portnum = (t-1) / 18; int shiftby = (t-1) % 18; if(portnum >= 0 && portnum <= 3) { if((port[portnum] >> shiftby) & 1) k |= (1<<i); } } } pcontrols->kb_break = 0; pcontrols->newkeyflags = k & (~pcontrols->keyflags); pcontrols->keyflags = k; }
void MantaAudioUnitController::freezePads() { for (int r = 0; r < 6; r++) { for (int c = 0; c < 8; c++) { if (getPad(r, c) > 0) { padFrozen[c + 8 * r] = true; padReleased[c + 8 * r] = false; } } } }
void MantaController::update() { if (!connected) { connected = getConnected(); return; } // pad velocities int idx = 0; for (int row=0; row<6; row++) { for (int col=0; col<8; col++) { padVelocity[row][col] = ofLerp(padVelocity[row][col], getPad(row, col) - prevPad[row][col], 0.1); prevPad[row][col] = getPad(row, col); idx++; } } // slider velocities for (int i=0; i<2; i++) { sliderVelocity[i] = ofLerp(sliderVelocity[i], getSlider(i) - prevSlider[i], velocityLerpRate); prevSlider[i] = getSlider(i); } // button velocities for (int i=0; i<4; i++) { buttonVelocity[i] = ofLerp(buttonVelocity[i], getButton(i) - prevButton[i], velocityLerpRate); prevButton[i] = getButton(i); } // finger stats float _padSum = 0; float _padAverage = 0; float _width = 0; float _height = 0; float _whRatio = 0; float _numPads = 0; fingers.clear(); fingerValues.clear(); ofPoint fingersMin = ofPoint(1, 1); ofPoint fingersMax = ofPoint(0, 0); float currentValue; for (int row=0; row<6; row++) { for (int col=0; col<8; col++) { currentValue = getPad(row, col); if (currentValue > 0) { ofPoint fingerPos = getPositionAtPad(row, col); fingers.push_back(fingerPos); fingerValues.push_back(currentValue); _numPads+=1.0; _padSum += currentValue; if (fingerPos.x > fingersMax.x) fingersMax.x = fingerPos.x; if (fingerPos.x < fingersMin.x) fingersMin.x = fingerPos.x; if (fingerPos.y > fingersMax.y) fingersMax.y = fingerPos.y; if (fingerPos.y < fingersMin.y) fingersMin.y = fingerPos.y; } } } _padAverage = fingers.size() > 0 ? _padSum / _numPads : 0.0; float _perimeter = 0.0; float _averageInterFingerDistance = 0.0; // stats on finger groups if (fingers.size() < 2) { _width = 0; _height = 0; _whRatio = 0; _perimeter = 0; _averageInterFingerDistance = 0; fingersHull.resize(0); fingersHullNormalized.resize(0); } else if (fingers.size() == 2) { _width = fingersMax.x - fingersMin.x; _height = fingersMax.y - fingersMin.y; _whRatio = _width / (1.0 + _height); _perimeter = (pow(fingers[0].x - fingers[1].x, 2)+ pow(fingers[0].y - fingers[1].y, 2)); _averageInterFingerDistance = _perimeter; fingersHull.resize(0); fingersHullNormalized.resize(0); } else { _width = fingersMax.x - fingersMin.x; _height = fingersMax.y - fingersMin.y; _whRatio = _width / _height; fingersHull = convexHull.getConvexHull(fingers); fingersHullNormalized.resize(fingersHull.size()); for (int i=0; i<fingersHull.size(); i++) { fingersHullNormalized[i].x = (fingersHull[i].x - fingersMin.x) / (fingersMax.x - fingersMin.x); fingersHullNormalized[i].y = (fingersHull[i].y - fingersMin.y) / (fingersMax.y - fingersMin.y); } for (int i=0; i<fingersHull.size()-1; i++) { _perimeter += (pow(fingersHull[i].x - fingersHull[(i+1)].x, 2)+ pow(fingersHull[i].y - fingersHull[(i+1)].y, 2)); } _averageInterFingerDistance = _perimeter / (float) (fingersHull.size()-1); } numPadsVelocity = ofLerp(numPadsVelocity, _numPads-numPads, velocityLerpRate); perimeterVelocity = ofLerp(perimeterVelocity, _perimeter-perimeter, velocityLerpRate); averageInterFingerDistanceVelocity = ofLerp(averageInterFingerDistanceVelocity, _averageInterFingerDistance-averageInterFingerDistance, velocityLerpRate); padSumVelocity = ofLerp(padSumVelocity, _padSum-padSum, velocityLerpRate); padAverageVelocity = ofLerp(padAverageVelocity, _padAverage-padAverage, velocityLerpRate); widthVelocity = ofLerp(widthVelocity, _width-padWidth, velocityLerpRate); heightVelocity = ofLerp(heightVelocity, _height-padHeight, velocityLerpRate); whRatioVelocity = ofLerp(whRatioVelocity, _whRatio-whRatio, velocityLerpRate); padWidth = _width; padHeight = _height; whRatio = _whRatio; perimeter = _perimeter; averageInterFingerDistance = _averageInterFingerDistance; padSum = _padSum; padAverage = _padAverage; numPads = _numPads; // centroid and weighted centroid ofPoint _centroid, _weightedCentroid; for (int i=0; i<fingers.size(); i++) { _centroid += fingers[i]; _weightedCentroid += (fingers[i] * fingerValues[i] / padSum); } _centroid /= _numPads; centroidVelocityX = ofLerp(centroidVelocityX, _centroid.x-centroidX, velocityLerpRate); centroidVelocityY = ofLerp(centroidVelocityY, _centroid.y-centroidY, velocityLerpRate); weightedCentroidVelocityX = ofLerp(weightedCentroidVelocityX, _weightedCentroid.x-weightedCentroidX, velocityLerpRate); weightedCentroidVelocityY = ofLerp(weightedCentroidVelocityY, _weightedCentroid.y-weightedCentroidY, velocityLerpRate); centroidX = _centroid.x; centroidY = _centroid.y; weightedCentroidX = _weightedCentroid.x; weightedCentroidY = _weightedCentroid.y; }
string PoolingLayer::convet2CaffeFormat() { string layerStrStart = "layer\n{\n"; string layerStrEnd = "}"; string nameStrStart = "\tname: \""; string nameStrEnd = "\"\n"; string typeStrStart = "\ttype: \""; string typeStrEnd = "\"\n"; string topStrStart = "\ttop: \""; string topStrEnd = "\"\n"; string bottomStrStart = "\tbottom: \""; string bottomStrEnd = "\"\n"; string poolingParamStrStart = "\tpooling_param\n\t{\n"; string poolingParamStrEnd = "\t}\n"; string kernelSizeStrStart = "\t\tkernel_size: "; string kernelSizeStrEnd = "\n"; /*string kernelHStrStart = "\t\tkernel_h: "; string kernelHStrEnd = "\n"; string kernelWStrStart = "\t\tkernel_w: "; string kernelWStrEnd = "\n";*/ string strideStrStart = "\t\tstride: "; string strideStrEnd = "\n"; /*string strideHStrStart = "\t\tstride_h: "; string strideHStrEnd = "\n"; string strideWStrStart = "\t\tstride_w: "; string strideWStrEnd = "\n";*/ string padStrStart = "\t\tpad: "; string padStrEnd = "\n"; /*string padHStrStart = "\t\tpad_h: "; string padHStrEnd = "\n"; string padWStrStart = "\t\tpad_w: "; string padWStrEnd = "\n";*/ string poolStrStart = "\t\tpool: "; string poolStrEnd = "\n"; string engineStrStart = "\t\tengine: "; string engineStrEnd = "\n"; string globalPoolingStrStart = "\t\tglobal_pooling: "; string globalPoolingStrEnd = "\n"; string phaseStrStart = "\tinclude:\n\t{\n"; string phaseStrEnd = "\t}\n"; string phaseStateStrStart = "\t\tphase: "; string phaseStateStrEnd = "\n"; string outStr = layerStrStart+ nameStrStart + mName + nameStrEnd + typeStrStart + getLayerType() + typeStrEnd; for(size_t i = 0; i < mTops->size(); i++) { outStr = outStr + topStrStart + (*mTops)[i] + topStrEnd; } for(size_t i = 0; i < mBottoms->size(); i++) { outStr = outStr + bottomStrStart + (*mBottoms)[i] + bottomStrEnd; } outStr += poolingParamStrStart; if (((PoolingParam*)mParam)->mPool != MMALab::POOLMETHOD_MAX) { switch (((PoolingParam*)mParam)->mPool) { case MMALab::POOLMETHOD_AVE: outStr += poolStrStart + "AVE" + poolStrEnd; break; case MMALab::POOLMETHOD_STOCHASTIC: outStr += poolStrStart + "STOCHASTIC" + poolStrEnd; break; } } if (((PoolingParam*)mParam)->mPad != 0) { outStr += padStrStart + to_string(getPad()) + padStrEnd; } /*if (((PoolingParam*)mParam)->mPadH != 0) { outStr += padHStrStart + to_string(getPadH()) + padHStrEnd; } if (((PoolingParam*)mParam)->mPadW != 0) { outStr += padWStrStart + to_string(getPadW()) + padWStrEnd; }*/ outStr += kernelSizeStrStart + to_string(getKernelSize()) + kernelSizeStrEnd; /*outStr += kernelHStrStart + to_string(getKernelH()) + kernelHStrEnd; outStr += kernelWStrStart + to_string(getKernelW()) + kernelWStrEnd;*/ if (((PoolingParam*)mParam)->mStride != 1) { outStr += strideStrStart + to_string(getStride()) + strideStrEnd; } /*if (((PoolingParam*)mParam)->mStrideH != 1) { outStr += strideHStrStart + to_string(getStrideH()) + strideHStrEnd; } if (((PoolingParam*)mParam)->mStrideW != 1) { outStr += strideWStrStart + to_string(getStrideW()) + strideWStrEnd; }*/ if (((PoolingParam*)mParam)->mEngine != MMALab::DEFAULT) { switch (((PoolingParam*)mParam)->mEngine) { case MMALab::CAFFE: outStr += engineStrStart + "CAFFE" + engineStrEnd; break; case MMALab::CUDNN: outStr += engineStrStart + "CUDNN" + engineStrEnd; break; } } if (((PoolingParam*)mParam)->mGlobalPooling != false) { outStr += globalPoolingStrStart + "true" + globalPoolingStrEnd; } outStr += poolingParamStrEnd; if (mPhase != Phase::BOTH) { outStr += phaseStrStart + phaseStateStrStart; if (mPhase == Phase::TRAIN) { outStr += "TRAIN"; } else if (mPhase == Phase::TEST) { outStr += "TEST"; } outStr += phaseStateStrEnd + phaseStrEnd; } outStr += layerStrEnd; return outStr; }
void MantaStats::update() { ofxManta::update(); if (!IsConnected()) { return; } // pad velocities int idx = 0; for (int row=0; row<6; row++) { for (int col=0; col<8; col++) { padVelocity[row][col] = ofLerp(padVelocity[row][col], getPad(row, col) - prevPad[row][col], 0.1); prevPad[row][col] = getPad(row, col); idx++; } } // slider velocities for (int i=0; i<2; i++) { sliderVelocity[i] = ofLerp(sliderVelocity[i], getSlider(i) - prevSlider[i], velocityLerpRate); prevSlider[i] = getSlider(i); } // button velocities for (int i=0; i<4; i++) { buttonVelocity[i] = ofLerp(buttonVelocity[i], getButton(i) - prevButton[i], velocityLerpRate); prevButton[i] = getButton(i); } // finger stats float _padSum = 0; float _padAverage = 0; float _width = 0; float _height = 0; float _whRatio = 0; float _numPads = 0; fingers.clear(); fingerValues.clear(); ofPoint fingersMin = ofPoint(1, 1); ofPoint fingersMax = ofPoint(0, 0); float currentValue; for (int row=0; row<6; row++) { for (int col=0; col<8; col++) { currentValue = getPad(row, col); if (currentValue > 0) { ofPoint fingerPos = getPositionAtPad(row, col); fingers.push_back(fingerPos); fingerValues.push_back(currentValue); _numPads+=1.0; _padSum += currentValue; if (fingerPos.x > fingersMax.x) fingersMax.x = fingerPos.x; if (fingerPos.x < fingersMin.x) fingersMin.x = fingerPos.x; if (fingerPos.y > fingersMax.y) fingersMax.y = fingerPos.y; if (fingerPos.y < fingersMin.y) fingersMin.y = fingerPos.y; } } } _padAverage = fingers.size() > 0 ? _padSum / _numPads : 0.0; float _perimeter = 0.0; float _area = 0.0; float _averageInterFingerDistance = 0.0; // stats on finger groups if (fingers.size() < 2) { _width = 0; _height = 0; _whRatio = 0; _perimeter = 0; _area = 0; _averageInterFingerDistance = 0; fingersHull.resize(0); } else if (fingers.size() == 2) { _width = fingersMax.x - fingersMin.x; _height = fingersMax.y - fingersMin.y; _whRatio = _width / (1.0 + _height); _perimeter = (pow(fingers[0].x - fingers[1].x, 2)+ pow(fingers[0].y - fingers[1].y, 2)); _area = 0; _averageInterFingerDistance = _perimeter; fingersHull.resize(0); } else { _width = fingersMax.x - fingersMin.x; _height = fingersMax.y - fingersMin.y; _whRatio = _width / (1.0 + _height); fingersHull = convexHull.getConvexHull(fingers); for (int i=0; i<fingersHull.size()-1; i++) { _perimeter += (pow(fingersHull[i].x - fingersHull[(i+1)].x, 2)+ pow(fingersHull[i].y - fingersHull[(i+1)].y, 2)); } _area = convexHull.getArea(fingersHull); _averageInterFingerDistance = _perimeter / (float) (fingersHull.size()-1); } numPadsVelocity = ofLerp(numPadsVelocity, _numPads-numPads, velocityLerpRate); perimeterVelocity = ofLerp(perimeterVelocity, _perimeter-perimeter, velocityLerpRate); areaVelocity = ofLerp(areaVelocity, _area-area, velocityLerpRate); averageInterFingerDistanceVelocity = ofLerp(averageInterFingerDistanceVelocity, _averageInterFingerDistance-averageInterFingerDistance, velocityLerpRate); padSumVelocity = ofLerp(padSumVelocity, _padSum-padSum, velocityLerpRate); padAverageVelocity = ofLerp(padAverageVelocity, _padAverage-padAverage, velocityLerpRate); widthVelocity = ofLerp(widthVelocity, _width-padWidth, velocityLerpRate); heightVelocity = ofLerp(heightVelocity, _height-padHeight, velocityLerpRate); whRatioVelocity = ofLerp(whRatioVelocity, _whRatio-whRatio, velocityLerpRate); if (abs(numPadsVelocity) < EPSILON) numPadsVelocity = 0; if (abs(padSumVelocity) < EPSILON) padSumVelocity = 0; if (abs(padAverageVelocity) < EPSILON) padAverageVelocity = 0; if (abs(centroidVelocityX) < EPSILON) centroidVelocityX = 0; if (abs(centroidVelocityY) < EPSILON) centroidVelocityY = 0; if (abs(weightedCentroidVelocityX) < EPSILON) weightedCentroidVelocityX = 0; if (abs(weightedCentroidVelocityY) < EPSILON) weightedCentroidVelocityY = 0; if (abs(averageInterFingerDistanceVelocity) < EPSILON) averageInterFingerDistanceVelocity = 0; if (abs(perimeterVelocity) < EPSILON) perimeterVelocity = 0; if (abs(areaVelocity) < EPSILON) areaVelocity = 0; if (abs(widthVelocity) < EPSILON) widthVelocity = 0; if (abs(heightVelocity) < EPSILON) heightVelocity = 0; if (abs(whRatioVelocity) < EPSILON) whRatioVelocity = 0; // centroid and weighted centroid ofPoint _centroid, _weightedCentroid; for (int i=0; i<fingers.size(); i++) { _centroid += fingers[i]; _weightedCentroid += (fingers[i] * fingerValues[i] / _padSum); } _centroid /= _numPads; centroidVelocityX = ofLerp(centroidVelocityX, _centroid.x-centroidX, velocityLerpRate); centroidVelocityY = ofLerp(centroidVelocityY, _centroid.y-centroidY, velocityLerpRate); weightedCentroidVelocityX = ofLerp(weightedCentroidVelocityX, _weightedCentroid.x-weightedCentroidX, velocityLerpRate); weightedCentroidVelocityY = ofLerp(weightedCentroidVelocityY, _weightedCentroid.y-weightedCentroidY, velocityLerpRate); // update stats compareStats(9, &padWidth, _width); compareStats(11, &padHeight, _height); compareStats(12, &whRatio, _whRatio); compareStats(6, &perimeter, _perimeter); compareStats(8, &area, _area); compareStats(10, &averageInterFingerDistance, _averageInterFingerDistance); compareStats(2, &padSum, _padSum); compareStats(4, &padAverage, _padAverage); compareStats(0, &numPads, _numPads); compareStats(1, ¢roidX, _centroid.x); compareStats(3, ¢roidY, _centroid.y); compareStats(5, &weightedCentroidX, _weightedCentroid.x); compareStats(7, &weightedCentroidY, _weightedCentroid.y); }