音だし(DAC出力) 和音

Dependencies:   mbed

Committer:
yueee_yt
Date:
Mon Dec 26 13:13:15 2011 +0000
Revision:
0:2309ea52d6c9

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yueee_yt 0:2309ea52d6c9 1 #define mC 261.626
yueee_yt 0:2309ea52d6c9 2 #define mD 293.665
yueee_yt 0:2309ea52d6c9 3 #define mE 329.628
yueee_yt 0:2309ea52d6c9 4 #define mF 349.228
yueee_yt 0:2309ea52d6c9 5 #define mG 391.995
yueee_yt 0:2309ea52d6c9 6 #define mA 440.000
yueee_yt 0:2309ea52d6c9 7 #define mB 493.883
yueee_yt 0:2309ea52d6c9 8
yueee_yt 0:2309ea52d6c9 9 #include "mbed.h"
yueee_yt 0:2309ea52d6c9 10
yueee_yt 0:2309ea52d6c9 11 Ticker timer;
yueee_yt 0:2309ea52d6c9 12 AnalogOut sp1(p18);
yueee_yt 0:2309ea52d6c9 13 float ms[180];
yueee_yt 0:2309ea52d6c9 14 float m1,m2,m3;
yueee_yt 0:2309ea52d6c9 15
yueee_yt 0:2309ea52d6c9 16 void sound_out(void) {
yueee_yt 0:2309ea52d6c9 17 static float j1=0;
yueee_yt 0:2309ea52d6c9 18 static float j2=0;
yueee_yt 0:2309ea52d6c9 19 static float j3=0;
yueee_yt 0:2309ea52d6c9 20 j1=j1+m1;
yueee_yt 0:2309ea52d6c9 21 j2=j2+m2;
yueee_yt 0:2309ea52d6c9 22 j3=j3+m3;
yueee_yt 0:2309ea52d6c9 23 if (j1>180)j1=j1-180;
yueee_yt 0:2309ea52d6c9 24 if (j2>180)j2=j2-180;
yueee_yt 0:2309ea52d6c9 25 if (j3>180)j3=j3-180;
yueee_yt 0:2309ea52d6c9 26 sp1.write((ms[(int)j1]+ms[(int)j2]+ms[(int)j3])/3.0);
yueee_yt 0:2309ea52d6c9 27 }
yueee_yt 0:2309ea52d6c9 28
yueee_yt 0:2309ea52d6c9 29 int main() {
yueee_yt 0:2309ea52d6c9 30 int i;
yueee_yt 0:2309ea52d6c9 31 //setting sincurv
yueee_yt 0:2309ea52d6c9 32 for (i=0;i<180;i++) {
yueee_yt 0:2309ea52d6c9 33 ms[i]=sin(2*3.1415*(float)i/180.0)/2.0+0.5;
yueee_yt 0:2309ea52d6c9 34 }
yueee_yt 0:2309ea52d6c9 35 timer.attach_us(&sound_out,10); //10kHz
yueee_yt 0:2309ea52d6c9 36 //ceg
yueee_yt 0:2309ea52d6c9 37 m1=mC*2*180/100000;
yueee_yt 0:2309ea52d6c9 38 m2=mE*2*180/100000;
yueee_yt 0:2309ea52d6c9 39 m3=mG*2*180/100000;
yueee_yt 0:2309ea52d6c9 40 wait(1.0f);
yueee_yt 0:2309ea52d6c9 41 //cfa
yueee_yt 0:2309ea52d6c9 42 m1=mC*2*180/100000;
yueee_yt 0:2309ea52d6c9 43 m2=mF*2*180/100000;
yueee_yt 0:2309ea52d6c9 44 m3=mA*2*180/100000;
yueee_yt 0:2309ea52d6c9 45 wait(1.0f);
yueee_yt 0:2309ea52d6c9 46 //ceg
yueee_yt 0:2309ea52d6c9 47 m1=mC*2*180/100000;
yueee_yt 0:2309ea52d6c9 48 m2=mE*2*180/100000;
yueee_yt 0:2309ea52d6c9 49 m3=mG*2*180/100000;
yueee_yt 0:2309ea52d6c9 50 wait(1.0f);
yueee_yt 0:2309ea52d6c9 51 //bdg
yueee_yt 0:2309ea52d6c9 52 m1=mB*180/100000;
yueee_yt 0:2309ea52d6c9 53 m2=mD*2*180/100000;
yueee_yt 0:2309ea52d6c9 54 m3=mG*2*180/100000;
yueee_yt 0:2309ea52d6c9 55 wait(1.0f);
yueee_yt 0:2309ea52d6c9 56 //ceg
yueee_yt 0:2309ea52d6c9 57 m1=mC*2*180/100000;
yueee_yt 0:2309ea52d6c9 58 m2=mE*2*180/100000;
yueee_yt 0:2309ea52d6c9 59 m3=mG*2*180/100000;
yueee_yt 0:2309ea52d6c9 60 wait(1.0f);
yueee_yt 0:2309ea52d6c9 61 timer.detach();
yueee_yt 0:2309ea52d6c9 62 sp1.write(0.0f);
yueee_yt 0:2309ea52d6c9 63 while (1);
yueee_yt 0:2309ea52d6c9 64 }