Version of Robotron arcade game using LPC1768, a Gameduino shield, a serial EEPROM (for high scores), two microswitch joysticks and two buttons plus a box to put it in. 20 levels of mayhem.
Dependencies: 25LCxxx_SPI CommonTypes Gameduino mbed
SoundManager.h@18:70190f956a24, 2013-06-17 (annotated)
- Committer:
- RichardE
- Date:
- Mon Jun 17 15:10:43 2013 +0000
- Revision:
- 18:70190f956a24
- Parent:
- 9:fa7e7b37b632
Improved response to button 1 when entering high scores (HighScoreEntry.cpp).
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RichardE | 9:fa7e7b37b632 | 1 | /* |
RichardE | 9:fa7e7b37b632 | 2 | * SOURCE FILE : SoundManager.h |
RichardE | 9:fa7e7b37b632 | 3 | * |
RichardE | 9:fa7e7b37b632 | 4 | * Responsible for playing simple sounds. |
RichardE | 9:fa7e7b37b632 | 5 | * |
RichardE | 9:fa7e7b37b632 | 6 | */ |
RichardE | 9:fa7e7b37b632 | 7 | |
RichardE | 9:fa7e7b37b632 | 8 | #ifndef SoundManagerIncluded |
RichardE | 9:fa7e7b37b632 | 9 | |
RichardE | 9:fa7e7b37b632 | 10 | #define SoundManagerIncluded |
RichardE | 9:fa7e7b37b632 | 11 | |
RichardE | 9:fa7e7b37b632 | 12 | #include <stdio.h> // for NULL |
RichardE | 9:fa7e7b37b632 | 13 | #include "Types.h" // various types |
RichardE | 9:fa7e7b37b632 | 14 | #include "Gameduino.h" // Gameduino stuff |
RichardE | 9:fa7e7b37b632 | 15 | |
RichardE | 9:fa7e7b37b632 | 16 | class SoundManager { |
RichardE | 9:fa7e7b37b632 | 17 | |
RichardE | 9:fa7e7b37b632 | 18 | public : |
RichardE | 9:fa7e7b37b632 | 19 | |
RichardE | 9:fa7e7b37b632 | 20 | // An instance of this class. |
RichardE | 9:fa7e7b37b632 | 21 | static SoundManager Instance; |
RichardE | 9:fa7e7b37b632 | 22 | |
RichardE | 9:fa7e7b37b632 | 23 | /***************/ |
RichardE | 9:fa7e7b37b632 | 24 | /* CONSTRUCTOR */ |
RichardE | 9:fa7e7b37b632 | 25 | /***************/ |
RichardE | 9:fa7e7b37b632 | 26 | SoundManager(); |
RichardE | 9:fa7e7b37b632 | 27 | |
RichardE | 9:fa7e7b37b632 | 28 | /*******************************************/ |
RichardE | 9:fa7e7b37b632 | 29 | /* SET GAMEDUINO THAT WILL PLAY THE SOUNDS */ |
RichardE | 9:fa7e7b37b632 | 30 | /*******************************************/ |
RichardE | 9:fa7e7b37b632 | 31 | // Pass pointer to a Gameduino which will play the sounds. |
RichardE | 9:fa7e7b37b632 | 32 | // You must call this before using other routines. |
RichardE | 9:fa7e7b37b632 | 33 | void SetGameduino( Gameduino *gameduino ) { |
RichardE | 9:fa7e7b37b632 | 34 | gd = gameduino; |
RichardE | 9:fa7e7b37b632 | 35 | } |
RichardE | 9:fa7e7b37b632 | 36 | |
RichardE | 9:fa7e7b37b632 | 37 | /************************/ |
RichardE | 9:fa7e7b37b632 | 38 | /* TRY AND PLAY A SOUND */ |
RichardE | 9:fa7e7b37b632 | 39 | /************************/ |
RichardE | 9:fa7e7b37b632 | 40 | // Pass address of tune in program memory in tuneAddress. |
RichardE | 9:fa7e7b37b632 | 41 | // Pass bias to apply to left speaker amplitude in leftAmpBias. |
RichardE | 9:fa7e7b37b632 | 42 | // Pass bias to apply to right speaker amplitude in leftAmpBias. |
RichardE | 9:fa7e7b37b632 | 43 | // Returns true if sound was started, false if no sound slots free. |
RichardE | 9:fa7e7b37b632 | 44 | bool PlaySound( const UInt8 *tuneAddress, UInt8 leftAmpBias, UInt8 rightAmpBias ); |
RichardE | 9:fa7e7b37b632 | 45 | |
RichardE | 9:fa7e7b37b632 | 46 | /****************************/ |
RichardE | 9:fa7e7b37b632 | 47 | /* UPDATE PLAYING OF SOUNDS */ |
RichardE | 9:fa7e7b37b632 | 48 | /****************************/ |
RichardE | 9:fa7e7b37b632 | 49 | // Should be called at regular intervals. |
RichardE | 9:fa7e7b37b632 | 50 | void Update( void ); |
RichardE | 9:fa7e7b37b632 | 51 | |
RichardE | 9:fa7e7b37b632 | 52 | /**********************************/ |
RichardE | 9:fa7e7b37b632 | 53 | /* COUNT NUMBER OF SOUNDS PLAYING */ |
RichardE | 9:fa7e7b37b632 | 54 | /**********************************/ |
RichardE | 9:fa7e7b37b632 | 55 | // Returns number of sounds playing. |
RichardE | 9:fa7e7b37b632 | 56 | UInt8 CountSoundsPlaying( void ); |
RichardE | 9:fa7e7b37b632 | 57 | |
RichardE | 9:fa7e7b37b632 | 58 | /******************************/ |
RichardE | 9:fa7e7b37b632 | 59 | /* SILENCE ALL SOUNDS PLAYING */ |
RichardE | 9:fa7e7b37b632 | 60 | /******************************/ |
RichardE | 9:fa7e7b37b632 | 61 | void SilenceAll( void ); |
RichardE | 9:fa7e7b37b632 | 62 | |
RichardE | 9:fa7e7b37b632 | 63 | private : |
RichardE | 9:fa7e7b37b632 | 64 | |
RichardE | 9:fa7e7b37b632 | 65 | enum { |
RichardE | 9:fa7e7b37b632 | 66 | FirstVoice = 0, // First Gameduino voice channel used |
RichardE | 9:fa7e7b37b632 | 67 | VoiceCount = 8, // Number of voice channels used |
RichardE | 9:fa7e7b37b632 | 68 | }; |
RichardE | 9:fa7e7b37b632 | 69 | |
RichardE | 9:fa7e7b37b632 | 70 | // Record for tune associated with each voice used. |
RichardE | 9:fa7e7b37b632 | 71 | class TuneRecord { |
RichardE | 9:fa7e7b37b632 | 72 | public : |
RichardE | 9:fa7e7b37b632 | 73 | |
RichardE | 9:fa7e7b37b632 | 74 | TuneRecord() : |
RichardE | 9:fa7e7b37b632 | 75 | TuneAddress( (UInt8*)NULL ) |
RichardE | 9:fa7e7b37b632 | 76 | { |
RichardE | 9:fa7e7b37b632 | 77 | } |
RichardE | 9:fa7e7b37b632 | 78 | |
RichardE | 9:fa7e7b37b632 | 79 | Gameduino::WaveForm TuneWaveform; |
RichardE | 9:fa7e7b37b632 | 80 | UInt8 LeftAmpBias, RightAmpBias; |
RichardE | 9:fa7e7b37b632 | 81 | const UInt8 *TuneAddress; |
RichardE | 9:fa7e7b37b632 | 82 | UInt8 Countdown; |
RichardE | 9:fa7e7b37b632 | 83 | |
RichardE | 9:fa7e7b37b632 | 84 | }; |
RichardE | 9:fa7e7b37b632 | 85 | |
RichardE | 9:fa7e7b37b632 | 86 | // Records used to step through each tune. |
RichardE | 9:fa7e7b37b632 | 87 | // A value of zero in TuneAddress field indicates an unused slot. |
RichardE | 9:fa7e7b37b632 | 88 | TuneRecord tuneRecords[ VoiceCount ]; |
RichardE | 9:fa7e7b37b632 | 89 | |
RichardE | 9:fa7e7b37b632 | 90 | // Gameduino that plays the sounds. |
RichardE | 9:fa7e7b37b632 | 91 | Gameduino *gd; |
RichardE | 9:fa7e7b37b632 | 92 | |
RichardE | 9:fa7e7b37b632 | 93 | /*****************************/ |
RichardE | 9:fa7e7b37b632 | 94 | /* UPDATE A SINGLE TUNE SLOT */ |
RichardE | 9:fa7e7b37b632 | 95 | /*****************************/ |
RichardE | 9:fa7e7b37b632 | 96 | // Do NOT call with a record containing zero in TuneAddress (a free slot). |
RichardE | 9:fa7e7b37b632 | 97 | void UpdateTuneSection( UInt8 voiceNum, TuneRecord *rec ); |
RichardE | 9:fa7e7b37b632 | 98 | |
RichardE | 9:fa7e7b37b632 | 99 | }; |
RichardE | 9:fa7e7b37b632 | 100 | |
RichardE | 9:fa7e7b37b632 | 101 | #endif |
RichardE | 9:fa7e7b37b632 | 102 | |
RichardE | 9:fa7e7b37b632 | 103 | /* END of SoundManager.h */ |
RichardE | 9:fa7e7b37b632 | 104 |