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

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

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

revision 1316 by schoenebeck, Fri Aug 31 19:09:13 2007 UTC revision 1335 by schoenebeck, Sun Sep 9 21:22:58 2007 UTC
# Line 1573  namespace { Line 1573  namespace {
1573       * It will be called automatically when File::Save() was called.       * It will be called automatically when File::Save() was called.
1574       */       */
1575      void DimensionRegion::UpdateChunks() {      void DimensionRegion::UpdateChunks() {
         // check if wsmp is going to be created by  
         // DLS::Sampler::UpdateChunks  
         bool wsmp_created = !pParentList->GetSubChunk(CHUNK_ID_WSMP);  
   
1576          // first update base class's chunk          // first update base class's chunk
1577          DLS::Sampler::UpdateChunks();          DLS::Sampler::UpdateChunks();
1578    
# Line 1589  namespace { Line 1585  namespace {
1585    
1586          // make sure '3ewa' chunk exists          // make sure '3ewa' chunk exists
1587          RIFF::Chunk* _3ewa = pParentList->GetSubChunk(CHUNK_ID_3EWA);          RIFF::Chunk* _3ewa = pParentList->GetSubChunk(CHUNK_ID_3EWA);
1588          if (!_3ewa)  _3ewa = pParentList->AddSubChunk(CHUNK_ID_3EWA, 140);          if (!_3ewa) {
1589          else if (wsmp_created) {              File* pFile = (File*) GetParent()->GetParent()->GetParent();
1590              // make sure the chunk order is: wsmp, 3ewa              bool version3 = pFile->pVersion && pFile->pVersion->major == 3;
1591              pParentList->MoveSubChunk(_3ewa, 0);              _3ewa = pParentList->AddSubChunk(CHUNK_ID_3EWA, version3 ? 148 : 140);
1592          }          }
1593          pData = (uint8_t*) _3ewa->LoadChunkData();          pData = (uint8_t*) _3ewa->LoadChunkData();
1594    
# Line 2302  namespace { Line 2298  namespace {
2298          // first update base class's chunks          // first update base class's chunks
2299          DLS::Region::UpdateChunks();          DLS::Region::UpdateChunks();
2300    
         File* pFile = (File*) GetParent()->GetParent();  
         bool version3 = pFile->pVersion && pFile->pVersion->major == 3;  
   
2301          // update dimension region's chunks          // update dimension region's chunks
2302          for (int i = 0; i < DimensionRegions; i++) {          for (int i = 0; i < DimensionRegions; i++) {
2303              DimensionRegion* d = pDimensionRegions[i];              pDimensionRegions[i]->UpdateChunks();
   
             // make sure '3ewa' chunk exists (we need to this before  
             // calling DimensionRegion::UpdateChunks, as  
             // DimensionRegion doesn't know which file version it is)  
             RIFF::Chunk* _3ewa = d->pParentList->GetSubChunk(CHUNK_ID_3EWA);  
             if (!_3ewa) d->pParentList->AddSubChunk(CHUNK_ID_3EWA, version3 ? 148 : 140);  
   
             d->UpdateChunks();  
2304          }          }
2305    
2306            File* pFile = (File*) GetParent()->GetParent();
2307            bool version3 = pFile->pVersion && pFile->pVersion->major == 3;
2308          const int iMaxDimensions =  version3 ? 8 : 5;          const int iMaxDimensions =  version3 ? 8 : 5;
2309          const int iMaxDimensionRegions = version3 ? 256 : 32;          const int iMaxDimensionRegions = version3 ? 256 : 32;
2310    
# Line 2382  namespace { Line 2369  namespace {
2369          }          }
2370      }      }
2371    
2372        void Region::SetKeyRange(uint16_t Low, uint16_t High) {
2373            // update KeyRange struct and make sure regions are in correct order
2374            DLS::Region::SetKeyRange(Low, High);
2375            // update Region key table for fast lookup
2376            ((gig::Instrument*)GetParent())->UpdateRegionKeyTable();
2377        }
2378    
2379      void Region::UpdateVelocityTable() {      void Region::UpdateVelocityTable() {
2380          // get velocity dimension's index          // get velocity dimension's index
2381          int veldim = -1;          int veldim = -1;
# Line 2821  namespace { Line 2815  namespace {
2815      }      }
2816    
2817      void Instrument::UpdateRegionKeyTable() {      void Instrument::UpdateRegionKeyTable() {
2818            for (int i = 0; i < 128; i++) RegionKeyTable[i] = NULL;
2819          RegionList::iterator iter = pRegions->begin();          RegionList::iterator iter = pRegions->begin();
2820          RegionList::iterator end  = pRegions->end();          RegionList::iterator end  = pRegions->end();
2821          for (; iter != end; ++iter) {          for (; iter != end; ++iter) {
# Line 2888  namespace { Line 2883  namespace {
2883       *             there is no Region defined for the given \a Key       *             there is no Region defined for the given \a Key
2884       */       */
2885      Region* Instrument::GetRegion(unsigned int Key) {      Region* Instrument::GetRegion(unsigned int Key) {
2886          if (!pRegions || !pRegions->size() || Key > 127) return NULL;          if (!pRegions || pRegions->empty() || Key > 127) return NULL;
2887          return RegionKeyTable[Key];          return RegionKeyTable[Key];
2888    
2889          /*for (int i = 0; i < Regions; i++) {          /*for (int i = 0; i < Regions; i++) {

Legend:
Removed from v.1316  
changed lines
  Added in v.1335

  ViewVC Help
Powered by ViewVC