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
|