Class to play tones, various sounds and music in MML format using a PWM channel.

Dependents:   PwmSoundTest

PwmSound.h

Committer:
paulg
Date:
2014-03-30
Revision:
0:185bcd9f8e19
Child:
1:67056b9df9ff

File content as of revision 0:185bcd9f8e19:

/******************************************************************************
 * File:      PwmSound.h
 * Author:    Paul Griffith
 * Created:   25 Mar 2014
 * Last Edit: see below
 * Version:   see below
 *
 * Description:
 * Definitions for PwmSound class.
 *
 * Copyright (c) 2014 Paul Griffith, MIT License
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to
 * deal in the Software without restriction, including without limitation the
 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 * sell copies of the Software, and to permit persons to whom the Software is 
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 *
 * Modifications:
 * Ver  Date    By  Details
 * 0.00 25Mar14 PG  File created.
 * 1.00 30Mar14 PG  Initial release
 *
 ******************************************************************************/

#ifndef MBED_PWMSOUND_H
#define MBED_PWMSOUND_H

#include "mbed.h"

class PwmSound {
//private:

public:
    enum MusicStyle { STACCATO, NORMAL, LEGATO };

    PwmSound(PinName pin);

    void tone(float frequency, float duration);     //tones
    void tone(float frequency);
    void stop(void);
    void duration(float duration);
    void volume(float volume);

    void bip(int n = 1);    //beeps and other sounds
    void beep(int n = 1);
    void bleep(int n = 1);
    void buzz(int n = 1);
    void siren(int n = 1);
    void trill(int n = 1);
    void phone(int n = 1);

    void note(int number, int length);  //musical note
    void tempo(int tempo);
    void style(MusicStyle style);
 
    void tune(unsigned char* t);    //play tune from data in array

private:
    PwmOut _pin;
    float _duration;    //duration of tone in seconds
    float _volume;      //crude volume 0.0-1.0 => 0-50% duty cycle
    int _tempo;     //pace of music in beats per minute (32-255)
                    //one beat equals one quarter note (ie a crotchet)
    int _length;    //length of note (1-64), 1 = whole note, 4 = quarter etc
    MusicStyle _style;

    //the following support continuous two-tone sounds in background
    void _setup(float freq1, float freq2, float duration);
    void _sustain(void);    
    Ticker _sustainTkr;
    float _freq1;
    float _freq2;
    bool _beat;
    bool _playing;
};

#endif

// END of PwmSound.h