home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / flash078.zip / flashsource-r0_7_8.zip / FSound.cpp < prev    next >
C/C++ Source or Header  |  2001-07-26  |  6KB  |  235 lines

  1. #include <strstream>
  2. #include "FSound.h"
  3.  
  4. std::ostream& operator<<(std::ostream& out, const FlashTagDefineSound &data)
  5. {
  6.     out << FlashTagHeader(14,2+1+4+data.len);
  7.     WRITE_UWORD(data.GetID());
  8.     out.put(data.flags);
  9.     WRITE_UDWORD(data.samplecount);
  10.     for(UDWORD i=0; i < data.len; i++)
  11.     {
  12.         out.put((char)data.samples[i]);
  13.     }
  14.     return out;
  15. }
  16. std::istream& operator>>(std::istream& in, FlashTagDefineSound &data)
  17. {
  18.     UWORD id;
  19.     READ_UWORD(id);
  20.     data.SetID(id);
  21.     int flags = in.get();
  22.     //if(flags == EOF) throw;
  23.     data.flags = flags;
  24.     READ_UDWORD(data.samplecount);
  25.     
  26.     data.len = data.importsize - (2+1+4);
  27.     
  28.     data.samples = (char *)malloc(data.len);
  29.     data.samplevec.push_back(data.samples);
  30.     in.read(data.samples,data.len);
  31.     return in;
  32. }
  33.  
  34. std::ostream& operator<<(std::ostream& out, const FlashTagDefineSoundMP3 &data)
  35. {
  36.     out << FlashTagHeader(14,2+1+4+data.len+2);
  37.     WRITE_UWORD(data.GetID());
  38.     out.put(data.flags);
  39.     WRITE_UDWORD(data.samplecount);
  40.     WRITE_UWORD(data.delayseek);
  41.     for(UDWORD i=0; i < data.len; i++)
  42.     {
  43.         out.put((char)data.samples[i]);
  44.     }
  45.     return out;
  46. }
  47. std::istream& operator>>(std::istream& in, FlashTagDefineSoundMP3 &data)
  48. {
  49.     UWORD id;
  50.     READ_UWORD(id);
  51.     data.SetID(id);
  52.     int flags = in.get();
  53.     //if(flags == EOF) throw;
  54.     data.flags = flags;
  55.     READ_UDWORD(data.samplecount);
  56.     READ_UWORD(data.delayseek);
  57.     data.len = data.importsize - (2+1+6);
  58.     
  59.     data.samples = (char *)malloc(data.len);
  60.     data.samplevec.push_back(data.samples);
  61.     in.read(data.samples,data.len);
  62.     return in;
  63. }
  64.  
  65. std::ostream& operator<<(std::ostream& out, FlashSoundEnvelope &data)
  66. {
  67.     WRITE_UDWORD(data.mark44);
  68.     WRITE_UWORD(data.level0);
  69.     WRITE_UWORD(data.level1);
  70.     return out;
  71. }
  72.  
  73. std::istream& operator>>(std::istream& in, FlashSoundEnvelope &data)
  74. {
  75.     READ_UDWORD(data.mark44);
  76.     READ_UWORD(data.level0);
  77.     READ_UWORD(data.level1);
  78.     return in;
  79. }
  80.  
  81. std::ostream& operator<<(std::ostream& out, FlashSoundInfo &data)
  82. {
  83.     out.put(data.flags);
  84.     if(data.flags & 0x1) WRITE_UDWORD(data.inPoint);
  85.     if(data.flags & 0x2) WRITE_UDWORD(data.outPoint);
  86.     if(data.flags & 0x4) WRITE_UWORD(data.loopCount);
  87.     if(data.flags & 0x8) 
  88.     {
  89.         out.put((char)data.v_snd_env.size());
  90.         for(std::vector<FlashSoundEnvelope>::iterator i=data.v_snd_env.begin();
  91.         i != data.v_snd_env.end(); i++)
  92.         {
  93.             out << *i;
  94.         }
  95.     }
  96.     return out;
  97. }
  98. std::istream& operator>>(std::istream& in, FlashSoundInfo &data)
  99. {
  100.     int flags = in.get();
  101.     //if(flags == EOF) throw;
  102.     data.flags = flags;
  103.  
  104.     if(data.flags & 0x1) READ_UDWORD(data.inPoint);
  105.     if(data.flags & 0x2) READ_UDWORD(data.outPoint);
  106.     if(data.flags & 0x4) READ_UWORD(data.loopCount);
  107.     if(data.flags & 0x8) 
  108.     {
  109.         int size = in.get();
  110.         //if(size != EOF) throw;
  111.         
  112.         for(int i = 0; i < size; i++)
  113.         {
  114.             FlashSoundEnvelope fse(0,0,0);
  115.             in >> fse;
  116.         }
  117.     }
  118.     return in;
  119. }
  120.  
  121. std::ostream& operator<<(std::ostream& out, FlashTagStartSound &data)
  122. {
  123.     std::ostrstream tmp;
  124.     WRITE_UWORD2(data.id,tmp);
  125.     tmp << data.si;
  126.     out << FlashTagHeader(15,tmp.pcount());
  127.     out.write(tmp.rdbuf()->str(), tmp.pcount());
  128.     return out;
  129. }
  130. std::istream& operator>>(std::istream& in, FlashTagStartSound &data)
  131. {
  132.     READ_UWORD(data.id);
  133.     in >> data.si;
  134.     return in;
  135. }
  136.  
  137. std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamHead &data)
  138. {
  139.     out << FlashTagHeader(18,4);
  140.     out.put((char)((int)(data.mplay_rate << 2) | ((int)data.mplay_16bit << 1) | ((int)data.mplay_stereo)));
  141.     out.put((char)(((int)data.mcompression << 4) | (int)(data.mstream_rate << 2) | ((int)data.mstream_16bit << 1) | ((int)data.mstream_stereo)));
  142.     WRITE_UWORD(data.msamplecountavg);
  143.     return out;
  144. }
  145.  
  146. std::istream& operator>>(std::istream& in, FlashTagSoundStreamHead &data)
  147. {
  148.     int flags = in.get();
  149.     //if(flags == EOF) throw;
  150.     
  151.     data.mplay_rate = (GetIsolatedBits((unsigned char)flags, 2, 4));
  152.     data.mplay_16bit = (GetIsolatedBits((unsigned char)flags, 1, 2) == 1);
  153.     data.mplay_stereo = (GetIsolatedBits((unsigned char)flags, 0, 1) == 1);
  154.     
  155.     flags = in.get();
  156.     //if(flags == EOF) throw;
  157.     data.mcompression = (GetIsolatedBits((unsigned char)flags, 4, 6));
  158.     data.mstream_rate = (GetIsolatedBits((unsigned char)flags, 2, 4));
  159.     data.mstream_16bit = (GetIsolatedBits((unsigned char)flags, 1, 2) == 1);
  160.     data.mstream_stereo = (GetIsolatedBits((unsigned char)flags, 0, 1) == 1);
  161.  
  162.     READ_UWORD(data.msamplecountavg);
  163.  
  164.     return in;
  165. }
  166.  
  167. std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamHead2 &data)
  168. {
  169.     out << FlashTagHeader(45,4);
  170.     out.put((char)(((int)data.mplay_rate << 2) | ((int)data.mplay_16bit << 1) | ((int)data.mplay_stereo)));
  171.     out.put((char)(((int)data.mcompression << 4) | ((int)data.mstream_rate << 2) | ((int)data.mstream_16bit << 1) | ((int)data.mstream_stereo)));
  172.     WRITE_UWORD(data.msamplecountavg);
  173.     return out;
  174. }
  175.  
  176. std::istream& operator>>(std::istream& in, FlashTagSoundStreamHead2 &data)
  177. {
  178.     int flags = in.get();
  179.     //if(flags == EOF) throw;
  180.     data.mplay_rate = (GetIsolatedBits((unsigned char)flags, 2, 4));
  181.     data.mplay_16bit = (GetIsolatedBits((unsigned char)flags, 1, 2) == 1);
  182.     data.mplay_stereo = (GetIsolatedBits((unsigned char)flags, 0, 1) == 1);
  183.     
  184.     flags = in.get();
  185.     //if(flags == EOF) throw;
  186.     data.mcompression = (GetIsolatedBits((unsigned char)flags, 4, 6));
  187.     data.mstream_rate = (GetIsolatedBits((unsigned char)flags, 2, 4));
  188.     data.mstream_16bit = (GetIsolatedBits((unsigned char)flags, 1, 2) == 1);
  189.     data.mstream_stereo = (GetIsolatedBits((unsigned char)flags, 0, 1) == 1);
  190.  
  191.     READ_UWORD(data.msamplecountavg);
  192.  
  193.     return in;
  194. }
  195.  
  196. std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamBlock &data)
  197. {
  198.     out << FlashTagHeader(19,data.len);
  199.     for(UDWORD i = 0; i < data.len; i++)
  200.     {
  201.         out.put(data.data[i]);
  202.     }
  203.     return out;
  204. }
  205. std::istream& operator>>(std::istream& in, FlashTagSoundStreamBlock &data)
  206. {
  207.     data.data = (char *)malloc(data.importsize);
  208.     data.len = data.importsize;
  209.     in.read(data.data, data.importsize);
  210.     data.gc.push_back(data.data);
  211.     return in;
  212. }
  213.  
  214. std::ostream& operator<<(std::ostream& out, const FlashTagSoundStreamBlockMP3 &data)
  215. {
  216.     out << FlashTagHeader(19,data.len+4);
  217.     WRITE_UWORD(data.samplecount);
  218.     WRITE_UWORD(data.delay_seek);
  219.     for(UDWORD i = 0; i < data.len; i++)
  220.     {
  221.         out.put(data.data[i]);
  222.     }
  223.     return out;
  224.     }
  225. std::istream& operator>>(std::istream& in, FlashTagSoundStreamBlockMP3 &data)
  226. {
  227.     READ_UWORD(data.samplecount);
  228.     READ_UWORD(data.delay_seek);
  229.     data.data = (char *)malloc(data.importsize-4);
  230.     data.len = data.importsize-4;
  231.     in.read(data.data, data.importsize-4);
  232.     data.gc.push_back(data.data);
  233.     return in;
  234. }
  235.