cleaned all trailing white space from source files.
[sdk] / samples / audio / Piano / Piano.ec
1 import "EcereAudio"
2
3 // There are 12 half-tones in an octave, and the frequency doubles in an octave.
4 define Do = 1.0;
5 define Do_ = 1.0594630943592952645618252949463; // The root 12 of 2.
6 define Re = Do_*Do_;
7 define Re_ = Re*Do_;
8 define Mi = Re_*Do_;
9 define Fa = Mi*Do_;
10 define Fa_ = Fa*Do_;
11 define Sol = Fa_*Do_;
12 define Sol_ = Sol*Do_;
13 define La = Sol_*Do_;
14 define La_ = La*Do_;
15 define Si = La_*Do_;
16
17 class MainWindow : Window
18 {
19    text = "A keyboard piano";
20    background = black;
21    borderStyle = sizable;
22    hasMaximize = true;
23    hasMinimize = true;
24    hasClose = true;
25    size = { 576, 432 };
26
27    Mixer mixer { };
28    Sound ding { "ding.wav" };
29    Sound chord { "chord.wav" };
30    Sound instrument;
31
32    instrument = ding;
33
34    bool OnCreate()
35    {
36       mixer.systemHandle = systemHandle;
37       return true;
38    }
39
40    void OnDestroy()
41    {
42       delete mixer;
43    }
44
45    bool OnKeyDown(Key key, unichar ch)
46    {
47       switch(key)
48       {
49          case f1: instrument = ding; break;
50          case f2: instrument = chord; break;
51
52          // The regular octave on the zxcvbn row, sharps above (asdf)
53          case z:     mixer.Play(instrument, 1.0, -1, Do); break;
54          case x:     mixer.Play(instrument, 1.0, -.8, Re); break;
55          case c:     mixer.Play(instrument, 1.0, -.6, Mi); break;
56          case v:     mixer.Play(instrument, 1.0, -.4, Fa); break;
57          case b:     mixer.Play(instrument, 1.0, -.2, Sol); break;
58          case n:     mixer.Play(instrument, 1.0, 0, La); break;
59          case m:     mixer.Play(instrument, 1.0, .2, Si); break;
60          case comma: mixer.Play(instrument, 1.0, .4, Do*2); break;
61          case period:mixer.Play(instrument, 1.0, .6, Re*2); break;
62          case slash: mixer.Play(instrument, 1.0, .8, Mi*2); break;
63          case s:     mixer.Play(instrument, 1.0, -.9, Do_); break;
64          case d:     mixer.Play(instrument, 1.0, -.7, Re_); break;
65          case g:     mixer.Play(instrument, 1.0, -.3, Fa_); break;
66          case h:     mixer.Play(instrument, 1.0, -.1, Sol_); break;
67          case j:     mixer.Play(instrument, 1.0, .1, La_); break;
68          case l:     mixer.Play(instrument, 1.0, .5, Do_*2); break;
69          case colon: mixer.Play(instrument, 1.0, .7, Re_*2); break;
70
71          // The lower octave on the qwerty row, sharps above (digits)
72          case q:     mixer.Play(instrument, 1.0, 0, Do/2); break;
73          case w:     mixer.Play(instrument, 1.0, 0, Re/2); break;
74          case e:     mixer.Play(instrument, 1.0, 0, Mi/2); break;
75          case r:     mixer.Play(instrument, 1.0, 0, Fa/2); break;
76          case t:     mixer.Play(instrument, 1.0, 0, Sol/2); break;
77          case y:     mixer.Play(instrument, 1.0, 0, La/2); break;
78          case u:     mixer.Play(instrument, 1.0, 0, Si/2); break;
79          case i:     mixer.Play(instrument, 1.0, 0, Do); break;
80          case o:     mixer.Play(instrument, 1.0, 0, Re); break;
81          case p:     mixer.Play(instrument, 1.0, 0, Mi); break;
82          case k2:     mixer.Play(instrument, 1.0, 0, Do_/2); break;
83          case k3:     mixer.Play(instrument, 1.0, 0, Re_/2); break;
84          case k5:     mixer.Play(instrument, 1.0, 0, Fa_/2); break;
85          case k6:     mixer.Play(instrument, 1.0, 0, Sol_/2); break;
86          case k7:     mixer.Play(instrument, 1.0, 0, La_/2); break;
87          case k9:     mixer.Play(instrument, 1.0, 0, Do_); break;
88          case k0:     mixer.Play(instrument, 1.0, 0, Re_); break;
89       }
90       return true;
91    }
92 }
93
94 MainWindow mainWindow { };