/[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 1416 by schoenebeck, Sun Oct 14 12:06:32 2007 UTC revision 1524 by schoenebeck, Sun Nov 25 17:29:37 2007 UTC
# Line 2372  namespace { Line 2372  namespace {
2372    
2373          // Actual Loading          // Actual Loading
2374    
2375            if (!file->GetAutoLoad()) return;
2376    
2377          LoadDimensionRegions(rgnList);          LoadDimensionRegions(rgnList);
2378    
2379          RIFF::Chunk* _3lnk = rgnList->GetSubChunk(CHUNK_ID_3LNK);          RIFF::Chunk* _3lnk = rgnList->GetSubChunk(CHUNK_ID_3LNK);
# Line 2415  namespace { Line 2417  namespace {
2417              else              else
2418                  _3lnk->SetPos(44);                  _3lnk->SetPos(44);
2419    
2420              // load sample references              // load sample references (if auto loading is enabled)
2421              for (uint i = 0; i < DimensionRegions; i++) {              if (file->GetAutoLoad()) {
2422                  uint32_t wavepoolindex = _3lnk->ReadUint32();                  for (uint i = 0; i < DimensionRegions; i++) {
2423                  if (file->pWavePoolTable) pDimensionRegions[i]->pSample = GetSampleFromWavePool(wavepoolindex);                      uint32_t wavepoolindex = _3lnk->ReadUint32();
2424                        if (file->pWavePoolTable) pDimensionRegions[i]->pSample = GetSampleFromWavePool(wavepoolindex);
2425                    }
2426                    GetSample(); // load global region sample reference
2427              }              }
             GetSample(); // load global region sample reference  
2428          } else {          } else {
2429              DimensionRegions = 0;              DimensionRegions = 0;
2430              for (int i = 0 ; i < 8 ; i++) {              for (int i = 0 ; i < 8 ; i++) {
# Line 2957  namespace { Line 2961  namespace {
2961              }              }
2962          }          }
2963    
2964          if (!pRegions) pRegions = new RegionList;          if (pFile->GetAutoLoad()) {
2965          RIFF::List* lrgn = insList->GetSubList(LIST_TYPE_LRGN);              if (!pRegions) pRegions = new RegionList;
2966          if (lrgn) {              RIFF::List* lrgn = insList->GetSubList(LIST_TYPE_LRGN);
2967              RIFF::List* rgn = lrgn->GetFirstSubList();              if (lrgn) {
2968              while (rgn) {                  RIFF::List* rgn = lrgn->GetFirstSubList();
2969                  if (rgn->GetListType() == LIST_TYPE_RGN) {                  while (rgn) {
2970                      __notify_progress(pProgress, (float) pRegions->size() / (float) Regions);                      if (rgn->GetListType() == LIST_TYPE_RGN) {
2971                      pRegions->push_back(new Region(this, rgn));                          __notify_progress(pProgress, (float) pRegions->size() / (float) Regions);
2972                            pRegions->push_back(new Region(this, rgn));
2973                        }
2974                        rgn = lrgn->GetNextSubList();
2975                  }                  }
2976                  rgn = lrgn->GetNextSubList();                  // Creating Region Key Table for fast lookup
2977                    UpdateRegionKeyTable();
2978              }              }
             // Creating Region Key Table for fast lookup  
             UpdateRegionKeyTable();  
2979          }          }
2980    
2981          __notify_progress(pProgress, 1.0f); // notify done          __notify_progress(pProgress, 1.0f); // notify done
# Line 3259  namespace { Line 3265  namespace {
3265      };      };
3266    
3267      File::File() : DLS::File() {      File::File() : DLS::File() {
3268            bAutoLoad = true;
3269          *pVersion = VERSION_3;          *pVersion = VERSION_3;
3270          pGroups = NULL;          pGroups = NULL;
3271          pInfo->SetFixedStringLengths(_FileFixedStringLengths);          pInfo->SetFixedStringLengths(_FileFixedStringLengths);
# Line 3274  namespace { Line 3281  namespace {
3281      }      }
3282    
3283      File::File(RIFF::File* pRIFF) : DLS::File(pRIFF) {      File::File(RIFF::File* pRIFF) : DLS::File(pRIFF) {
3284            bAutoLoad = true;
3285          pGroups = NULL;          pGroups = NULL;
3286          pInfo->SetFixedStringLengths(_FileFixedStringLengths);          pInfo->SetFixedStringLengths(_FileFixedStringLengths);
3287      }      }
# Line 3447  namespace { Line 3455  namespace {
3455              progress_t subprogress;              progress_t subprogress;
3456              __divide_progress(pProgress, &subprogress, 3.0f, 0.0f); // randomly schedule 33% for this subtask              __divide_progress(pProgress, &subprogress, 3.0f, 0.0f); // randomly schedule 33% for this subtask
3457              __notify_progress(&subprogress, 0.0f);              __notify_progress(&subprogress, 0.0f);
3458              GetFirstSample(&subprogress); // now force all samples to be loaded              if (GetAutoLoad())
3459                    GetFirstSample(&subprogress); // now force all samples to be loaded
3460              __notify_progress(&subprogress, 1.0f);              __notify_progress(&subprogress, 1.0f);
3461    
3462              // instrument loading subtask              // instrument loading subtask
# Line 3854  namespace { Line 3863  namespace {
3863          }          }
3864      }      }
3865    
3866        /**
3867         * Enable / disable automatic loading. By default this properyt is
3868         * enabled and all informations are loaded automatically. However
3869         * loading all Regions, DimensionRegions and especially samples might
3870         * take a long time for large .gig files, and sometimes one might only
3871         * be interested in retrieving very superficial informations like the
3872         * amount of instruments and their names. In this case one might disable
3873         * automatic loading to avoid very slow response times.
3874         *
3875         * @e CAUTION: by disabling this property many pointers (i.e. sample
3876         * references) and informations will have invalid or even undefined
3877         * data! This feature is currently only intended for retrieving very
3878         * superficial informations in a very fast way. Don't use it to retrieve
3879         * details like synthesis informations or even to modify .gig files!
3880         */
3881        void File::SetAutoLoad(bool b) {
3882            bAutoLoad = b;
3883        }
3884    
3885        /**
3886         * Returns whether automatic loading is enabled.
3887         * @see SetAutoLoad()
3888         */
3889        bool File::GetAutoLoad() {
3890            return bAutoLoad;
3891        }
3892    
3893    
3894    
3895  // *************** Exception ***************  // *************** Exception ***************

Legend:
Removed from v.1416  
changed lines
  Added in v.1524

  ViewVC Help
Powered by ViewVC