ssss
Audio.cpp@0:e9c48701a273, 2017-08-07 (annotated)
- Committer:
- irsanjul
- Date:
- Mon Aug 07 10:54:06 2017 +0000
- Revision:
- 0:e9c48701a273
zzz
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
irsanjul | 0:e9c48701a273 | 1 | #include "Audio.h" |
irsanjul | 0:e9c48701a273 | 2 | |
irsanjul | 0:e9c48701a273 | 3 | extern Serial dbg; |
irsanjul | 0:e9c48701a273 | 4 | |
irsanjul | 0:e9c48701a273 | 5 | double nada[10] = {0, 247, 262, 294, 330, 349, 392, 440, 494, 523}; |
irsanjul | 0:e9c48701a273 | 6 | //double nadas[16] = { 6, 6, 0, 6, |
irsanjul | 0:e9c48701a273 | 7 | // 0, 4, 6, 0, |
irsanjul | 0:e9c48701a273 | 8 | // 8, 0, 0, 0, |
irsanjul | 0:e9c48701a273 | 9 | // 1, 0, 0, 0 }; |
irsanjul | 0:e9c48701a273 | 10 | // |
irsanjul | 0:e9c48701a273 | 11 | unsigned int nadas[8] = { 1, 2, 3, 4, |
irsanjul | 0:e9c48701a273 | 12 | 5, 6, 7, 8 }; |
irsanjul | 0:e9c48701a273 | 13 | |
irsanjul | 0:e9c48701a273 | 14 | Audio::Audio(PinName buzzer): _out(buzzer) |
irsanjul | 0:e9c48701a273 | 15 | { |
irsanjul | 0:e9c48701a273 | 16 | } |
irsanjul | 0:e9c48701a273 | 17 | |
irsanjul | 0:e9c48701a273 | 18 | void Audio::SetVolume(double volume) |
irsanjul | 0:e9c48701a273 | 19 | { |
irsanjul | 0:e9c48701a273 | 20 | vol = volume; |
irsanjul | 0:e9c48701a273 | 21 | } |
irsanjul | 0:e9c48701a273 | 22 | |
irsanjul | 0:e9c48701a273 | 23 | void Audio::SetDuration(unsigned int milisec) |
irsanjul | 0:e9c48701a273 | 24 | { |
irsanjul | 0:e9c48701a273 | 25 | ms = milisec; |
irsanjul | 0:e9c48701a273 | 26 | } |
irsanjul | 0:e9c48701a273 | 27 | |
irsanjul | 0:e9c48701a273 | 28 | void Audio::PlayNote(unsigned int angka) |
irsanjul | 0:e9c48701a273 | 29 | { |
irsanjul | 0:e9c48701a273 | 30 | if(angka > 8) angka -= 8; |
irsanjul | 0:e9c48701a273 | 31 | |
irsanjul | 0:e9c48701a273 | 32 | double Nada = nada[angka]; |
irsanjul | 0:e9c48701a273 | 33 | PlayNote(Nada*4.24, ms, vol); |
irsanjul | 0:e9c48701a273 | 34 | } |
irsanjul | 0:e9c48701a273 | 35 | |
irsanjul | 0:e9c48701a273 | 36 | void Audio::mute() |
irsanjul | 0:e9c48701a273 | 37 | { |
irsanjul | 0:e9c48701a273 | 38 | DigitalOut *out = new DigitalOut(_out); |
irsanjul | 0:e9c48701a273 | 39 | out->write(0); |
irsanjul | 0:e9c48701a273 | 40 | delete out; |
irsanjul | 0:e9c48701a273 | 41 | } |
irsanjul | 0:e9c48701a273 | 42 | |
irsanjul | 0:e9c48701a273 | 43 | void Audio::PlayNote(double frequency, double duration, double volume) |
irsanjul | 0:e9c48701a273 | 44 | { |
irsanjul | 0:e9c48701a273 | 45 | PwmOut *out = new PwmOut(_out); |
irsanjul | 0:e9c48701a273 | 46 | out->period(1.0/frequency); |
irsanjul | 0:e9c48701a273 | 47 | out->write(volume/2.0); |
irsanjul | 0:e9c48701a273 | 48 | wait_ms(duration); |
irsanjul | 0:e9c48701a273 | 49 | out->write(0.0); |
irsanjul | 0:e9c48701a273 | 50 | delete out; |
irsanjul | 0:e9c48701a273 | 51 | } |
irsanjul | 0:e9c48701a273 | 52 | |
irsanjul | 0:e9c48701a273 | 53 | // ----------------------------------------------------------------------------- |
irsanjul | 0:e9c48701a273 | 54 | MyAudio::MyAudio(PinName buzz) : Audio (buzz) |
irsanjul | 0:e9c48701a273 | 55 | {} |
irsanjul | 0:e9c48701a273 | 56 | |
irsanjul | 0:e9c48701a273 | 57 | void MyAudio::play(const int &code) |
irsanjul | 0:e9c48701a273 | 58 | { |
irsanjul | 0:e9c48701a273 | 59 | switch(code) |
irsanjul | 0:e9c48701a273 | 60 | { |
irsanjul | 0:e9c48701a273 | 61 | case 0 : |
irsanjul | 0:e9c48701a273 | 62 | mute(); |
irsanjul | 0:e9c48701a273 | 63 | break; |
irsanjul | 0:e9c48701a273 | 64 | case 1 : |
irsanjul | 0:e9c48701a273 | 65 | playing(6); |
irsanjul | 0:e9c48701a273 | 66 | set(); |
irsanjul | 0:e9c48701a273 | 67 | playing(1); |
irsanjul | 0:e9c48701a273 | 68 | set(); |
irsanjul | 0:e9c48701a273 | 69 | mute(); |
irsanjul | 0:e9c48701a273 | 70 | break; |
irsanjul | 0:e9c48701a273 | 71 | case 2 : |
irsanjul | 0:e9c48701a273 | 72 | |
irsanjul | 0:e9c48701a273 | 73 | // break; |
irsanjul | 0:e9c48701a273 | 74 | case 3 : |
irsanjul | 0:e9c48701a273 | 75 | |
irsanjul | 0:e9c48701a273 | 76 | // break; |
irsanjul | 0:e9c48701a273 | 77 | case 4 : |
irsanjul | 0:e9c48701a273 | 78 | set(); |
irsanjul | 0:e9c48701a273 | 79 | playing(1); |
irsanjul | 0:e9c48701a273 | 80 | break; |
irsanjul | 0:e9c48701a273 | 81 | case 5 : |
irsanjul | 0:e9c48701a273 | 82 | set(); |
irsanjul | 0:e9c48701a273 | 83 | for(int i=0; i<3; i++)playing(4); |
irsanjul | 0:e9c48701a273 | 84 | break; |
irsanjul | 0:e9c48701a273 | 85 | default: |
irsanjul | 0:e9c48701a273 | 86 | set(100, 0.5); |
irsanjul | 0:e9c48701a273 | 87 | for(int j=0; j<8; j++) |
irsanjul | 0:e9c48701a273 | 88 | { |
irsanjul | 0:e9c48701a273 | 89 | playing(nadas[j]); |
irsanjul | 0:e9c48701a273 | 90 | } |
irsanjul | 0:e9c48701a273 | 91 | set(); |
irsanjul | 0:e9c48701a273 | 92 | mute(); |
irsanjul | 0:e9c48701a273 | 93 | break; |
irsanjul | 0:e9c48701a273 | 94 | } |
irsanjul | 0:e9c48701a273 | 95 | } |
irsanjul | 0:e9c48701a273 | 96 | |
irsanjul | 0:e9c48701a273 | 97 | void MyAudio::set(double dur, double vol) |
irsanjul | 0:e9c48701a273 | 98 | { |
irsanjul | 0:e9c48701a273 | 99 | Audio::SetVolume(vol); |
irsanjul | 0:e9c48701a273 | 100 | Audio::SetDuration(dur); |
irsanjul | 0:e9c48701a273 | 101 | } |
irsanjul | 0:e9c48701a273 | 102 | |
irsanjul | 0:e9c48701a273 | 103 | void MyAudio::playing(unsigned int note) |
irsanjul | 0:e9c48701a273 | 104 | { |
irsanjul | 0:e9c48701a273 | 105 | Audio::PlayNote(note); |
irsanjul | 0:e9c48701a273 | 106 | } |
irsanjul | 0:e9c48701a273 | 107 | |
irsanjul | 0:e9c48701a273 | 108 | void MyAudio::mute() |
irsanjul | 0:e9c48701a273 | 109 | { |
irsanjul | 0:e9c48701a273 | 110 | Audio::mute(); |
irsanjul | 0:e9c48701a273 | 111 | } |