Mercurial > hg > beaglert
view projects/airharp/Plectrum.cpp @ 287:4815ed0f21de prerelease
Makefile refactoring:
- avoids recursive call to build with/without main
- takes EXAMPLE parameter. Copies the examples/$(EXAMPLE) folder to projects/$(PROJECT) and $PROJECT defaults to exampleTestProject
- you can now `make run` (TODO: currently re-links, should instead run without linking)
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Wed, 18 May 2016 01:46:32 +0100 |
parents | 40badaff5729 |
children |
line wrap: on
line source
/* * * Plectrum model for touching and plucking strings * * Christian Heinrichs 04/2015 * * [inspired by E. Berdahl's pluck~ abstraction for the FireFader] * */ #include "Plectrum.h" #include "../include/Utilities.h" #include <cmath> #include <stdio.h> #include <cstdlib> Plectrum::Plectrum() { _contact = 0; _lastDistance = 0; } void Plectrum::setup(float spring, float damp, float hyst) { _spring = spring; _damp = damp; _hyst = hyst; } float Plectrum::update(float position, float stringPosition) { float distance = position - stringPosition; // Calculate spring/damp forces based on distance to string float springOut = distance * _spring; float dampOut = (distance - _lastDistance) * 44100; float out = springOut+dampOut; // If distance crosses zero, enable contact if((distance>0 && _lastDistance<=0)||(distance<0 && _lastDistance>=0)) _contact = 1; // If distance exceeds hysteresis threshold, jump to zero (i.e. 'pluck') if(fabs(distance)>_hyst) _contact = 0; // FIXME: contact doesn't switch back to zero if distance goes back in original direction _lastDistance = distance; return out * _contact; }