Music Engine plays Music Macro Language compositions in the background

Dependents:   RETRO_BallsAndPaddle RETRO_BallAndHoles MusicBoxForFathersDay USBSec_mbed-os_dev

Music Engine is a simply library to execute Music Macro Language sequences asynchronously. Learn more about MML on wikipedia http://en.wikipedia.org/wiki/Music_Macro_Language

The following sample plays a simple tune

#include "mbed.h"
#include "MusicEngine.h"

// Play music on MCU Pin 0.18
// The pin should support PWM
MusicEngine music(P0_18);

main()
{
    music.play("T224L8O5CL16>C<P16GP16L8EL16P16>C<GP16L8E.L16P16L8C#L16>C#<P16G#P16L8FL16P16>C#<G#P16L8F.L16P16L8CL16>C<P16GP16L8EL16P16>C<GP16L8E.L16P16D#EFP16FF#GP16GG#AP16L8>C<P8L4>C");
    
    while(1)
    {
    }
}
Committer:
taylorza
Date:
Thu Feb 05 04:18:39 2015 +0000
Revision:
0:d873d5d62d3b
Child:
1:7eb27d971c01
Music Engine Library initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 0:d873d5d62d3b 1 ///////////////////////////////////////////////////////////////////////////////
taylorza 0:d873d5d62d3b 2 // Retro Music Engine
taylorza 0:d873d5d62d3b 3 // Author: Chris Taylor (taylorza)
taylorza 0:d873d5d62d3b 4
taylorza 0:d873d5d62d3b 5 #include "mbed.h"
taylorza 0:d873d5d62d3b 6
taylorza 0:d873d5d62d3b 7 #ifndef __MUSICENGINE_H__
taylorza 0:d873d5d62d3b 8 #define __MUSICENGINE_H__
taylorza 0:d873d5d62d3b 9 class MusicEngine
taylorza 0:d873d5d62d3b 10 {
taylorza 0:d873d5d62d3b 11 public:
taylorza 0:d873d5d62d3b 12 MusicEngine(PinName pin);
taylorza 0:d873d5d62d3b 13
taylorza 0:d873d5d62d3b 14 void play(char *mml);
taylorza 0:d873d5d62d3b 15 void stop();
taylorza 0:d873d5d62d3b 16
taylorza 0:d873d5d62d3b 17 bool getIsPlaying() { return _isPlaying; }
taylorza 0:d873d5d62d3b 18
taylorza 0:d873d5d62d3b 19 void setCompletionCallback(void (*function)(void))
taylorza 0:d873d5d62d3b 20 {
taylorza 0:d873d5d62d3b 21 _completionCallback.attach(function);
taylorza 0:d873d5d62d3b 22 }
taylorza 0:d873d5d62d3b 23
taylorza 0:d873d5d62d3b 24 template<typename T>
taylorza 0:d873d5d62d3b 25 void setCompletionCallback(T *object, void (T::*member)(void))
taylorza 0:d873d5d62d3b 26 {
taylorza 0:d873d5d62d3b 27 _completionCallback.attach(object, member);
taylorza 0:d873d5d62d3b 28 }
taylorza 0:d873d5d62d3b 29
taylorza 0:d873d5d62d3b 30 private:
taylorza 0:d873d5d62d3b 31 void executeCommand();
taylorza 0:d873d5d62d3b 32 void skipWhiteSpace();
taylorza 0:d873d5d62d3b 33 char getChar();
taylorza 0:d873d5d62d3b 34 char peekChar();
taylorza 0:d873d5d62d3b 35 void rewind();
taylorza 0:d873d5d62d3b 36 int getNumber(int min, int max);
taylorza 0:d873d5d62d3b 37
taylorza 0:d873d5d62d3b 38 private:
taylorza 0:d873d5d62d3b 39 PwmOut _pwm;
taylorza 0:d873d5d62d3b 40 bool _isPlaying;
taylorza 0:d873d5d62d3b 41 char *_mml;
taylorza 0:d873d5d62d3b 42 int _mmlIndex;
taylorza 0:d873d5d62d3b 43 int _octave;
taylorza 0:d873d5d62d3b 44 float _duration;
taylorza 0:d873d5d62d3b 45 float _durationRatio;
taylorza 0:d873d5d62d3b 46 float _pause;
taylorza 0:d873d5d62d3b 47 int _tempo;
taylorza 0:d873d5d62d3b 48 Timeout _scheduler;
taylorza 0:d873d5d62d3b 49
taylorza 0:d873d5d62d3b 50 FunctionPointer _completionCallback;
taylorza 0:d873d5d62d3b 51
taylorza 0:d873d5d62d3b 52 static const float PERIOD_TABLE[];
taylorza 0:d873d5d62d3b 53
taylorza 0:d873d5d62d3b 54 static const float WHOLE_NOTE_DURATION;
taylorza 0:d873d5d62d3b 55 static const float QUARTER_NOTE_DURATION;
taylorza 0:d873d5d62d3b 56 static const float QUARTER_NOTES_PER_MINUTE;
taylorza 0:d873d5d62d3b 57
taylorza 0:d873d5d62d3b 58 static const float DEFAULT_TIMING;
taylorza 0:d873d5d62d3b 59 static const float LEGATO_TIMING;
taylorza 0:d873d5d62d3b 60 static const float STACCATO_TIMING;
taylorza 0:d873d5d62d3b 61
taylorza 0:d873d5d62d3b 62 static const int NOTE_REST;
taylorza 0:d873d5d62d3b 63 static const int NOTE_C;
taylorza 0:d873d5d62d3b 64 static const int NOTE_CS;
taylorza 0:d873d5d62d3b 65 static const int NOTE_D;
taylorza 0:d873d5d62d3b 66 static const int NOTE_DS;
taylorza 0:d873d5d62d3b 67 static const int NOTE_E;
taylorza 0:d873d5d62d3b 68 static const int NOTE_F;
taylorza 0:d873d5d62d3b 69 static const int NOTE_FS;
taylorza 0:d873d5d62d3b 70 static const int NOTE_G;
taylorza 0:d873d5d62d3b 71 static const int NOTE_GS;
taylorza 0:d873d5d62d3b 72 static const int NOTE_A;
taylorza 0:d873d5d62d3b 73 static const int NOTE_AS;
taylorza 0:d873d5d62d3b 74 static const int NOTE_B;
taylorza 0:d873d5d62d3b 75 };
taylorza 0:d873d5d62d3b 76 #endif //__MUSICENGINE_H__