エレキジャック Web版 mbedで初めてのマイコン開発 メモリカードを使ったデータの読み書き<2/3> 音符データをSDから読み込んで音楽を鳴らすプログラムです。 音楽データはエレキジャックのサイトに置いてあります。 music.txt http://www.eleki-jack.com/arm/2010/12/mbed-6.html
Dependencies: TextLCD mbed SDFileSystem
MySound.cpp
00001 #include "MySound.h" 00002 00003 MySound::MySound(PinName out) : _out(out){ 00004 _out = 0; 00005 } 00006 00007 void MySound::play(char pn,int s, char l) 00008 { 00009 double freq,f; 00010 double scale ; 00011 float length ; 00012 00013 switch(l){ 00014 case 'W': 00015 length = 4 ; 00016 break ; 00017 case 't': 00018 length = 3; 00019 break ; 00020 case 'D': 00021 length = 2 ; 00022 break; 00023 case 'Q': 00024 length = 1; 00025 break; 00026 case 'q': 00027 length = 1.5; 00028 break; 00029 case 'E': 00030 length = 0.5; 00031 break; 00032 case 'S': 00033 length = 0.25; 00034 break; 00035 case 'T': 00036 length = 0.125; 00037 break; 00038 default: 00039 length = 1; 00040 } 00041 00042 switch(pn){ 00043 case 'a': 00044 freq = 415.30469 ; 00045 break; 00046 case 'A': 00047 freq = 440.0; 00048 break ; 00049 case 'b': 00050 freq = 466.16876; 00051 break; 00052 case 'B': 00053 freq = 493.88330; 00054 break ; 00055 case 'C': 00056 freq = 261.62556; 00057 break ; 00058 case 'd': 00059 freq = 277.18263; 00060 break ; 00061 case 'D': 00062 freq = 293.66476; 00063 break; 00064 case 'e': 00065 freq = 311.12698; 00066 break ; 00067 case 'E': 00068 freq = 329.62755; 00069 break ; 00070 case 'F': 00071 freq = 349.22823; 00072 break; 00073 case 'g': 00074 freq = 369.99442; 00075 break ; 00076 case 'G': 00077 freq = 391.99543; 00078 break ; 00079 case 'R': 00080 freq = 0.0; 00081 break ; 00082 default: 00083 freq = 440; 00084 } 00085 00086 switch ( s ){ 00087 case 6: 00088 f = freq * 4.0 ; 00089 break; 00090 case 5: 00091 f = freq * 2.0 ; 00092 break; 00093 case 4: 00094 f = freq; 00095 break; 00096 case 3: 00097 f = freq / 2.0 ; 00098 break; 00099 case 2: 00100 f = freq / 4.0; 00101 break; 00102 default: 00103 f = freq ; 00104 break ; 00105 } 00106 00107 scale = 1.0/(2.0*f); 00108 00109 // printf("scale=%lf\tf=%f\tfreq=%f\tlength=%lf\n",scale,f,freq,length); 00110 // printf("f*length=%lf\tfreq=%lf\t%lf \n",f*length,freq,scale); 00111 00112 for(int i = 0 ; i <= (int)( f * length ) ; i++ ){ 00113 _out = 1; 00114 wait(scale) ; 00115 _out = 0 ; 00116 wait(scale) ; 00117 } 00118 }
Generated on Sun Jul 17 2022 01:00:59 by 1.7.2