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@32
|
15 isActive(true), inTriangle(false), isVisible(true),
|
samer@32
|
16 octave(0), amplitude(0.5), status(pending), id(id),
|
samer@32
|
17 posx(0), posy(0), truex(-1), truey(-1) {}
|
hekeus@6
|
18
|
samer@23
|
19 void Voice::draw(bool highlight){
|
samer@32
|
20 if (!isVisible) return;
|
samer@32
|
21
|
samer@25
|
22 int r,g,b;
|
samer@25
|
23 switch (status) {
|
samer@25
|
24 case clear: r=1; g=1; b=0; break;
|
samer@25
|
25 default: r=1; g=0; b=0; break;
|
samer@25
|
26 }
|
samer@25
|
27 if (isActive) { r=2*r; g=2*g; b=2*b; }
|
samer@25
|
28
|
samer@25
|
29 if (inTriangle && truex>=0) {
|
samer@25
|
30 ofSetColor(230,230,230);
|
samer@25
|
31 ofLine(posx,posy,truex,truey);
|
samer@25
|
32 // ofNoFill(); ofCircle(truex, truey, RADIUS/2-1);
|
samer@25
|
33 }
|
samer@25
|
34 ofSetColor(100*r,60*g,60*b);
|
samer@18
|
35 ofFill();
|
samer@23
|
36 ofCircle(posx, posy, RADIUS);
|
samer@25
|
37 ofNoFill();
|
samer@25
|
38 if (highlight) ofSetColor(230, 230, 230);
|
samer@25
|
39 ofCircle(posx, posy, RADIUS);
|
samer@25
|
40 }
|
samer@25
|
41
|
samer@25
|
42 void Voice::draw_alt(bool highlight){
|
samer@32
|
43 if (!isVisible) return;
|
samer@32
|
44
|
samer@25
|
45 int r,g,b;
|
samer@25
|
46 switch (status) {
|
samer@25
|
47 case clear: r=1; g=1; b=0; break;
|
samer@25
|
48 default: r=1; g=0; b=0; break;
|
samer@25
|
49 }
|
samer@25
|
50 if (isActive) { r=2*r; g=2*g; b=2*b; }
|
samer@25
|
51
|
samer@25
|
52 if (inTriangle && truex>=0) {
|
samer@25
|
53 ofSetColor(230,230,230);
|
samer@25
|
54 ofLine(posx,posy,truex,truey);
|
samer@25
|
55 ofSetColor(100*r,60*g,60*b);
|
samer@25
|
56 ofFill();
|
samer@25
|
57 ofCircle(truex, truey, RADIUS);
|
samer@18
|
58 ofNoFill();
|
samer@25
|
59 if (highlight) ofSetColor(230, 230, 230);
|
samer@25
|
60 ofCircle(truex, truey, RADIUS);
|
samer@25
|
61 } else {
|
samer@25
|
62 ofSetColor(100*r,60*g,60*b);
|
samer@25
|
63 ofFill();
|
samer@23
|
64 ofCircle(posx, posy, RADIUS);
|
hekeus@6
|
65 ofNoFill();
|
samer@25
|
66 if (highlight) ofSetColor(230, 230, 230);
|
samer@23
|
67 ofCircle(posx, posy, RADIUS);
|
hekeus@6
|
68 }
|
hekeus@6
|
69 }
|
hekeus@6
|
70
|
samer@25
|
71
|
samer@22
|
72 double Voice::louder() { return amplitude=min(1,amplitude*1.0625); }
|
samer@22
|
73 double Voice::quieter() { return amplitude/=1.0625; }
|