Dependencies:   SoundWaveGenerator mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "snd_wave_generator/SoundWaveGenerator.h"
00003 #include "snd_wave_generator/TriangleWave.h"
00004 #include "snd_wave_generator/SineWave.h"
00005 #include "snd_wave_generator/WaveCombo.h"
00006 #include <math.h>
00007 
00008 using namespace snd_wave_generator;
00009 Serial pc(USBTX, USBRX); // tx, rx
00010 BusOut leds(LED1, LED2, LED4);
00011 SoundWaveGenerator g(16000);
00012 
00013 // code to code number
00014 int code2int(char c){
00015   int ret = -1;
00016   switch(c){
00017   case 'C': ret = 0; break;
00018   case 'c': ret = 1; break; // C#/Db
00019   case 'D': ret = 2; break;
00020   case 'd': ret = 3; break; // D#/Eb
00021   case 'E': ret = 4; break;
00022   case 'F': ret = 5; break;
00023   case 'f': ret = 6; break; // F#/Gb
00024   case 'G': ret = 7; break;
00025   case 'g': ret = 8; break; // G#/Ab
00026   case 'A': ret = 9; break;
00027   case 'a': ret = 10; break; // A#/Bb
00028   case 'B': ret = 11; break;
00029   default:
00030     ret = -1;
00031   }
00032   //printf("case%d\r\n",ret);
00033   return ret;
00034 }
00035 
00036 // (C, C#, D, D#, E, F, F#, G, G#, A, A#, B)
00037 float w(int ov,char code) {
00038   int note_no = code2int(code) + (ov + 2) * 12;
00039   return 440 * pow(2.0 , (note_no - 69) / 12.0 );
00040 }
00041 
00042 SineWave C3(w(3,'C'));SineWave C4(w(4,'C'));SineWave C5(w(5,'C'));
00043 SineWave c3(w(3,'c'));SineWave c4(w(4,'c'));SineWave c5(w(5,'c'));
00044 SineWave D3(w(3,'D'));SineWave D4(w(4,'D'));SineWave D5(w(5,'D'));
00045 SineWave d3(w(3,'d'));SineWave d4(w(4,'d'));SineWave d5(w(5,'d'));
00046 SineWave E3(w(3,'E'));SineWave E4(w(4,'E'));SineWave E5(w(5,'E'));
00047 SineWave F3(w(3,'F'));SineWave F4(w(4,'F'));SineWave F5(w(5,'F'));
00048 SineWave f3(w(3,'f'));SineWave f4(w(4,'f'));SineWave f5(w(5,'f'));
00049 SineWave G3(w(3,'G'));SineWave G4(w(4,'G'));SineWave G5(w(5,'G'));
00050 SineWave g3(w(3,'g'));SineWave g4(w(4,'g'));SineWave g5(w(5,'g'));
00051 SineWave A3(w(3,'A'));SineWave A4(w(4,'A'));SineWave A5(w(5,'A'));
00052 SineWave a3(w(3,'a'));SineWave a4(w(4,'a'));SineWave a5(w(5,'a'));
00053 SineWave B3(w(3,'B'));SineWave B4(w(4,'B'));SineWave B5(w(5,'B'));
00054 //3cdefgab 4cdefgab 5cdefgab
00055 
00056 // play with length
00057 void p(SineWave *s,float length){
00058   g.play(s);wait(length);
00059 }
00060 // stop length
00061 void s(float stop){
00062   g.stop();wait(stop);
00063 }
00064 
00065 // defines of sound sequenses
00066 void coin(void){
00067   p(&B4,0.05);
00068   p(&E5,0.35);
00069   s(0.2);
00070 }
00071 
00072 void mainTheme(void){
00073   p(&C3,0.3);
00074   s(0.2);
00075 }
00076 
00077 
00078 // main routin
00079 int main() {
00080   // while(1) {
00081   coin();coin();coin();coin();coin();coin();coin();coin();coin();
00082   exit(0);
00083   //}
00084 }