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