Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
OneBitSound/SoundBlock.h@1:9ff7384171ec, 2015-01-04 (annotated)
- 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?
| User | Revision | Line number | New 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 |