00001 #ifndef FSOUND_H_FILE 00002 #define FSOUND_H_FILE 00003 00004 #include "FBase.h" 00005 #include <vector> 00006 #include <iostream> 00007 00008 00009 #define FTDS_COMPRESS_NONE (0 << 4) 00010 #define FTDS_COMPRESS_ADPCM (1 << 4) 00011 #define FTDS_COMPRESS_MP3 (2 << 4) 00012 00013 #define FTDS_RATE_5_5_KHZ (0 << 2) 00014 #define FTDS_RATE_11_KHZ (1 << 2) 00015 #define FTDS_RATE_22_KHZ (2 << 2) 00016 #define FTDS_RATE_44_KHZ (3 << 2) 00017 00018 #define FTDS_SND_16BIT (1 << 1) 00019 #define FTDS_SND_8BIT (0 << 1) 00020 00021 #define FTDS_SND_STEREO (1) 00022 #define FTDS_SND_MONO (0) 00023 00024 class FlashTagDefineSound : public FlashTag, public FlashIDEnabled 00025 { 00026 DEFINE_RW_INTERFACE 00027 FlashTagDefineSound() {} 00028 public: 00029 FlashTagDefineSound(unsigned char _flags, UDWORD _samplecount, char *_samples, UDWORD _len) 00030 : samples(_samples), flags(_flags), samplecount(_samplecount), len(_len) {} 00031 protected: 00032 friend class FlashImportHandler; 00033 friend std::ostream& operator<<(std::ostream& out, const FlashTagDefineSound &data); 00034 friend std::istream& operator>>(std::istream& in, FlashTagDefineSound &data); 00035 public: 00036 char GetFlags() const { return flags; } 00037 UDWORD GetSampleCount() const { return samplecount; }; 00038 UDWORD GetSampleLength() const { return len; }; 00039 char *GetSamples() { return samples; }; 00040 protected: 00041 char *samples; 00042 gc_vector<char *>samplevec; 00043 unsigned char flags; 00044 UDWORD samplecount; 00045 UDWORD len; 00046 }; 00047 00048 00049 class FlashTagDefineSoundMP3 : public FlashTagDefineSound 00050 { 00051 DEFINE_RW_INTERFACE 00052 FlashTagDefineSoundMP3() {} 00053 public: 00054 FlashTagDefineSoundMP3(unsigned char _flags, UDWORD _samplecount, char *_samples, UDWORD _len, UWORD _delayseek) 00055 : FlashTagDefineSound((unsigned char)((_flags & 0xf) | (2 << 4)) , _samplecount, _samples, _len), delayseek(_delayseek) {} 00056 private: 00057 friend class FlashImportHandler; 00058 friend std::ostream& operator<<(std::ostream& out, const FlashTagDefineSoundMP3 &data); 00059 friend std::istream& operator>>(std::istream& in, FlashTagDefineSoundMP3 &data); 00060 gc_vector<char *>samplevec; 00061 UWORD delayseek; 00062 public: 00063 UWORD GetDelaySeek() const { return delayseek; } 00064 }; 00065 00066 class FlashSoundEnvelope 00067 { 00068 public: 00069 FlashSoundEnvelope(UDWORD _mark44, UWORD _level0, UWORD _level1) : mark44(_mark44), 00070 level0(_level0), level1(_level1) {} 00071 00072 friend std::ostream& operator<<(std::ostream& out, FlashSoundEnvelope &data); 00073 friend std::istream& operator>>(std::istream& in, FlashSoundEnvelope &data); 00074 00075 private: 00076 UDWORD mark44; 00077 UWORD level0; 00078 UWORD level1; 00079 }; 00080 00081 #define FSI_SYNC_NO_MULTIPLE (1 << 4) 00082 #define FSI_SYNC_STOP (2 << 4) 00083 #define FSI_HAS_ENVELOPE (1 << 3) 00084 #define FSI_HAS_LOOP (1 << 2) 00085 #define FSI_HAS_OUT (1 << 1) 00086 #define FSI_HAS_IN (1) 00087 00088 class FlashTagStartSound; 00089 00090 class FlashSoundInfo 00091 { 00092 FlashSoundInfo() {} 00093 public: 00094 FlashSoundInfo(unsigned char _flags) : flags(_flags & 0xf0) {} 00095 FlashSoundInfo(unsigned char _flags, UDWORD _inPoint, UDWORD _outPoint, UWORD _loopCount) : 00096 flags(_flags & 0xfe), inPoint(_inPoint), outPoint(_outPoint), loopCount(_loopCount) {} 00097 FlashSoundInfo(unsigned char _flags, UDWORD _inPoint, UDWORD _outPoint, UWORD _loopCount, 00098 std::vector<FlashSoundEnvelope> &v) : flags(_flags), 00099 inPoint(_inPoint), outPoint(_outPoint), loopCount(_loopCount), v_snd_env(v) {} 00100 private: 00101 friend class FlashTagStartSound; 00102 friend std::ostream& operator<<(std::ostream& out, FlashSoundInfo &data); 00103 friend std::istream& operator>>(std::istream& in, FlashSoundInfo &data); 00104 00105 public: 00106 00107 unsigned char GetFlags() { return flags; } 00108 UDWORD GetInPoint() { return inPoint; } 00109 UDWORD GetOutPoint() { return outPoint; } 00110 UDWORD GetLoopCount() { return loopCount; } 00111 std::vector<FlashSoundEnvelope> &GetEnvelopes() { return v_snd_env; } 00112 00113 00114 private: 00115 unsigned char flags; 00116 UDWORD inPoint; 00117 UDWORD outPoint; 00118 UWORD loopCount; 00119 std::vector<FlashSoundEnvelope> v_snd_env; 00120 }; 00121 00122 class FlashTagStartSound : public FlashSpriteEnabled 00123 { 00124 DEFINE_RW_INTERFACE 00125 FlashTagStartSound() {} 00126 public: 00127 FlashTagStartSound(UWORD _id, FlashSoundInfo &s) : id(_id), si(s) {} 00128 private: 00129 friend class FlashImportHandler; 00130 friend std::ostream& operator<<(std::ostream& out, FlashTagStartSound &data); 00131 friend std::istream& operator>>(std::istream& in, FlashTagStartSound &data); 00132 UWORD id; 00133 public: 00134 UWORD GetID() const { return id; } 00135 FlashSoundInfo GetSoundInfo() { return si; } 00136 private: 00137 FlashSoundInfo si; 00138 }; 00139 00140 #define FTSSH_RATE_5_5_KHZ 0 00141 #define FTSSH_RATE_11_KHZ 1 00142 #define FTSSH_RATE_22_KHZ 2 00143 #define FTSSH_RATE_44_KHZ 3 00144 00145 class FlashTagSoundStreamHead : public FlashSpriteEnabled 00146 { 00147 DEFINE_RW_INTERFACE 00148 FlashTagSoundStreamHead() {} 00149 public: 00150 FlashTagSoundStreamHead(char play_rate, bool play_16bit, bool play_stereo, 00151 char stream_rate, bool stream_stereo, UWORD samplecountavg) 00152 : mplay_rate(play_rate), mplay_16bit(play_16bit), mplay_stereo(play_stereo), 00153 mcompression(1), mstream_rate(stream_rate), mstream_16bit(1), 00154 mstream_stereo(stream_stereo), msamplecountavg(samplecountavg) {} 00155 private: 00156 friend class FlashImportHandler; 00157 friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamHead &data); 00158 friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamHead &data); 00159 00160 public: 00161 char GetPlayRate() { return mplay_rate; } 00162 bool GetPlay16bit() { return mplay_16bit; } 00163 bool GetPlayStereo() { return mplay_stereo; } 00164 char GetCompression() { return mcompression; } 00165 char GetStreamRate() { return mstream_rate; } 00166 bool GetStream16bit() { return mstream_16bit; } 00167 bool GetStreamStereo() { return mstream_stereo; } 00168 UWORD GetSampleCountAvg() { return msamplecountavg; } 00169 private: 00170 char mplay_rate; 00171 bool mplay_16bit; 00172 bool mplay_stereo; 00173 char mcompression; 00174 char mstream_rate; 00175 bool mstream_16bit; 00176 bool mstream_stereo; 00177 UWORD msamplecountavg; 00178 }; 00179 00180 #define FTSSH2_RATE_5_5_KHZ 0 00181 #define FTSSH2_RATE_11_KHZ 1 00182 #define FTSSH2_RATE_22_KHZ 2 00183 #define FTSSH2_RATE_44_KHZ 3 00184 00185 #define FTSSH2_COMPRESS_NONE 0 00186 #define FTSSH2_COMPRESS_ADPCM 1 00187 #define FTSSH2_COMPRESS_MP3 2 00188 00189 class FlashTagSoundStreamHead2 : public FlashSpriteEnabled 00190 { 00191 DEFINE_RW_INTERFACE 00192 FlashTagSoundStreamHead2() {} 00193 public: 00194 friend class FlashImportHandler; 00195 FlashTagSoundStreamHead2(char play_rate, bool play_16bit, bool play_stereo, char compression, 00196 char stream_rate, bool stream_16bit, bool stream_stereo, UWORD samplecountavg) 00197 : mplay_rate(play_rate), mplay_16bit(play_16bit), mplay_stereo(play_stereo), 00198 mcompression(compression), mstream_rate(stream_rate), mstream_16bit(stream_16bit), 00199 mstream_stereo(stream_stereo), msamplecountavg(samplecountavg) {} 00200 private: 00201 friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamHead2 &data); 00202 friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamHead2 &data); 00203 public: 00204 char GetPlayRate() { return mplay_rate; } 00205 bool GetPlay16bit() { return mplay_16bit; } 00206 bool GetPlayStereo() { return mplay_stereo; } 00207 char GetCompression() { return mcompression; } 00208 char GetStreamRate() { return mstream_rate; } 00209 bool GetStream16bit() { return mstream_16bit; } 00210 bool GetStreamStereo() { return mstream_stereo; } 00211 UWORD GetSampleCountAvg() { return msamplecountavg; } 00212 private: 00213 char mplay_rate; 00214 bool mplay_16bit; 00215 bool mplay_stereo; 00216 char mcompression; 00217 char mstream_rate; 00218 bool mstream_16bit; 00219 bool mstream_stereo; 00220 UWORD msamplecountavg; 00221 }; 00222 00223 00224 class FlashTagSoundStreamBlock : public FlashSpriteEnabled 00225 { 00226 DEFINE_RW_INTERFACE 00227 FlashTagSoundStreamBlock() {} 00228 public: 00229 friend class FlashImportHandler; 00230 FlashTagSoundStreamBlock(char *_data, UDWORD _len) : data(_data), len(_len) {} 00231 00232 protected: 00233 friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamBlock &data); 00234 friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamBlock &data); 00235 00236 public: 00237 UDWORD GetSampleLength() const { return len; } 00238 char *GetSamples() { return data; } 00239 protected: 00240 UDWORD len; 00241 char *data; 00242 00243 gc_vector<char *> gc; 00244 }; 00245 00246 class FlashTagSoundStreamBlockMP3 : public FlashTagSoundStreamBlock 00247 { 00248 DEFINE_RW_INTERFACE 00249 FlashTagSoundStreamBlockMP3() {} 00250 public: 00251 FlashTagSoundStreamBlockMP3(UWORD _samplecount, UWORD _delayseek, char *_data, UDWORD _len) : samplecount(_samplecount), delay_seek(_delayseek), FlashTagSoundStreamBlock(_data,_len){} 00252 00253 friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamBlockMP3 &data); 00254 friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamBlockMP3 &data); 00255 private: 00256 friend class FlashImportHandler; 00257 UWORD delay_seek; 00258 UWORD samplecount; 00259 }; 00260 00261 #endif