Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: kiokuryoku_game escapeFromYou junirobo_sample001 ROBOX_Sample_IRcon ... more
beep_sound.cpp@7:5f1b0adb25ec, 2016-10-08 (annotated)
- Committer:
- RBH
- Date:
- Sat Oct 08 17:05:44 2016 +0000
- Revision:
- 7:5f1b0adb25ec
- Parent:
- 6:adb925f93199
- Child:
- 8:26cb94806201
???????????????
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| RBH | 0:c9832831c73f | 1 | #include "beep_sound.h" |
| RBH | 0:c9832831c73f | 2 | #include "math.h" |
| RBH | 3:86238dba1529 | 3 | #include <queue> |
| RBH | 3:86238dba1529 | 4 | |
| RBH | 3:86238dba1529 | 5 | |
| RBH | 0:c9832831c73f | 6 | beep_sound::beep_sound(PinName pwm) |
| RBH | 0:c9832831c73f | 7 | { |
| RBH | 6:adb925f93199 | 8 | frequency = 0; |
| RBH | 6:adb925f93199 | 9 | playing = false; |
| RBH | 0:c9832831c73f | 10 | m_pwm = new PwmOut(pwm); |
| RBH | 0:c9832831c73f | 11 | m_pwm->write(0.0f); |
| RBH | 0:c9832831c73f | 12 | } |
| RBH | 0:c9832831c73f | 13 | |
| RBH | 0:c9832831c73f | 14 | beep_sound::~beep_sound() |
| RBH | 0:c9832831c73f | 15 | { |
| RBH | 0:c9832831c73f | 16 | delete m_pwm; |
| RBH | 0:c9832831c73f | 17 | } |
| RBH | 0:c9832831c73f | 18 | |
| RBH | 5:a64e653b0ce1 | 19 | void beep_sound::stop(){ |
| RBH | 3:86238dba1529 | 20 | m_pwm->write(0.0f); |
| RBH | 3:86238dba1529 | 21 | // キューが空でなければ次の音へ |
| RBH | 3:86238dba1529 | 22 | if(otoQue.empty() != 1){ |
| RBH | 6:adb925f93199 | 23 | playing = true; |
| RBH | 3:86238dba1529 | 24 | beep_sound::playGakuhu(); |
| RBH | 6:adb925f93199 | 25 | }else{ |
| RBH | 6:adb925f93199 | 26 | playing = false; |
| RBH | 3:86238dba1529 | 27 | } |
| RBH | 3:86238dba1529 | 28 | } |
| RBH | 3:86238dba1529 | 29 | |
| RBH | 3:86238dba1529 | 30 | // 音の再生 |
| RBH | 3:86238dba1529 | 31 | void beep_sound::NoteOn(int octave, int note) |
| RBH | 3:86238dba1529 | 32 | { |
| RBH | 6:adb925f93199 | 33 | playing = true; |
| RBH | 6:adb925f93199 | 34 | frequency = frequencyTable[note] << octave; |
| RBH | 6:adb925f93199 | 35 | m_pwm->period(1.0f/(float)frequency); |
| RBH | 6:adb925f93199 | 36 | m_pwm->write(0.5f); |
| RBH | 3:86238dba1529 | 37 | } |
| RBH | 3:86238dba1529 | 38 | |
| RBH | 3:86238dba1529 | 39 | // 1音ずつ音符情報をキューに追加 |
| RBH | 3:86238dba1529 | 40 | void beep_sound::setGakuhu(int argOc, int argNo, float argTi) |
| RBH | 3:86238dba1529 | 41 | { |
| RBH | 4:237b642c2ffa | 42 | bufG.octave = argOc; |
| RBH | 4:237b642c2ffa | 43 | bufG.note = argNo; |
| RBH | 4:237b642c2ffa | 44 | bufG.time_s = argTi; |
| RBH | 4:237b642c2ffa | 45 | otoQue.push(bufG); |
| RBH | 3:86238dba1529 | 46 | } |
| RBH | 3:86238dba1529 | 47 | |
| RBH | 3:86238dba1529 | 48 | // 休符をキューに追加 |
| RBH | 3:86238dba1529 | 49 | void beep_sound::setKyuhu(float argTi) |
| RBH | 3:86238dba1529 | 50 | { |
| RBH | 4:237b642c2ffa | 51 | bufG.octave = 1000; |
| RBH | 4:237b642c2ffa | 52 | bufG.note = 0; |
| RBH | 4:237b642c2ffa | 53 | bufG.time_s = argTi; |
| RBH | 4:237b642c2ffa | 54 | otoQue.push(bufG); |
| RBH | 3:86238dba1529 | 55 | } |
| RBH | 3:86238dba1529 | 56 | |
| RBH | 3:86238dba1529 | 57 | // 楽譜キューを再生、音停止の割り込み予約 |
| RBH | 3:86238dba1529 | 58 | // Timeoutの日本語リファレンスには書いていないが、 |
| RBH | 3:86238dba1529 | 59 | // thisを引数にしないとコンパイルエラーになるので注意 |
| RBH | 3:86238dba1529 | 60 | void beep_sound::playGakuhu() |
| RBH | 3:86238dba1529 | 61 | { |
| RBH | 7:5f1b0adb25ec | 62 | //if(playing == false){ |
| RBH | 7:5f1b0adb25ec | 63 | playing = true; |
| RBH | 7:5f1b0adb25ec | 64 | beep_sound::NoteOn(otoQue.front().octave, otoQue.front().note); |
| RBH | 7:5f1b0adb25ec | 65 | interruptStop.attach(this, &beep_sound::stop, otoQue.front().time_s); |
| RBH | 7:5f1b0adb25ec | 66 | otoQue.pop(); |
| RBH | 7:5f1b0adb25ec | 67 | //} |
| RBH | 3:86238dba1529 | 68 | } |
| RBH | 3:86238dba1529 | 69 | |
| RBH | 0:c9832831c73f | 70 | void beep_sound::SetFrequency(int octave, int note, bool on_off) |
| RBH | 0:c9832831c73f | 71 | { |
| RBH | 3:86238dba1529 | 72 | static int preFrequency = 0; |
| RBH | 3:86238dba1529 | 73 | if(on_off == true){ |
| RBH | 3:86238dba1529 | 74 | int frequency = frequencyTable[note] << octave; |
| RBH | 3:86238dba1529 | 75 | if(frequency != preFrequency){ |
| RBH | 3:86238dba1529 | 76 | m_pwm->period(1.0f/(float)frequency); |
| RBH | 3:86238dba1529 | 77 | m_pwm->write(0.5f); |
| RBH | 0:c9832831c73f | 78 | } |
| RBH | 3:86238dba1529 | 79 | preFrequency = frequency; |
| RBH | 3:86238dba1529 | 80 | }else{ |
| RBH | 3:86238dba1529 | 81 | m_pwm->write(0.0f); |
| RBH | 3:86238dba1529 | 82 | preFrequency = 0; |
| RBH | 3:86238dba1529 | 83 | } |
| RBH | 0:c9832831c73f | 84 | } |
| RBH | 0:c9832831c73f | 85 | void beep_sound::onpu(int octave, int note, float time_s) |
| RBH | 0:c9832831c73f | 86 | { |
| RBH | 7:5f1b0adb25ec | 87 | playing = true; |
| RBH | 0:c9832831c73f | 88 | beep_sound::SetFrequency(octave, note, true); |
| RBH | 6:adb925f93199 | 89 | interruptStop.attach(this, &beep_sound::stop, time_s); |
| RBH | 0:c9832831c73f | 90 | } |
| RBH | 0:c9832831c73f | 91 | void beep_sound::sinwave(float center,int speed,int width) |
| RBH | 0:c9832831c73f | 92 | { |
| RBH | 3:86238dba1529 | 93 | for(float i=0.0f;i<6.28f;i+=0.01*speed) |
| RBH | 0:c9832831c73f | 94 | { |
| RBH | 0:c9832831c73f | 95 | m_pwm->period(1.0f/(center+width*(float)sin(i))); |
| RBH | 0:c9832831c73f | 96 | m_pwm->write(0.5f); |
| RBH | 0:c9832831c73f | 97 | wait_ms(2); |
| RBH | 0:c9832831c73f | 98 | } |
| RBH | 0:c9832831c73f | 99 | } |
| RBH | 0:c9832831c73f | 100 | void beep_sound::setwave(float frequency,float duty,float wait) |
| RBH | 0:c9832831c73f | 101 | { |
| RBH | 0:c9832831c73f | 102 | m_pwm->period(1.0f/(frequency)); |
| RBH | 0:c9832831c73f | 103 | m_pwm->write(duty); |
| RBH | 0:c9832831c73f | 104 | wait_ms(wait); |
| RBH | 0:c9832831c73f | 105 | } |
| RBH | 0:c9832831c73f | 106 | //引数の回数だけ鳴らす |
| RBH | 0:c9832831c73f | 107 | void beep_sound::beep_right(int nTimes) |
| RBH | 0:c9832831c73f | 108 | { |
| RBH | 0:c9832831c73f | 109 | for(int i=0; i<nTimes; i++){ |
| RBH | 4:237b642c2ffa | 110 | beep_sound::setGakuhu(3,11,0.1); |
| RBH | 4:237b642c2ffa | 111 | beep_sound::setGakuhu(3,7,0.35); |
| RBH | 4:237b642c2ffa | 112 | beep_sound::setKyuhu(0.1); |
| RBH | 0:c9832831c73f | 113 | } |
| RBH | 6:adb925f93199 | 114 | if(playing == false)beep_sound::playGakuhu(); |
| RBH | 0:c9832831c73f | 115 | } |
| RBH | 0:c9832831c73f | 116 | void beep_sound::beep_wrong(int nTimes) |
| RBH | 0:c9832831c73f | 117 | { |
| RBH | 0:c9832831c73f | 118 | for (int i = 0; i < nTimes; i++) { |
| RBH | 4:237b642c2ffa | 119 | beep_sound::setGakuhu(0, 12, 0.1); |
| RBH | 4:237b642c2ffa | 120 | beep_sound::setKyuhu(0.1); |
| RBH | 4:237b642c2ffa | 121 | beep_sound::setGakuhu(0, 12, 0.35); |
| RBH | 4:237b642c2ffa | 122 | beep_sound::setKyuhu(0.1); |
| RBH | 0:c9832831c73f | 123 | } |
| RBH | 6:adb925f93199 | 124 | if(playing == false)beep_sound::playGakuhu(); |
| RBH | 0:c9832831c73f | 125 | } |
| RBH | 0:c9832831c73f | 126 | void beep_sound::beep_1up(int nTimes) |
| RBH | 0:c9832831c73f | 127 | { |
| RBH | 0:c9832831c73f | 128 | for (int i = 0; i < nTimes; i++) { |
| RBH | 6:adb925f93199 | 129 | beep_sound::setGakuhu(3,4,0.1); |
| RBH | 6:adb925f93199 | 130 | beep_sound::setGakuhu(3,7,0.1); |
| RBH | 6:adb925f93199 | 131 | beep_sound::setGakuhu(4,4,0.1); |
| RBH | 6:adb925f93199 | 132 | beep_sound::setGakuhu(4,0,0.1); |
| RBH | 6:adb925f93199 | 133 | beep_sound::setGakuhu(4,2,0.1); |
| RBH | 6:adb925f93199 | 134 | beep_sound::setGakuhu(4,7,0.1); |
| RBH | 0:c9832831c73f | 135 | } |
| RBH | 6:adb925f93199 | 136 | if(playing == false)beep_sound::playGakuhu(); |
| RBH | 0:c9832831c73f | 137 | } |
| RBH | 0:c9832831c73f | 138 | void beep_sound::beep_konbini(int nTimes) |
| RBH | 0:c9832831c73f | 139 | { |
| RBH | 0:c9832831c73f | 140 | for (int i = 0; i < nTimes; i++) { |
| RBH | 6:adb925f93199 | 141 | beep_sound::setGakuhu(2,6,0.2); |
| RBH | 6:adb925f93199 | 142 | beep_sound::setGakuhu(2,2,0.2); |
| RBH | 6:adb925f93199 | 143 | beep_sound::setGakuhu(1,9,0.2); |
| RBH | 6:adb925f93199 | 144 | beep_sound::setGakuhu(2,2,0.2); |
| RBH | 6:adb925f93199 | 145 | beep_sound::setGakuhu(2,4,0.2); |
| RBH | 6:adb925f93199 | 146 | beep_sound::setGakuhu(2,9,0.4); |
| RBH | 6:adb925f93199 | 147 | beep_sound::setGakuhu(1,9,0.2); |
| RBH | 6:adb925f93199 | 148 | beep_sound::setGakuhu(2,4,0.2); |
| RBH | 6:adb925f93199 | 149 | beep_sound::setGakuhu(2,6,0.2); |
| RBH | 6:adb925f93199 | 150 | beep_sound::setGakuhu(2,4,0.2); |
| RBH | 6:adb925f93199 | 151 | beep_sound::setGakuhu(1,9,0.2); |
| RBH | 6:adb925f93199 | 152 | beep_sound::setGakuhu(2,2,0.6); |
| RBH | 0:c9832831c73f | 153 | } |
| RBH | 6:adb925f93199 | 154 | if(playing == false)beep_sound::playGakuhu(); |
| RBH | 0:c9832831c73f | 155 | } |
| RBH | 2:259899b723ab | 156 | void beep_sound::beep_readyGo(int nTimes) |
| RBH | 2:259899b723ab | 157 | { |
| RBH | 2:259899b723ab | 158 | for (int i = 0; i < nTimes; i++) { |
| RBH | 2:259899b723ab | 159 | beep_sound::onpu(1,0,0.5); |
| RBH | 2:259899b723ab | 160 | wait(0.5); |
| RBH | 2:259899b723ab | 161 | beep_sound::onpu(1,0,0.5); |
| RBH | 2:259899b723ab | 162 | wait(0.5); |
| RBH | 2:259899b723ab | 163 | beep_sound::onpu(1,0,0.5); |
| RBH | 2:259899b723ab | 164 | wait(0.5); |
| RBH | 2:259899b723ab | 165 | beep_sound::onpu(2,0,1); |
| RBH | 2:259899b723ab | 166 | } |
| RBH | 2:259899b723ab | 167 | } |
| RBH | 0:c9832831c73f | 168 | void beep_sound::beep_encount(int nTimes) |
| RBH | 0:c9832831c73f | 169 | { |
| RBH | 0:c9832831c73f | 170 | for (int i = 0; i < nTimes; i++) { |
| RBH | 0:c9832831c73f | 171 | beep_sound::onpu(4,0,0.08); |
| RBH | 0:c9832831c73f | 172 | beep_sound::onpu(3,11,0.08); |
| RBH | 0:c9832831c73f | 173 | beep_sound::onpu(3,10,0.08); |
| RBH | 0:c9832831c73f | 174 | beep_sound::onpu(3,9,0.08); |
| RBH | 0:c9832831c73f | 175 | |
| RBH | 0:c9832831c73f | 176 | beep_sound::onpu(3,10,0.08); |
| RBH | 0:c9832831c73f | 177 | beep_sound::onpu(3,9,0.08); |
| RBH | 0:c9832831c73f | 178 | beep_sound::onpu(3,8,0.08); |
| RBH | 0:c9832831c73f | 179 | beep_sound::onpu(3,7,0.08); |
| RBH | 0:c9832831c73f | 180 | |
| RBH | 0:c9832831c73f | 181 | beep_sound::onpu(3,8,0.08); |
| RBH | 0:c9832831c73f | 182 | beep_sound::onpu(3,7,0.08); |
| RBH | 0:c9832831c73f | 183 | beep_sound::onpu(3,6,0.08); |
| RBH | 0:c9832831c73f | 184 | beep_sound::onpu(3,5,0.08); |
| RBH | 0:c9832831c73f | 185 | |
| RBH | 0:c9832831c73f | 186 | beep_sound::onpu(3,6,0.08); |
| RBH | 0:c9832831c73f | 187 | beep_sound::onpu(3,5,0.08); |
| RBH | 0:c9832831c73f | 188 | beep_sound::onpu(3,4,0.08); |
| RBH | 0:c9832831c73f | 189 | beep_sound::onpu(3,3,0.08); |
| RBH | 0:c9832831c73f | 190 | |
| RBH | 0:c9832831c73f | 191 | beep_sound::onpu(3,4,0.08); |
| RBH | 0:c9832831c73f | 192 | beep_sound::onpu(3,3,0.08); |
| RBH | 0:c9832831c73f | 193 | beep_sound::onpu(3,2,0.08); |
| RBH | 0:c9832831c73f | 194 | beep_sound::onpu(3,1,0.08); |
| RBH | 0:c9832831c73f | 195 | |
| RBH | 0:c9832831c73f | 196 | beep_sound::onpu(3,2,0.08); |
| RBH | 0:c9832831c73f | 197 | beep_sound::onpu(3,1,0.08); |
| RBH | 0:c9832831c73f | 198 | beep_sound::onpu(3,0,0.08); |
| RBH | 0:c9832831c73f | 199 | beep_sound::onpu(2,11,0.08); |
| RBH | 0:c9832831c73f | 200 | |
| RBH | 0:c9832831c73f | 201 | beep_sound::onpu(3,0,0.08); |
| RBH | 0:c9832831c73f | 202 | beep_sound::onpu(2,11,0.08); |
| RBH | 0:c9832831c73f | 203 | beep_sound::onpu(2,10,0.08); |
| RBH | 0:c9832831c73f | 204 | beep_sound::onpu(2,9,0.08); |
| RBH | 0:c9832831c73f | 205 | |
| RBH | 0:c9832831c73f | 206 | beep_sound::onpu(2,10,0.08); |
| RBH | 0:c9832831c73f | 207 | beep_sound::onpu(2,9,0.08); |
| RBH | 0:c9832831c73f | 208 | beep_sound::onpu(2,8,0.08); |
| RBH | 0:c9832831c73f | 209 | beep_sound::onpu(2,7,0.08); |
| RBH | 0:c9832831c73f | 210 | } |
| RBH | 0:c9832831c73f | 211 | wait(0.1); |
| RBH | 0:c9832831c73f | 212 | } |
| RBH | 7:5f1b0adb25ec | 213 | void beep_sound::beep_notif1(int nTimes){ |
| RBH | 7:5f1b0adb25ec | 214 | for (int i = 0; i < nTimes; i++) { |
| RBH | 7:5f1b0adb25ec | 215 | beep_sound::setGakuhu(3,5,0.1); |
| RBH | 7:5f1b0adb25ec | 216 | beep_sound::setGakuhu(3,10,0.1); |
| RBH | 7:5f1b0adb25ec | 217 | beep_sound::setGakuhu(4,2,0.1); |
| RBH | 7:5f1b0adb25ec | 218 | } |
| RBH | 7:5f1b0adb25ec | 219 | if(playing == false)beep_sound::playGakuhu(); |
| RBH | 7:5f1b0adb25ec | 220 | } |
| RBH | 7:5f1b0adb25ec | 221 | void beep_sound::beep_notif2(int nTimes){ |
| RBH | 7:5f1b0adb25ec | 222 | for (int i = 0; i < nTimes; i++) { |
| RBH | 7:5f1b0adb25ec | 223 | beep_sound::setGakuhu(1,2,0.1); |
| RBH | 7:5f1b0adb25ec | 224 | beep_sound::setGakuhu(1,9,0.1); |
| RBH | 7:5f1b0adb25ec | 225 | beep_sound::setGakuhu(2,2,0.2); |
| RBH | 7:5f1b0adb25ec | 226 | } |
| RBH | 7:5f1b0adb25ec | 227 | if(playing == false)beep_sound::playGakuhu(); |
| RBH | 7:5f1b0adb25ec | 228 | } |
| RBH | 7:5f1b0adb25ec | 229 | void beep_sound::beep_potatoKansei(int nTimes){ |
| RBH | 7:5f1b0adb25ec | 230 | for (int i = 0; i < nTimes; i++) { |
| RBH | 7:5f1b0adb25ec | 231 | beep_sound::setGakuhu(1,7,0.25); |
| RBH | 7:5f1b0adb25ec | 232 | beep_sound::setGakuhu(1,5,0.25); |
| RBH | 7:5f1b0adb25ec | 233 | beep_sound::setGakuhu(1,7,0.25); |
| RBH | 7:5f1b0adb25ec | 234 | beep_sound::setKyuhu(0.25); |
| RBH | 7:5f1b0adb25ec | 235 | } |
| RBH | 7:5f1b0adb25ec | 236 | if(playing == false)beep_sound::playGakuhu(); |
| RBH | 7:5f1b0adb25ec | 237 | } |