home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / flash078.zip / flashsource-r0_7_8.zip / FSound.h < prev    next >
C/C++ Source or Header  |  2001-08-02  |  9KB  |  264 lines

  1. #ifndef FSOUND_H_FILE
  2. #define FSOUND_H_FILE
  3.  
  4. #include "FBase.h"
  5. #include <vector>
  6. #include <iostream>
  7.  
  8.  
  9. #define FTDS_COMPRESS_NONE        (0 << 4)
  10. #define FTDS_COMPRESS_ADPCM        (1 << 4)
  11. #define FTDS_COMPRESS_MP3        (2 << 4)
  12.  
  13. #define FTDS_RATE_5_5_KHZ        (0 << 2)
  14. #define FTDS_RATE_11_KHZ        (1 << 2)
  15. #define FTDS_RATE_22_KHZ        (2 << 2)
  16. #define FTDS_RATE_44_KHZ        (3 << 2)
  17.  
  18. #define FTDS_SND_16BIT            (1 << 1)
  19. #define FTDS_SND_8BIT            (0 << 1)
  20.  
  21. #define FTDS_SND_STEREO            (1)
  22. #define FTDS_SND_MONO            (0)
  23.  
  24. class FlashTagDefineSound : public FlashTag, public FlashIDEnabled
  25. {
  26.     DEFINE_RW_INTERFACE
  27.         FlashTagDefineSound() {}
  28. public:
  29.     FlashTagDefineSound(unsigned char _flags, UDWORD _samplecount, char *_samples, UDWORD _len)
  30.         : samples(_samples), flags(_flags), samplecount(_samplecount), len(_len) {}
  31. protected:
  32.     friend class FlashImportHandler;    
  33.     friend std::ostream& operator<<(std::ostream& out, const FlashTagDefineSound &data);
  34.     friend std::istream& operator>>(std::istream& in, FlashTagDefineSound &data);
  35. public:
  36.     char GetFlags() const { return flags; }
  37.     UDWORD GetSampleCount() const { return samplecount; };
  38.     UDWORD GetSampleLength() const { return len; };
  39.     char *GetSamples() { return samples; };
  40. protected:
  41.     char *samples;
  42.     gc_vector<char *>samplevec;
  43.     unsigned char flags;
  44.     UDWORD samplecount;
  45.     UDWORD len;
  46. };
  47.  
  48.  
  49. class FlashTagDefineSoundMP3 : public FlashTagDefineSound
  50. {
  51.     DEFINE_RW_INTERFACE
  52.     FlashTagDefineSoundMP3() {}
  53. public:
  54.     FlashTagDefineSoundMP3(unsigned char _flags, UDWORD _samplecount, char *_samples, UDWORD _len, UWORD _delayseek)
  55.         : FlashTagDefineSound((unsigned char)((_flags & 0xf) | (2 << 4)) , _samplecount, _samples, _len), delayseek(_delayseek) {}
  56. private:
  57.     friend class FlashImportHandler;
  58.     friend std::ostream& operator<<(std::ostream& out, const FlashTagDefineSoundMP3 &data);
  59.     friend std::istream& operator>>(std::istream& in, FlashTagDefineSoundMP3 &data);
  60.     gc_vector<char *>samplevec;
  61.     UWORD delayseek;
  62. public:
  63.     UWORD GetDelaySeek() const { return delayseek; }
  64. };
  65.  
  66. class FlashSoundEnvelope
  67. {
  68. public:    
  69.     FlashSoundEnvelope(UDWORD _mark44, UWORD _level0, UWORD _level1) : mark44(_mark44), 
  70.         level0(_level0), level1(_level1)   {}
  71.  
  72.     friend std::ostream& operator<<(std::ostream& out, FlashSoundEnvelope &data);
  73.     friend std::istream& operator>>(std::istream& in, FlashSoundEnvelope &data);
  74.  
  75. private:
  76.     UDWORD mark44;
  77.     UWORD level0;
  78.     UWORD level1;
  79. };
  80.  
  81. #define FSI_SYNC_NO_MULTIPLE    (1 << 4)
  82. #define FSI_SYNC_STOP            (2 << 4)
  83. #define FSI_HAS_ENVELOPE        (1 << 3)
  84. #define FSI_HAS_LOOP            (1 << 2)
  85. #define FSI_HAS_OUT                (1 << 1)
  86. #define FSI_HAS_IN                (1)
  87.  
  88. class FlashTagStartSound;
  89.  
  90. class FlashSoundInfo 
  91. {
  92.     FlashSoundInfo() {}
  93. public:
  94.     FlashSoundInfo(unsigned char _flags) : flags(_flags & 0xf0) {}
  95.     FlashSoundInfo(unsigned char _flags, UDWORD _inPoint, UDWORD _outPoint, UWORD _loopCount)  :
  96.         flags(_flags & 0xfe), inPoint(_inPoint), outPoint(_outPoint), loopCount(_loopCount) {}
  97.     FlashSoundInfo(unsigned char _flags, UDWORD _inPoint, UDWORD _outPoint, UWORD _loopCount, 
  98.         std::vector<FlashSoundEnvelope> &v) : flags(_flags),
  99.         inPoint(_inPoint), outPoint(_outPoint), loopCount(_loopCount), v_snd_env(v) {}
  100. private:
  101.     friend class FlashTagStartSound;
  102.     friend std::ostream& operator<<(std::ostream& out, FlashSoundInfo &data);
  103.     friend std::istream& operator>>(std::istream& in, FlashSoundInfo &data);
  104.  
  105. public:
  106.     
  107.     unsigned char GetFlags() { return flags; }
  108.     UDWORD GetInPoint() { return inPoint; }
  109.     UDWORD GetOutPoint() { return outPoint; }
  110.     UDWORD GetLoopCount() { return loopCount; }
  111.     std::vector<FlashSoundEnvelope> &GetEnvelopes() { return v_snd_env; }
  112.  
  113.  
  114. private:
  115.     unsigned char flags;
  116.     UDWORD inPoint;
  117.     UDWORD outPoint;
  118.     UWORD loopCount;
  119.     std::vector<FlashSoundEnvelope> v_snd_env;
  120. };
  121.  
  122. class FlashTagStartSound : public FlashSpriteEnabled
  123. {
  124.     DEFINE_RW_INTERFACE
  125.     FlashTagStartSound() {}
  126. public:
  127.     FlashTagStartSound(UWORD _id, FlashSoundInfo &s) : id(_id), si(s) {}
  128. private:
  129.     friend class FlashImportHandler;
  130.     friend std::ostream& operator<<(std::ostream& out, FlashTagStartSound &data);
  131.     friend std::istream& operator>>(std::istream& in, FlashTagStartSound &data);
  132.     UWORD id;
  133. public:    
  134.     UWORD GetID() const { return id; }
  135.     FlashSoundInfo GetSoundInfo() { return si; }
  136. private:
  137.     FlashSoundInfo si;    
  138. };
  139.  
  140. #define FTSSH_RATE_5_5_KHZ 0
  141. #define FTSSH_RATE_11_KHZ  1
  142. #define FTSSH_RATE_22_KHZ  2
  143. #define FTSSH_RATE_44_KHZ  3
  144.  
  145. class FlashTagSoundStreamHead : public FlashSpriteEnabled
  146. {
  147.     DEFINE_RW_INTERFACE
  148.     FlashTagSoundStreamHead() {}
  149. public:
  150.     FlashTagSoundStreamHead(char play_rate, bool play_16bit, bool play_stereo, 
  151.                             char stream_rate, bool stream_stereo, UWORD samplecountavg)
  152.                             : mplay_rate(play_rate), mplay_16bit(play_16bit), mplay_stereo(play_stereo), 
  153.                             mcompression(1), mstream_rate(stream_rate), mstream_16bit(1), 
  154.                             mstream_stereo(stream_stereo), msamplecountavg(samplecountavg) {}
  155. private:
  156.     friend class FlashImportHandler;
  157.     friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamHead &data);
  158.     friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamHead &data);
  159.  
  160. public:
  161.     char GetPlayRate() { return mplay_rate; }
  162.     bool GetPlay16bit() { return mplay_16bit; }
  163.     bool GetPlayStereo() { return mplay_stereo; }
  164.     char GetCompression() { return mcompression; }
  165.     char GetStreamRate() { return mstream_rate; }
  166.     bool GetStream16bit() { return mstream_16bit; }
  167.     bool GetStreamStereo() { return mstream_stereo; }
  168.     UWORD GetSampleCountAvg() { return msamplecountavg; }
  169. private:    
  170.     char mplay_rate;
  171.     bool mplay_16bit;
  172.     bool mplay_stereo;
  173.     char mcompression;
  174.     char mstream_rate;
  175.     bool mstream_16bit;
  176.     bool mstream_stereo; 
  177.     UWORD msamplecountavg;    
  178. };
  179.  
  180. #define FTSSH2_RATE_5_5_KHZ 0
  181. #define FTSSH2_RATE_11_KHZ  1
  182. #define FTSSH2_RATE_22_KHZ  2
  183. #define FTSSH2_RATE_44_KHZ  3
  184.  
  185. #define FTSSH2_COMPRESS_NONE   0
  186. #define FTSSH2_COMPRESS_ADPCM  1
  187. #define FTSSH2_COMPRESS_MP3    2
  188.  
  189. class FlashTagSoundStreamHead2 : public FlashSpriteEnabled
  190. {
  191.     DEFINE_RW_INTERFACE
  192.     FlashTagSoundStreamHead2() {}
  193. public:
  194.     friend class FlashImportHandler;
  195.     FlashTagSoundStreamHead2(char play_rate, bool play_16bit, bool play_stereo, char compression,
  196.                             char stream_rate, bool stream_16bit, bool stream_stereo, UWORD samplecountavg)
  197.                             : mplay_rate(play_rate), mplay_16bit(play_16bit), mplay_stereo(play_stereo), 
  198.                             mcompression(compression), mstream_rate(stream_rate), mstream_16bit(stream_16bit), 
  199.                             mstream_stereo(stream_stereo), msamplecountavg(samplecountavg) {}
  200. private:
  201.     friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamHead2 &data);
  202.     friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamHead2 &data);
  203. public:
  204.     char GetPlayRate() { return mplay_rate; }
  205.     bool GetPlay16bit() { return mplay_16bit; }
  206.     bool GetPlayStereo() { return mplay_stereo; }
  207.     char GetCompression() { return mcompression; }
  208.     char GetStreamRate() { return mstream_rate; }
  209.     bool GetStream16bit() { return mstream_16bit; }
  210.     bool GetStreamStereo() { return mstream_stereo; }
  211.     UWORD GetSampleCountAvg() { return msamplecountavg; }
  212. private:
  213.     char mplay_rate;
  214.     bool mplay_16bit;
  215.     bool mplay_stereo;
  216.     char mcompression;
  217.     char mstream_rate;
  218.     bool mstream_16bit;
  219.     bool mstream_stereo; 
  220.     UWORD msamplecountavg;    
  221. };
  222.  
  223.  
  224. class FlashTagSoundStreamBlock : public FlashSpriteEnabled
  225. {
  226.     DEFINE_RW_INTERFACE
  227.     FlashTagSoundStreamBlock() {}
  228. public:
  229.     friend class FlashImportHandler;
  230.     FlashTagSoundStreamBlock(char *_data, UDWORD _len) : data(_data), len(_len) {}
  231.  
  232. protected:
  233.     friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamBlock &data);
  234.     friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamBlock &data);
  235.  
  236. public:
  237.     UDWORD GetSampleLength() const { return len; }
  238.     char *GetSamples() { return data; }
  239. protected:
  240.         char *data;
  241.     UDWORD len;
  242.  
  243.     
  244.     gc_vector<char *> gc;
  245. };
  246.  
  247. class FlashTagSoundStreamBlockMP3 : public FlashTagSoundStreamBlock
  248. {
  249.     DEFINE_RW_INTERFACE
  250.         FlashTagSoundStreamBlockMP3() {}
  251. public:
  252.         FlashTagSoundStreamBlockMP3(UWORD _samplecount, UWORD _delayseek, char *_data, UDWORD _len) : FlashTagSoundStreamBlock(_data,_len), samplecount(_samplecount), delay_seek(_delayseek) {}
  253.  
  254.     friend std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamBlockMP3 &data);
  255.     friend std::istream& operator>>(std::istream& in, FlashTagSoundStreamBlockMP3 &data);
  256. private:
  257.     friend class FlashImportHandler;
  258.         UWORD samplecount;
  259.     UWORD delay_seek;
  260.  
  261. };
  262.  
  263. #endif
  264.