annotate projects/airharp/Plectrum.cpp @ 269:ac8eb07afcf5

Oxygen text added to each render.cpp file for the default projects. Text includes project explanation from Wiki, edited in places. Empty project added as a default project. Doxyfile updated. Each of the project locations added to INPUT configuration option. Consider just watching the whole project file so all new projects are automatically pulled through.
author Robert Jack <robert.h.jack@gmail.com>
date Tue, 17 May 2016 15:40:16 +0100
parents 40badaff5729
children
rev   line source
chris@164 1 /*
chris@164 2 *
chris@164 3 * Plectrum model for touching and plucking strings
chris@164 4 *
chris@164 5 * Christian Heinrichs 04/2015
chris@164 6 *
chris@164 7 * [inspired by E. Berdahl's pluck~ abstraction for the FireFader]
chris@164 8 *
chris@164 9 */
chris@164 10
chris@164 11 #include "Plectrum.h"
chris@164 12
chris@164 13 #include "../include/Utilities.h"
chris@164 14 #include <cmath>
chris@164 15 #include <stdio.h>
chris@164 16 #include <cstdlib>
chris@164 17
chris@164 18 Plectrum::Plectrum() {
chris@164 19
chris@164 20 _contact = 0;
chris@164 21 _lastDistance = 0;
chris@164 22
chris@164 23 }
chris@164 24
chris@164 25 void Plectrum::setup(float spring, float damp, float hyst) {
chris@164 26
chris@164 27 _spring = spring;
chris@164 28 _damp = damp;
chris@164 29 _hyst = hyst;
chris@164 30
chris@164 31 }
chris@164 32
chris@164 33 float Plectrum::update(float position, float stringPosition) {
chris@164 34
chris@164 35 float distance = position - stringPosition;
chris@164 36
chris@164 37 // Calculate spring/damp forces based on distance to string
chris@164 38
chris@164 39 float springOut = distance * _spring;
chris@164 40
chris@164 41 float dampOut = (distance - _lastDistance) * 44100;
chris@164 42
chris@164 43 float out = springOut+dampOut;
chris@164 44
chris@164 45 // If distance crosses zero, enable contact
chris@164 46
chris@164 47 if((distance>0 && _lastDistance<=0)||(distance<0 && _lastDistance>=0))
chris@164 48 _contact = 1;
chris@164 49
chris@164 50 // If distance exceeds hysteresis threshold, jump to zero (i.e. 'pluck')
chris@164 51
chris@164 52 if(fabs(distance)>_hyst)
chris@164 53 _contact = 0;
chris@164 54
chris@164 55 // FIXME: contact doesn't switch back to zero if distance goes back in original direction
chris@164 56
chris@164 57 _lastDistance = distance;
chris@164 58
chris@164 59 return out * _contact;
chris@164 60
chris@164 61 }