/[svn]/libgig/trunk/src/DLS.cpp
ViewVC logotype

Diff of /libgig/trunk/src/DLS.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 901 by persson, Fri Feb 10 19:23:59 2006 UTC revision 902 by persson, Sat Jul 22 14:22:01 2006 UTC
# Line 1043  namespace DLS { Line 1043  namespace DLS {
1043          Instruments = colh->ReadUint32();          Instruments = colh->ReadUint32();
1044    
1045          RIFF::Chunk* ptbl = pRIFF->GetSubChunk(CHUNK_ID_PTBL);          RIFF::Chunk* ptbl = pRIFF->GetSubChunk(CHUNK_ID_PTBL);
1046          if (!ptbl) throw DLS::Exception("Mandatory <ptbl> chunk not found.");          if (!ptbl) { // pool table is missing - this is probably an ".art" file
1047          WavePoolHeaderSize = ptbl->ReadUint32();              WavePoolCount    = 0;
1048          WavePoolCount  = ptbl->ReadUint32();              pWavePoolTable   = NULL;
1049          pWavePoolTable = new uint32_t[WavePoolCount];              pWavePoolTableHi = NULL;
1050          pWavePoolTableHi = new uint32_t[WavePoolCount];              WavePoolHeaderSize = 8;
1051          ptbl->SetPos(WavePoolHeaderSize);              b64BitWavePoolOffsets = false;
1052            } else {
1053                WavePoolHeaderSize = ptbl->ReadUint32();
1054                WavePoolCount  = ptbl->ReadUint32();
1055                pWavePoolTable = new uint32_t[WavePoolCount];
1056                pWavePoolTableHi = new uint32_t[WavePoolCount];
1057                ptbl->SetPos(WavePoolHeaderSize);
1058    
1059          // Check for 64 bit offsets (used in gig v3 files)              // Check for 64 bit offsets (used in gig v3 files)
1060          b64BitWavePoolOffsets = (ptbl->GetSize() - WavePoolHeaderSize == WavePoolCount * 8);              b64BitWavePoolOffsets = (ptbl->GetSize() - WavePoolHeaderSize == WavePoolCount * 8);
1061          if (b64BitWavePoolOffsets) {              if (b64BitWavePoolOffsets) {
1062              for (int i = 0 ; i < WavePoolCount ; i++) {                  for (int i = 0 ; i < WavePoolCount ; i++) {
1063                  pWavePoolTableHi[i] = ptbl->ReadUint32();                      pWavePoolTableHi[i] = ptbl->ReadUint32();
1064                  pWavePoolTable[i] = ptbl->ReadUint32();                      pWavePoolTable[i] = ptbl->ReadUint32();
1065                  if (pWavePoolTable[i] & 0x80000000)                      if (pWavePoolTable[i] & 0x80000000)
1066                      throw DLS::Exception("Files larger than 2 GB not yet supported");                          throw DLS::Exception("Files larger than 2 GB not yet supported");
1067                    }
1068                } else { // conventional 32 bit offsets
1069                    ptbl->Read(pWavePoolTable, WavePoolCount, sizeof(uint32_t));
1070                    for (int i = 0 ; i < WavePoolCount ; i++) pWavePoolTableHi[i] = 0;
1071              }              }
         } else { // conventional 32 bit offsets  
             ptbl->Read(pWavePoolTable, WavePoolCount, sizeof(uint32_t));  
             for (int i = 0 ; i < WavePoolCount ; i++) pWavePoolTableHi[i] = 0;  
1072          }          }
1073    
1074          pSamples     = NULL;          pSamples     = NULL;

Legend:
Removed from v.901  
changed lines
  Added in v.902

  ViewVC Help
Powered by ViewVC