48 lines
1.4 KiB
C++
48 lines
1.4 KiB
C++
#pragma once
|
|
|
|
// A class to encapsulate primitive sound effects
|
|
class cSound
|
|
{
|
|
private:
|
|
const uint16_t EOD = 0; // End Of Data marker
|
|
uint8_t _pinBeep; // the pin to use for beeping
|
|
|
|
// Sound data - frequency followed by duration in pairs.
|
|
// Data ends in End Of Data marker EOD.
|
|
const uint16_t soundSplash[1] PROGMEM = { EOD };
|
|
const uint16_t soundHit[3] PROGMEM = { 1000, 50, EOD };
|
|
const uint16_t soundBounce[3] PROGMEM = { 500, 50, EOD };
|
|
const uint16_t soundPoint[3] PROGMEM = { 150, 150, EOD };
|
|
const uint16_t soundStart[7] PROGMEM = { 250, 100, 500, 100, 1000, 100, EOD };
|
|
const uint16_t soundOver[7] PROGMEM = { 1000, 100, 500, 100, 250, 100, EOD };
|
|
|
|
void playSound(const uint16_t *table)
|
|
// Play sound table data. Data table must end in EOD marker.
|
|
{
|
|
uint8_t idx = 0;
|
|
|
|
//PRINTS("\nTone Data ");
|
|
while (table[idx] != EOD)
|
|
{
|
|
uint16_t t = table[idx++];
|
|
uint16_t d = table[idx++];
|
|
|
|
//PRINTXY("-", t, d);
|
|
tone(_pinBeep, t);
|
|
delay(d);
|
|
}
|
|
//PRINTS("-EOD");
|
|
noTone(_pinBeep); // be quiet now!
|
|
}
|
|
|
|
public:
|
|
void begin(uint8_t pinBeep) { _pinBeep = pinBeep; }
|
|
void splash(void) { playSound(soundSplash); }
|
|
void start(void) { playSound(soundStart); }
|
|
void hit(void) { playSound(soundHit); }
|
|
void bounce(void) { playSound(soundBounce); }
|
|
void point(void) { playSound(soundPoint); }
|
|
void over(void) { playSound(soundOver); }
|
|
};
|
|
|