![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
an mbed tile music game using a capacitive touchpad and uLCD
Dependencies: SDFileSystem mbed wave_player
SongPlayer.h
- Committer:
- clu67
- Date:
- 2016-03-14
- Revision:
- 0:a1c374b9a4fe
File content as of revision 0:a1c374b9a4fe:
#include "mbed.h" // new class to play a note on Speaker based on PwmOut class class SongPlayer { public: SongPlayer(PinName pin) : _pin(pin) { // _pin(pin) means pass pin to the constructor } // class method to play a note based on PwmOut class void PlaySong(float frequency[], float duration[], float volume=1.0) { vol = volume; notecount = 0; _pin.period(1.0/frequency[notecount]); _pin = volume/2.0; noteduration.attach(this,&SongPlayer::nextnote, duration[notecount]); // setup timer to interrupt for next note to play frequencyptr = frequency; durationptr = duration; //returns after first note starts to play } void PlaySong1(float *frequency, float *duration, float volume=1.0) { vol = volume; notecount = 0; _pin.period(1.0/(*frequency)); _pin = volume/2.0; noteduration.attach(this,&SongPlayer::nextnote, *duration); // setup timer to interrupt for next note to play frequencyptr = frequency; durationptr = duration; //returns after first note starts to play } void nextnote(); private: Timeout noteduration; PwmOut _pin; int notecount; float vol; float * frequencyptr; float * durationptr; }; //Interrupt Routine to play next note void SongPlayer::nextnote() { _pin = 0.0; notecount++; //setup next note in song if (durationptr[notecount]!=0.0) { _pin.period(1.0/frequencyptr[notecount]); noteduration.attach(this,&SongPlayer::nextnote, durationptr[notecount]); _pin = vol/2.0; } else _pin = 0.0; //turn off on last note }