Dependencies: SoundWaveGenerator mbed
main.cpp@0:8697fedc1d62, 2011-06-28 (annotated)
- Committer:
- peccu
- Date:
- Tue Jun 28 07:16:11 2011 +0000
- Revision:
- 0:8697fedc1d62
add coin sound
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
peccu | 0:8697fedc1d62 | 1 | #include "mbed.h" |
peccu | 0:8697fedc1d62 | 2 | #include "snd_wave_generator/SoundWaveGenerator.h" |
peccu | 0:8697fedc1d62 | 3 | #include "snd_wave_generator/TriangleWave.h" |
peccu | 0:8697fedc1d62 | 4 | #include "snd_wave_generator/SineWave.h" |
peccu | 0:8697fedc1d62 | 5 | #include "snd_wave_generator/WaveCombo.h" |
peccu | 0:8697fedc1d62 | 6 | #include <math.h> |
peccu | 0:8697fedc1d62 | 7 | |
peccu | 0:8697fedc1d62 | 8 | using namespace snd_wave_generator; |
peccu | 0:8697fedc1d62 | 9 | Serial pc(USBTX, USBRX); // tx, rx |
peccu | 0:8697fedc1d62 | 10 | BusOut leds(LED1, LED2, LED4); |
peccu | 0:8697fedc1d62 | 11 | SoundWaveGenerator g(16000); |
peccu | 0:8697fedc1d62 | 12 | |
peccu | 0:8697fedc1d62 | 13 | // code to code number |
peccu | 0:8697fedc1d62 | 14 | int code2int(char c){ |
peccu | 0:8697fedc1d62 | 15 | int ret = -1; |
peccu | 0:8697fedc1d62 | 16 | switch(c){ |
peccu | 0:8697fedc1d62 | 17 | case 'C': ret = 0; break; |
peccu | 0:8697fedc1d62 | 18 | case 'c': ret = 1; break; // C#/Db |
peccu | 0:8697fedc1d62 | 19 | case 'D': ret = 2; break; |
peccu | 0:8697fedc1d62 | 20 | case 'd': ret = 3; break; // D#/Eb |
peccu | 0:8697fedc1d62 | 21 | case 'E': ret = 4; break; |
peccu | 0:8697fedc1d62 | 22 | case 'F': ret = 5; break; |
peccu | 0:8697fedc1d62 | 23 | case 'f': ret = 6; break; // F#/Gb |
peccu | 0:8697fedc1d62 | 24 | case 'G': ret = 7; break; |
peccu | 0:8697fedc1d62 | 25 | case 'g': ret = 8; break; // G#/Ab |
peccu | 0:8697fedc1d62 | 26 | case 'A': ret = 9; break; |
peccu | 0:8697fedc1d62 | 27 | case 'a': ret = 10; break; // A#/Bb |
peccu | 0:8697fedc1d62 | 28 | case 'B': ret = 11; break; |
peccu | 0:8697fedc1d62 | 29 | default: |
peccu | 0:8697fedc1d62 | 30 | ret = -1; |
peccu | 0:8697fedc1d62 | 31 | } |
peccu | 0:8697fedc1d62 | 32 | //printf("case%d\r\n",ret); |
peccu | 0:8697fedc1d62 | 33 | return ret; |
peccu | 0:8697fedc1d62 | 34 | } |
peccu | 0:8697fedc1d62 | 35 | |
peccu | 0:8697fedc1d62 | 36 | // (C, C#, D, D#, E, F, F#, G, G#, A, A#, B) |
peccu | 0:8697fedc1d62 | 37 | float w(int ov,char code) { |
peccu | 0:8697fedc1d62 | 38 | int note_no = code2int(code) + (ov + 2) * 12; |
peccu | 0:8697fedc1d62 | 39 | return 440 * pow(2.0 , (note_no - 69) / 12.0 ); |
peccu | 0:8697fedc1d62 | 40 | } |
peccu | 0:8697fedc1d62 | 41 | |
peccu | 0:8697fedc1d62 | 42 | SineWave C3(w(3,'C'));SineWave C4(w(4,'C'));SineWave C5(w(5,'C')); |
peccu | 0:8697fedc1d62 | 43 | SineWave c3(w(3,'c'));SineWave c4(w(4,'c'));SineWave c5(w(5,'c')); |
peccu | 0:8697fedc1d62 | 44 | SineWave D3(w(3,'D'));SineWave D4(w(4,'D'));SineWave D5(w(5,'D')); |
peccu | 0:8697fedc1d62 | 45 | SineWave d3(w(3,'d'));SineWave d4(w(4,'d'));SineWave d5(w(5,'d')); |
peccu | 0:8697fedc1d62 | 46 | SineWave E3(w(3,'E'));SineWave E4(w(4,'E'));SineWave E5(w(5,'E')); |
peccu | 0:8697fedc1d62 | 47 | SineWave F3(w(3,'F'));SineWave F4(w(4,'F'));SineWave F5(w(5,'F')); |
peccu | 0:8697fedc1d62 | 48 | SineWave f3(w(3,'f'));SineWave f4(w(4,'f'));SineWave f5(w(5,'f')); |
peccu | 0:8697fedc1d62 | 49 | SineWave G3(w(3,'G'));SineWave G4(w(4,'G'));SineWave G5(w(5,'G')); |
peccu | 0:8697fedc1d62 | 50 | SineWave g3(w(3,'g'));SineWave g4(w(4,'g'));SineWave g5(w(5,'g')); |
peccu | 0:8697fedc1d62 | 51 | SineWave A3(w(3,'A'));SineWave A4(w(4,'A'));SineWave A5(w(5,'A')); |
peccu | 0:8697fedc1d62 | 52 | SineWave a3(w(3,'a'));SineWave a4(w(4,'a'));SineWave a5(w(5,'a')); |
peccu | 0:8697fedc1d62 | 53 | SineWave B3(w(3,'B'));SineWave B4(w(4,'B'));SineWave B5(w(5,'B')); |
peccu | 0:8697fedc1d62 | 54 | //3cdefgab 4cdefgab 5cdefgab |
peccu | 0:8697fedc1d62 | 55 | |
peccu | 0:8697fedc1d62 | 56 | // play with length |
peccu | 0:8697fedc1d62 | 57 | void p(SineWave *s,float length){ |
peccu | 0:8697fedc1d62 | 58 | g.play(s);wait(length); |
peccu | 0:8697fedc1d62 | 59 | } |
peccu | 0:8697fedc1d62 | 60 | // stop length |
peccu | 0:8697fedc1d62 | 61 | void s(float stop){ |
peccu | 0:8697fedc1d62 | 62 | g.stop();wait(stop); |
peccu | 0:8697fedc1d62 | 63 | } |
peccu | 0:8697fedc1d62 | 64 | |
peccu | 0:8697fedc1d62 | 65 | // defines of sound sequenses |
peccu | 0:8697fedc1d62 | 66 | void coin(void){ |
peccu | 0:8697fedc1d62 | 67 | p(&B4,0.05); |
peccu | 0:8697fedc1d62 | 68 | p(&E5,0.35); |
peccu | 0:8697fedc1d62 | 69 | s(0.2); |
peccu | 0:8697fedc1d62 | 70 | } |
peccu | 0:8697fedc1d62 | 71 | |
peccu | 0:8697fedc1d62 | 72 | void mainTheme(void){ |
peccu | 0:8697fedc1d62 | 73 | p(&C3,0.3); |
peccu | 0:8697fedc1d62 | 74 | s(0.2); |
peccu | 0:8697fedc1d62 | 75 | } |
peccu | 0:8697fedc1d62 | 76 | |
peccu | 0:8697fedc1d62 | 77 | |
peccu | 0:8697fedc1d62 | 78 | // main routin |
peccu | 0:8697fedc1d62 | 79 | int main() { |
peccu | 0:8697fedc1d62 | 80 | // while(1) { |
peccu | 0:8697fedc1d62 | 81 | coin();coin();coin();coin();coin();coin();coin();coin();coin(); |
peccu | 0:8697fedc1d62 | 82 | exit(0); |
peccu | 0:8697fedc1d62 | 83 | //} |
peccu | 0:8697fedc1d62 | 84 | } |