PWM Audio Utility - Music Macro Languate
The contained PWMAudio class provides a very simple interface based on Music Macro Language to generate simplistic beeps using a piezo electric speaker. GW-BASIC or BASIC-A anyone
See more about MML on wikipedia : Music Macro Language - Wikipedia
I have purposely avoided any of the Gadgeteer specific classes etc. and opted to use the GHIElectronics.NETMF.Hardware.PWM class to provide the PWM functionality.
Basic usage:
// Get a PWM object
PWM pwm = new PWM(PWM.Pin.PWM3);
// Create an instance of the PWMAudio class
// passing the PWM object used for generating the audio
PWMAudio audio = new PWMAudio(pwm);
// Play a tune blocking until complete
audio.Play("t240o3gro4gro3gro4ggo3gro4gro3gro4ggo3g");
Available methods include:
Sound(int frequency, int duration) -
Generates a tone for the specified duration and blocks the caller until complete
SoundAsync(int frequency, int duration) -
Generates a tone for the specified duration, does not block the caller
Play(string commands) -
Executes the MML commands and blocks the caller until all commands have completed
PlayAsync(string commands) -
Executes the MML commands, does not blocks the caller
Stop();
Stops the current audio. This call blocks until the execution stops.
Note: Starting a new sound while another sound is already running causes the previous sound to stop.
Supported MML commands: (From Q-Basic Documentation)
Ln Sets the duration (length) of the notes. The variable n does not indicate an actual duration
amount but rather a note type; L1 - whole note, L2 - half note, L4 - quarter note, etc.
(L8, L16, L32, L64, ...). By default, n = 4.
The shorthand notation of length is also provided for a note. For example, "L4 CDE L8 FG L4 AB"
can be shortened to "L4 CDE F8G8 AB". F and G play as eighth notes while others play as quarter
notes.
On Sets the current octave. Valid values for n are 0 through 6. An octave begins with C and ends with B.
Remember that C- is equivalent to B.
< > Changes the current octave respectively down or up one level.
Nn Plays a specified note in the seven-octave range. Valid values are from 0 to 84. (0 is a pause.)
Cannot use with sharp and flat. Cannot use with the shorthand notation neither.
MN Stand for Music Normal. Note duration is 7/8ths of the length indicated by Ln. It is the default mode.
ML Stand for Music Legato. Note duration is full length of that indicated by Ln.
MS Stand for Music Staccato. Note duration is 3/4ths of the length indicated by Ln.
Pn Causes a silence (pause) for the length of note indicated (same as Ln).
Tn Sets the number of "L4"s per minute (tempo). Valid values are from 32 to 255. The default value is T120.
. When placed after a note, it causes the duration of the note to be 3/2 of the set duration.
This is how to get "dotted" notes. "L4 C#." would play C sharp as a dotted quarter note.
It can be used for a pause as well.