annotate src/Voice.cpp @ 23:460c05dd74d0

Various enhancements and code refactorings: * added some compiler warnings. * text display is centred and with settable TrueType font * removed highlight member from Voice state - value is derived from other data and passed to Voice::draw() * Changed voice radius from member to defined constant * default number of voices is now 4 * adjusted some colours and buffer zone width * new keyboard commands: reset, quit. * when keyboard disabled, keys are now passed to server via OSC * added handlers for various new OSC messages: - fullscreen, reset, quit, keyboard enable - notify (voice state) : several sub-messages * call reset and calibrate on window resize (fits triangle to window)
author samer
date Sat, 04 Feb 2012 23:14:38 +0000
parents 4dcc4312b5fa
children f4ebb87adec1
rev   line source
hekeus@6 1 /*
hekeus@6 2 * Voice.cpp
hekeus@6 3 * MelodyTriangle
hekeus@6 4 *
hekeus@6 5 * Created by Henrik Ekeus on 12/01/2012.
hekeus@6 6 * Copyright 2012 Queen Mary University of London. All rights reserved.
hekeus@6 7 *
hekeus@6 8 */
hekeus@6 9
hekeus@6 10 #include "Voice.h"
hekeus@6 11
samer@13 12 inline static double min(double x,double y) { return (x<y) ? x : y; }
samer@13 13
samer@22 14 Voice::Voice(int id):
samer@23 15 isActive(true), inTriangle(false), status(pending),
samer@23 16 octave(0), amplitude(0.6), id(id), posx(0), posy(0) {}
hekeus@6 17
samer@23 18 void Voice::draw(bool highlight){
samer@23 19 // if (inTriangle) {
samer@23 20 int r,g,b;
samer@23 21 switch (status) {
samer@23 22 case clear: r=1; g=1; b=0; break;
samer@23 23 default: r=1; g=0; b=0; break;
samer@23 24 // case pending: r=1; g=1; b=0; break;
samer@23 25 // case waiting: r=1; g=0; b=0; break;
samer@23 26 // case moved: r=1; g=0; b=1; break;
samer@23 27 // default: r=0; g=1; b=0;
samer@23 28 }
samer@23 29 if (isActive) { r=2*r; g=2*g; b=2*b; }
samer@23 30 ofSetColor(100*r,60*g,60*b);
samer@23 31 // } else {
samer@23 32 // if (isActive) ofSetColor(128,128,128);
samer@23 33 // else ofSetColor(64,64,64);
samer@23 34 // }
hekeus@6 35
samer@18 36 ofFill();
samer@23 37 ofCircle(posx, posy, RADIUS);
samer@18 38 //ofNoFill();
samer@23 39 //ofCircle(posx, posy, RADIUS);
samer@18 40
samer@18 41 if (highlight) {
samer@18 42 ofSetColor(230, 230, 230);
samer@18 43 ofNoFill();
samer@23 44 ofCircle(posx, posy, RADIUS);
samer@10 45 } else {
hekeus@6 46 ofNoFill();
samer@23 47 ofCircle(posx, posy, RADIUS);
hekeus@6 48 }
hekeus@6 49 }
hekeus@6 50
samer@22 51 double Voice::louder() { return amplitude=min(1,amplitude*1.0625); }
samer@22 52 double Voice::quieter() { return amplitude/=1.0625; }
hekeus@6 53
samer@23 54 enum Voice::status Voice::stringToStatus(string s) throw(bad_status) {
samer@23 55 if (s=="received") return clear;
samer@23 56 else if (s=="pending") return pending;
samer@23 57 else if (s=="requested") return waiting;
samer@23 58 else throw bad_status(s);
samer@23 59 }
samer@23 60
samer@23 61 const char *Voice::bad_status::what() const throw() {
samer@23 62 return ("Unrecognised voice status: "+str+".").c_str();
samer@23 63 }
samer@23 64