/[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 1381 by schoenebeck, Thu Oct 4 18:57:10 2007 UTC revision 1524 by schoenebeck, Sun Nov 25 17:29:37 2007 UTC
# Line 366  namespace { Line 366  namespace {
366       *                         is located, 0 otherwise       *                         is located, 0 otherwise
367       */       */
368      Sample::Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset, unsigned long fileNo) : DLS::Sample((DLS::File*) pFile, waveList, WavePoolOffset) {      Sample::Sample(File* pFile, RIFF::List* waveList, unsigned long WavePoolOffset, unsigned long fileNo) : DLS::Sample((DLS::File*) pFile, waveList, WavePoolOffset) {
369          static const DLS::Info::FixedStringLength fixedStringLengths[] = {          static const DLS::Info::string_length_t fixedStringLengths[] = {
370              { CHUNK_ID_INAM, 64 },              { CHUNK_ID_INAM, 64 },
371              { 0, 0 }              { 0, 0 }
372          };          };
373          pInfo->FixedStringLengths = fixedStringLengths;          pInfo->SetFixedStringLengths(fixedStringLengths);
374          Instances++;          Instances++;
375          FileNo = fileNo;          FileNo = fileNo;
376    
# 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 2924  namespace { Line 2928  namespace {
2928  // *  // *
2929    
2930      Instrument::Instrument(File* pFile, RIFF::List* insList, progress_t* pProgress) : DLS::Instrument((DLS::File*)pFile, insList) {      Instrument::Instrument(File* pFile, RIFF::List* insList, progress_t* pProgress) : DLS::Instrument((DLS::File*)pFile, insList) {
2931          static const DLS::Info::FixedStringLength fixedStringLengths[] = {          static const DLS::Info::string_length_t fixedStringLengths[] = {
2932              { CHUNK_ID_INAM, 64 },              { CHUNK_ID_INAM, 64 },
2933              { CHUNK_ID_ISFT, 12 },              { CHUNK_ID_ISFT, 12 },
2934              { 0, 0 }              { 0, 0 }
2935          };          };
2936          pInfo->FixedStringLengths = fixedStringLengths;          pInfo->SetFixedStringLengths(fixedStringLengths);
2937    
2938          // Initialization          // Initialization
2939          for (int i = 0; i < 128; i++) RegionKeyTable[i] = NULL;          for (int i = 0; i < 128; i++) RegionKeyTable[i] = NULL;
# 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 3227  namespace { Line 3233  namespace {
3233  // *************** File ***************  // *************** File ***************
3234  // *  // *
3235    
3236      // File version 2.0, 1998-06-28      /// Reflects Gigasampler file format version 2.0 (1998-06-28).
3237      const DLS::version_t File::VERSION_2 = {      const DLS::version_t File::VERSION_2 = {
3238          0, 2, 19980628 & 0xffff, 19980628 >> 16          0, 2, 19980628 & 0xffff, 19980628 >> 16
3239      };      };
3240    
3241      // File version 3.0, 2003-03-31      /// Reflects Gigasampler file format version 3.0 (2003-03-31).
3242      const DLS::version_t File::VERSION_3 = {      const DLS::version_t File::VERSION_3 = {
3243          0, 3, 20030331 & 0xffff, 20030331 >> 16          0, 3, 20030331 & 0xffff, 20030331 >> 16
3244      };      };
3245    
3246      const DLS::Info::FixedStringLength File::FixedStringLengths[] = {      static const DLS::Info::string_length_t _FileFixedStringLengths[] = {
3247          { CHUNK_ID_IARL, 256 },          { CHUNK_ID_IARL, 256 },
3248          { CHUNK_ID_IART, 128 },          { CHUNK_ID_IART, 128 },
3249          { CHUNK_ID_ICMS, 128 },          { CHUNK_ID_ICMS, 128 },
# 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->FixedStringLengths = FixedStringLengths;          pInfo->SetFixedStringLengths(_FileFixedStringLengths);
3272          pInfo->ArchivalLocation = String(256, ' ');          pInfo->ArchivalLocation = String(256, ' ');
3273    
3274          // add some mandatory chunks to get the file chunks in right          // add some mandatory chunks to get the file chunks in right
# 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->FixedStringLengths = FixedStringLengths;          pInfo->SetFixedStringLengths(_FileFixedStringLengths);
3287      }      }
3288    
3289      File::~File() {      File::~File() {
# 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.1381  
changed lines
  Added in v.1524

  ViewVC Help
Powered by ViewVC