Leong Kum Loong (NYP) / tone_h

Dependents:   Tone_Example

tone.cpp

Committer:
reesey
Date:
2017-11-19
Revision:
1:3b00679c208a
Parent:
0:2b4c66b3f6aa
Child:
2:7f2974b69b48

File content as of revision 1:3b00679c208a:

#include "mbed.h"
#include "tone.h"
/*
    tone.h
    Written by Leong Kum Loong.
    19 Nov 2017, REV. 1
    
    All routines and functions in this library are written by me solely with the purpose
    of implementing an identical "tone" library that was introduced by Arduino IDE.
    
    Example reference from Github
    ===============================
    The mario_example routine "notes" are reference to the work of Gregory Kielian.
    The starwars_example routine "notes" are reference to the work of nicksort.
*/

PwmOut speaker(p26);

//Note for starwars_example.
int c = 261, d = 294, e = 329, f = 349, g = 391, gS = 415, a = 440, aS = 455, b = 466, cH = 523;
int cSH = 554, dH = 587, dSH = 622, eH = 659, fH = 698, fSH = 740, gH = 784, gSH = 830, aH = 880;

void tone(int frequency, int duration_ms){
    float period = (float)1/(float)frequency;
    speaker.period(period);
    speaker.pulsewidth(period/(float)(2));
    wait_ms(duration_ms);   //If tone sounds weird, try modify delay here.
    speaker = 0;
}

static void delay(int millis){
    wait_ms(millis * 0.7);  //If play speed sounds weird, try modify delay here.
}

void mario_example(){
    tone(660,100);         
    delay(150);
    tone(660,100);
    delay(300);
    tone(660,100);
    delay(300);
    tone(510,100);
    delay(100);
    tone(660,100);
    delay(300);
    tone(770,100);
    delay(550);
    tone(380,100);
    delay(575);

    tone(510,100);
    delay(450);
    tone(380,100);
    delay(400);
    tone(320,100);
    delay(500);
    tone(440,100);
    delay(300);
    tone(480,80);
    delay(330);
    tone(450,100);
    delay(150);
    tone(430,100);
    delay(300);
    tone(380,100);
    delay(200);
    tone(660,80);
    delay(200);
    tone(760,50);
    delay(150);
    tone(860,100);
    delay(300);
    tone(700,80);
    delay(150);
    tone(760,50);
    delay(350);
    tone(660,80);
    delay(300);
    tone(520,80);
    delay(150);
    tone(580,80);
    delay(150);
    tone(480,80);
    delay(500);

    tone(510,100);
    delay(450);
    tone(380,100);
    delay(400);
    tone(320,100);
    delay(500);
    tone(440,100);
    delay(300);
    tone(480,80);
    delay(330);
    tone(450,100);
    delay(150);
    tone(430,100);
    delay(300);
    tone(380,100);
    delay(200);
    tone(660,80);
    delay(200);
    tone(760,50);
    delay(150);
    tone(860,100);
    delay(300);
    tone(700,80);
    delay(150);
    tone(760,50);
    delay(350);
    tone(660,80);
    delay(300);
    tone(520,80);
    delay(150);
    tone(580,80);
    delay(150);
    tone(480,80);
    delay(500);

    tone(500,100);
    delay(300);

    tone(760,100);
    delay(100);
    tone(720,100);
    delay(150);
    tone(680,100);
    delay(150);
    tone(620,150);
    delay(300);

    tone(650,150);
    delay(300);
    tone(380,100);
    delay(150);
    tone(430,100);
    delay(150);

    tone(500,100);
    delay(300);
    tone(430,100);
    delay(150);
    tone(500,100);
    delay(100);
    tone(570,100);
    delay(220);

    tone(500,100);
    delay(300);

    tone(760,100);
    delay(100);
    tone(720,100);
    delay(150);
    tone(680,100);
    delay(150);
    tone(620,150);
    delay(300);

    tone(650,200);
    delay(300);

    tone(1020,80);
    delay(300);
    tone(1020,80);
    delay(150);
    tone(1020,80);
    delay(300);

    tone(380,100);
    delay(300);
    tone(500,100);
    delay(300);

    tone(760,100);
    delay(100);
    tone(720,100);
    delay(150);
    tone(680,100);
    delay(150);
    tone(620,150);
    delay(300);

    tone(650,150);
    delay(300);
    tone(380,100);
    delay(150);
    tone(430,100);
    delay(150);

    tone(500,100);
    delay(300);
    tone(430,100);
    delay(150);
    tone(500,100);
    delay(100);
    tone(570,100);
    delay(420);

    tone(585,100);
    delay(450);

    tone(550,100);
    delay(420);

    tone(500,100);
    delay(360);

    tone(380,100);
    delay(300);
    tone(500,100);
    delay(300);
    tone(500,100);
    delay(150);
    tone(500,100);
    delay(300);

    tone(500,100);
    delay(300);

    tone(760,100);
    delay(100);
    tone(720,100);
    delay(150);
    tone(680,100);
    delay(150);
    tone(620,150);
    delay(300);

    tone(650,150);
    delay(300);
    tone(380,100);
    delay(150);
    tone(430,100);
    delay(150);

    tone(500,100);
    delay(300);
    tone(430,100);
    delay(150);
    tone(500,100);
    delay(100);
    tone(570,100);
    delay(220);

    tone(500,100);
    delay(300);

    tone(760,100);
    delay(100);
    tone(720,100);
    delay(150);
    tone(680,100);
    delay(150);
    tone(620,150);
    delay(300);

    tone(650,200);
    delay(300);

    tone(1020,80);
    delay(300);
    tone(1020,80);
    delay(150);
    tone(1020,80);
    delay(300);

    tone(380,100);
    delay(300);
    tone(500,100);
    delay(300);

    tone(760,100);
    delay(100);
    tone(720,100);
    delay(150);
    tone(680,100);
    delay(150);
    tone(620,150);
    delay(300);

    tone(650,150);
    delay(300);
    tone(380,100);
    delay(150);
    tone(430,100);
    delay(150);

    tone(500,100);
    delay(300);
    tone(430,100);
    delay(150);
    tone(500,100);
    delay(100);
    tone(570,100);
    delay(420);

    tone(585,100);
    delay(450);

    tone(550,100);
    delay(420);

    tone(500,100);
    delay(360);

    tone(380,100);
    delay(300);
    tone(500,100);
    delay(300);
    tone(500,100);
    delay(150);
    tone(500,100);
    delay(300);

    tone(500,60);
    delay(150);
    tone(500,80);
    delay(300);
    tone(500,60);
    delay(350);
    tone(500,80);
    delay(150);
    tone(580,80);
    delay(350);
    tone(660,80);
    delay(150);
    tone(500,80);
    delay(300);
    tone(430,80);
    delay(150);
    tone(380,80);
    delay(600);

    tone(500,60);
    delay(150);
    tone(500,80);
    delay(300);
    tone(500,60);
    delay(350);
    tone(500,80);
    delay(150);
    tone(580,80);
    delay(150);
    tone(660,80);
    delay(550);

    tone(870,80);
    delay(325);
    tone(760,80);
    delay(600);

    tone(500,60);
    delay(150);
    tone(500,80);
    delay(300);
    tone(500,60);
    delay(350);
    tone(500,80);
    delay(150);
    tone(580,80);
    delay(350);
    tone(660,80);
    delay(150);
    tone(500,80);
    delay(300);
    tone(430,80);
    delay(150);
    tone(380,80);
    delay(600);

    tone(660,100);
    delay(150);
    tone(660,100);
    delay(300);
    tone(660,100);
    delay(300);
    tone(510,100);
    delay(100);
    tone(660,100);
    delay(300);
    tone(770,100);
    delay(550);
    tone(380,100);
    delay(575);
}
 
  
//Star wars theme section.
void firstSection(){
    tone(a, 500);
    tone(a, 500);    
    tone(a, 500);
    tone(f, 350);
    tone(cH, 150);  
    tone(a, 500);
    tone(f, 350);
    tone(cH, 150);
    tone(a, 650);
    wait_ms(500);
 
    tone(eH, 500);
    tone(eH, 500);
    tone(eH, 500);  
    tone(fH, 350);
    tone(cH, 150);
    tone(gS, 500);
    tone(f, 350);
    tone(cH, 150);
    tone(a, 650);
    wait_ms(500);
}
 
void secondSection(){
    tone(aH, 500);
    tone(a, 300);
    tone(a, 150);
    tone(aH, 500);
    tone(gSH, 325);
    tone(gH, 175);
    tone(fSH, 125);
    tone(fH, 125);
    tone(fSH, 250);
    wait_ms(325);
 
    tone(aS, 250);
    tone(dSH, 500);
    tone(dH, 325);  
    tone(cSH, 175);  
    tone(cH, 125);  
    tone(b, 125);  
    tone(cH, 250);  
    wait_ms(350);
}

void starwars_example(){
    firstSection();
    
    secondSection();
 
    //Variant 1
    tone(f, 250);  
    tone(gS, 500);  
    tone(f, 350);  
    tone(a, 125);
    tone(cH, 500);
    tone(a, 375);  
    tone(cH, 125);
    tone(eH, 650);
    wait_ms(500);
 
    secondSection();
 
    //Variant 2
    tone(f, 250);  
    tone(gS, 500);  
    tone(f, 375);  
    tone(cH, 125);
    tone(a, 500);  
    tone(f, 375);  
    tone(cH, 125);
    tone(a, 650);
    wait_ms(650);
}