Chris Taylor / Mbed 2 deprecated RETRO-SpaceRaiders Featured

Dependencies:   mbed

Committer:
taylorza
Date:
Sun Jan 04 03:05:13 2015 +0000
Revision:
1:9ff7384171ec
Version 1.0 of Game

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 1:9ff7384171ec 1 #ifndef __SOUNDBLOCK_H__
taylorza 1:9ff7384171ec 2 #define __SOUNDBLOCK_H__
taylorza 1:9ff7384171ec 3
taylorza 1:9ff7384171ec 4 #define US_PER_BIT 32
taylorza 1:9ff7384171ec 5
taylorza 1:9ff7384171ec 6 // Fix16 representation of 1000000/32
taylorza 1:9ff7384171ec 7 #define FREQ_NUMERATOR 0x7a120000
taylorza 1:9ff7384171ec 8
taylorza 1:9ff7384171ec 9
taylorza 1:9ff7384171ec 10 // Fix16 representation of 1000000/24
taylorza 1:9ff7384171ec 11 //#define FREQ_NUMERATOR 0xa2c20000
taylorza 1:9ff7384171ec 12
taylorza 1:9ff7384171ec 13 #define TONE(stepCount, stepDuration, pitch, pitchSlide, duty, dutySlide) SoundBlock(SoundBlock::Tone, stepCount, stepDuration, pitch, pitchSlide, duty, dutySlide)
taylorza 1:9ff7384171ec 14 #define NOISE(stepCount, stepDuration, pitch, pitchSlide) SoundBlock(SoundBlock::Noise, stepCount, stepDuration, pitch, pitchSlide, 128, 0)
taylorza 1:9ff7384171ec 15 #define PAUSE(stepCount, stepDuration) SoundBlock(SoundBlock::Pause, stepCount, stepDuration, 0, 0, 0, 0)
taylorza 1:9ff7384171ec 16
taylorza 1:9ff7384171ec 17 #define CREATE_EFFECT(name) \
taylorza 1:9ff7384171ec 18 static const SoundBlock name[] = \
taylorza 1:9ff7384171ec 19 { \
taylorza 1:9ff7384171ec 20
taylorza 1:9ff7384171ec 21 #define END_EFFECT \
taylorza 1:9ff7384171ec 22 };
taylorza 1:9ff7384171ec 23
taylorza 1:9ff7384171ec 24 #define EFFECT(name) name, sizeof(name)/sizeof(SoundBlock)
taylorza 1:9ff7384171ec 25
taylorza 1:9ff7384171ec 26 class SoundChannel;
taylorza 1:9ff7384171ec 27
taylorza 1:9ff7384171ec 28 class SoundBlock
taylorza 1:9ff7384171ec 29 {
taylorza 1:9ff7384171ec 30 public:
taylorza 1:9ff7384171ec 31 enum ToneType {Tone, Noise, Pause};
taylorza 1:9ff7384171ec 32
taylorza 1:9ff7384171ec 33 public:
taylorza 1:9ff7384171ec 34 SoundBlock(ToneType toneType, uint16_t stepCount, uint16_t stepDuration, uint16_t pitch, int16_t pitchSlide, uint8_t duty, int8_t dutySlide);
taylorza 1:9ff7384171ec 35 SoundBlock(ToneType toneType, uint16_t stepCount, uint16_t stepDuration);
taylorza 1:9ff7384171ec 36
taylorza 1:9ff7384171ec 37 protected:
taylorza 1:9ff7384171ec 38 SoundBlock();
taylorza 1:9ff7384171ec 39
taylorza 1:9ff7384171ec 40 private:
taylorza 1:9ff7384171ec 41 void initialize(ToneType toneType, uint16_t stepCount, uint16_t stepDuration, uint16_t pitch, int16_t pitchSlide, uint8_t duty, int8_t dutySlide);
taylorza 1:9ff7384171ec 42
taylorza 1:9ff7384171ec 43 protected:
taylorza 1:9ff7384171ec 44 inline ToneType getToneType() { return _toneType; }
taylorza 1:9ff7384171ec 45 inline uint16_t getStepCount() { return _stepCount; }
taylorza 1:9ff7384171ec 46 inline uint16_t getStepDuration() { return _stepDuration; }
taylorza 1:9ff7384171ec 47 inline fix16_t getPitch(fix16_t offset) { return fix16_div(FREQ_NUMERATOR, _pitch + offset); }
taylorza 1:9ff7384171ec 48 inline fix16_t getPitchSlide() {return _pitchSlide; }
taylorza 1:9ff7384171ec 49 inline uint8_t getDuty(int8_t offset) { return (uint8_t)(_duty + offset); }
taylorza 1:9ff7384171ec 50 inline int8_t getDutySlide() { return _dutySlide; }
taylorza 1:9ff7384171ec 51
taylorza 1:9ff7384171ec 52 private:
taylorza 1:9ff7384171ec 53 ToneType _toneType;
taylorza 1:9ff7384171ec 54 uint16_t _stepCount;
taylorza 1:9ff7384171ec 55 uint16_t _stepDuration;
taylorza 1:9ff7384171ec 56 fix16_t _pitch;
taylorza 1:9ff7384171ec 57 fix16_t _pitchSlide;
taylorza 1:9ff7384171ec 58 uint8_t _duty;
taylorza 1:9ff7384171ec 59 int8_t _dutySlide;
taylorza 1:9ff7384171ec 60
taylorza 1:9ff7384171ec 61 friend class SoundChannel;
taylorza 1:9ff7384171ec 62 };
taylorza 1:9ff7384171ec 63 #endif //__SOUNDBLOCK_H__
taylorza 1:9ff7384171ec 64
taylorza 1:9ff7384171ec 65