mbed/ARM 活用事例 第3章 SDカードを使ってファイルを操作するプログラムを作る
Dependencies: TextLCD mbed SDFileSystem
MySound.cpp
- Committer:
- sunifu
- Date:
- 2011-10-04
- Revision:
- 0:c743b6678d88
File content as of revision 0:c743b6678d88:
// --- MySound.cpp --- #include "MySound.h" MySound::MySound(PinName out) : _out(out){ } void MySound::play(char pn,int s, char l) { double freq,f; float length ; int scale ; int begin; switch(l){ case 'W': length = 4 ; break ; case 't': length = 3; break ; case 'D': length = 2 ; break; case 'Q': length = 1; break; case 'q': length = 1.5; break; case 'E': length = 0.5; break; case 'S': length = 0.25; break; case 'T': length = 0.125; break; default: length = 1; } switch(pn){ case 'a': freq = 415.30469 ; break; case 'A': freq = 440.0; break ; case 'b': freq = 466.16876; break; case 'B': freq = 493.88330; break ; case 'C': freq = 261.62556; break ; case 'd': freq = 277.18263; break ; case 'D': freq = 293.66476; break; case 'e': freq = 311.12698; break ; case 'E': freq = 329.62755; break ; case 'F': freq = 349.22823; break; case 'g': freq = 369.99442; break ; case 'G': freq = 391.99543; break ; case 'R': freq = 0.0; break ; default: freq = 440; } switch ( s ){ case 6: f = freq * 4 ; break; case 5: f = freq * 2 ; break; case 4: f = freq; break; case 3: f = freq / 2 ; break; case 2: f = freq / 4; break; default: f = freq ; break ; } scale = (int)((1.0/f)*1e6) ; _out.period_us(scale); t.start(); begin = t.read_ms() ; if ( pn != 'R' ){ while(t.read_ms()-begin < (int)(500 * length) ){ _out.write(0.5f); } }else{ while(t.read_ms()-begin < (int)(500 * length) ){ _out.write(0.0f); } } t.stop(); t.reset(); }