/[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 3475 by schoenebeck, Wed Feb 20 17:06:11 2019 UTC revision 3478 by schoenebeck, Thu Feb 21 20:10:08 2019 UTC
# Line 412  namespace { Line 412  namespace {
412    
413          pCk3gix = waveList->GetSubChunk(CHUNK_ID_3GIX);          pCk3gix = waveList->GetSubChunk(CHUNK_ID_3GIX);
414          if (pCk3gix) {          if (pCk3gix) {
415                pCk3gix->SetPos(0);
416    
417              uint16_t iSampleGroup = pCk3gix->ReadInt16();              uint16_t iSampleGroup = pCk3gix->ReadInt16();
418              pGroup = pFile->GetGroup(iSampleGroup);              pGroup = pFile->GetGroup(iSampleGroup);
419          } else { // '3gix' chunk missing          } else { // '3gix' chunk missing
# Line 421  namespace { Line 423  namespace {
423    
424          pCkSmpl = waveList->GetSubChunk(CHUNK_ID_SMPL);          pCkSmpl = waveList->GetSubChunk(CHUNK_ID_SMPL);
425          if (pCkSmpl) {          if (pCkSmpl) {
426                pCkSmpl->SetPos(0);
427    
428              Manufacturer  = pCkSmpl->ReadInt32();              Manufacturer  = pCkSmpl->ReadInt32();
429              Product       = pCkSmpl->ReadInt32();              Product       = pCkSmpl->ReadInt32();
430              SamplePeriod  = pCkSmpl->ReadInt32();              SamplePeriod  = pCkSmpl->ReadInt32();
# Line 467  namespace { Line 471  namespace {
471          Dithered          = false;          Dithered          = false;
472          TruncatedBits     = 0;          TruncatedBits     = 0;
473          if (Compressed) {          if (Compressed) {
474                ewav->SetPos(0);
475    
476              uint32_t version = ewav->ReadInt32();              uint32_t version = ewav->ReadInt32();
477              if (version > 2 && BitDepth == 24) {              if (version > 2 && BitDepth == 24) {
478                  Dithered = ewav->ReadInt32();                  Dithered = ewav->ReadInt32();
# Line 1500  namespace { Line 1506  namespace {
1506    
1507          RIFF::Chunk* _3ewa = _3ewl->GetSubChunk(CHUNK_ID_3EWA);          RIFF::Chunk* _3ewa = _3ewl->GetSubChunk(CHUNK_ID_3EWA);
1508          if (_3ewa) { // if '3ewa' chunk exists          if (_3ewa) { // if '3ewa' chunk exists
1509                _3ewa->SetPos(0);
1510    
1511              _3ewa->ReadInt32(); // unknown, always == chunk size ?              _3ewa->ReadInt32(); // unknown, always == chunk size ?
1512              LFO3Frequency = (double) GIG_EXP_DECODE(_3ewa->ReadInt32());              LFO3Frequency = (double) GIG_EXP_DECODE(_3ewa->ReadInt32());
1513              EG3Attack     = (double) GIG_EXP_DECODE(_3ewa->ReadInt32());              EG3Attack     = (double) GIG_EXP_DECODE(_3ewa->ReadInt32());
# Line 1735  namespace { Line 1743  namespace {
1743          // chunk for own format extensions, these will *NOT* work with Gigasampler/GigaStudio !          // chunk for own format extensions, these will *NOT* work with Gigasampler/GigaStudio !
1744          RIFF::Chunk* lsde = _3ewl->GetSubChunk(CHUNK_ID_LSDE);          RIFF::Chunk* lsde = _3ewl->GetSubChunk(CHUNK_ID_LSDE);
1745          if (lsde) { // format extension for EG behavior options          if (lsde) { // format extension for EG behavior options
1746                lsde->SetPos(0);
1747    
1748              eg_opt_t* pEGOpts[2] = { &EG1Options, &EG2Options };              eg_opt_t* pEGOpts[2] = { &EG1Options, &EG2Options };
1749              for (int i = 0; i < 2; ++i) { // NOTE: we reserved a 3rd byte for a potential future EG3 option              for (int i = 0; i < 2; ++i) { // NOTE: we reserved a 3rd byte for a potential future EG3 option
1750                  unsigned char byte = lsde->ReadUint8();                  unsigned char byte = lsde->ReadUint8();
# Line 3236  namespace { Line 3246  namespace {
3246    
3247          RIFF::Chunk* _3lnk = rgnList->GetSubChunk(CHUNK_ID_3LNK);          RIFF::Chunk* _3lnk = rgnList->GetSubChunk(CHUNK_ID_3LNK);
3248          if (_3lnk) {          if (_3lnk) {
3249                _3lnk->SetPos(0);
3250    
3251              DimensionRegions = _3lnk->ReadUint32();              DimensionRegions = _3lnk->ReadUint32();
3252              for (int i = 0; i < dimensionBits; i++) {              for (int i = 0; i < dimensionBits; i++) {
3253                  dimension_t dimension = static_cast<dimension_t>(_3lnk->ReadUint8());                  dimension_t dimension = static_cast<dimension_t>(_3lnk->ReadUint8());
# Line 3795  namespace { Line 3807  namespace {
3807          }          }
3808    
3809          // delete temporary region          // delete temporary region
3810            tempRgn->DeleteChunks();
3811          delete tempRgn;          delete tempRgn;
3812    
3813          UpdateVelocityTable();          UpdateVelocityTable();
# Line 3934  namespace { Line 3947  namespace {
3947          }          }
3948    
3949          // delete temporary region          // delete temporary region
3950            tempRgn->DeleteChunks();
3951          delete tempRgn;          delete tempRgn;
3952    
3953          UpdateVelocityTable();          UpdateVelocityTable();
# Line 4412  namespace { Line 4426  namespace {
4426          pGroup = group;          pGroup = group;
4427          pChunk = ckScri;          pChunk = ckScri;
4428          if (ckScri) { // object is loaded from file ...          if (ckScri) { // object is loaded from file ...
4429                ckScri->SetPos(0);
4430    
4431              // read header              // read header
4432              uint32_t headerSize = ckScri->ReadUint32();              uint32_t headerSize = ckScri->ReadUint32();
4433              Compression = (Compression_t) ckScri->ReadUint32();              Compression = (Compression_t) ckScri->ReadUint32();
# Line 4464  namespace { Line 4480  namespace {
4480          memcpy(&data[0], &text[0], text.size());          memcpy(&data[0], &text[0], text.size());
4481      }      }
4482    
4483        /** @brief Remove all RIFF chunks associated with this Script object.
4484         *
4485         * At the moment Script::DeleteChunks() does nothing. It is
4486         * recommended to call this method explicitly though from deriving classes's
4487         * own overridden implementation of this method to avoid potential future
4488         * compatiblity issues.
4489         *
4490         * See DLS::Storage::DeleteChunks() for details.
4491         */
4492        void Script::DeleteChunks() {
4493        }
4494    
4495      /**      /**
4496       * Apply this script to the respective RIFF chunks. You have to call       * Apply this script to the respective RIFF chunks. You have to call
4497       * File::Save() to make changes persistent.       * File::Save() to make changes persistent.
# Line 4579  namespace { Line 4607  namespace {
4607          }          }
4608      }      }
4609    
4610        /** @brief Remove all RIFF chunks associated with this ScriptGroup object.
4611         *
4612         * At the moment ScriptGroup::DeleteChunks() does nothing. It is
4613         * recommended to call this method explicitly though from deriving classes's
4614         * own overridden implementation of this method to avoid potential future
4615         * compatiblity issues.
4616         *
4617         * See DLS::Storage::DeleteChunks() for details.
4618         */
4619        void ScriptGroup::DeleteChunks() {
4620        }
4621    
4622      /**      /**
4623       * Apply this script group to the respective RIFF chunks. You have to call       * Apply this script group to the respective RIFF chunks. You have to call
4624       * File::Save() to make changes persistent.       * File::Save() to make changes persistent.
# Line 4703  namespace { Line 4743  namespace {
4743          if (lart) {          if (lart) {
4744              RIFF::Chunk* _3ewg = lart->GetSubChunk(CHUNK_ID_3EWG);              RIFF::Chunk* _3ewg = lart->GetSubChunk(CHUNK_ID_3EWG);
4745              if (_3ewg) {              if (_3ewg) {
4746                    _3ewg->SetPos(0);
4747    
4748                  EffectSend             = _3ewg->ReadUint16();                  EffectSend             = _3ewg->ReadUint16();
4749                  Attenuation            = _3ewg->ReadInt32();                  Attenuation            = _3ewg->ReadInt32();
4750                  FineTune               = _3ewg->ReadInt16();                  FineTune               = _3ewg->ReadInt16();
# Line 4762  namespace { Line 4804  namespace {
4804          if (lst3LS) {          if (lst3LS) {
4805              RIFF::Chunk* ckSCSL = lst3LS->GetSubChunk(CHUNK_ID_SCSL);              RIFF::Chunk* ckSCSL = lst3LS->GetSubChunk(CHUNK_ID_SCSL);
4806              if (ckSCSL) {              if (ckSCSL) {
4807                    ckSCSL->SetPos(0);
4808    
4809                  int headerSize = ckSCSL->ReadUint32();                  int headerSize = ckSCSL->ReadUint32();
4810                  int slotCount  = ckSCSL->ReadUint32();                  int slotCount  = ckSCSL->ReadUint32();
4811                  if (slotCount) {                  if (slotCount) {
# Line 5392  namespace { Line 5436  namespace {
5436          ::LoadString(pNameChunk, Name);          ::LoadString(pNameChunk, Name);
5437      }      }
5438    
5439        /** @brief Destructor.
5440         *
5441         * Currently this destructor implementation does nothing.
5442         */
5443      Group::~Group() {      Group::~Group() {
5444          // remove the chunk associated with this group (if any)      }
5445          if (pNameChunk) pNameChunk->GetParent()->DeleteSubChunk(pNameChunk);  
5446        /** @brief Remove all RIFF chunks associated with this Group object.
5447         *
5448         * See DLS::Storage::DeleteChunks() for details.
5449         */
5450        void Group::DeleteChunks() {
5451            // handle own RIFF chunks
5452            if (pNameChunk) {
5453                pNameChunk->GetParent()->DeleteSubChunk(pNameChunk);
5454                pNameChunk = NULL;
5455            }
5456      }      }
5457    
5458      /** @brief Update chunks with current group settings.      /** @brief Update chunks with current group settings.
# Line 5665  namespace { Line 5723  namespace {
5723          if (iter == pSamples->end()) throw gig::Exception("Could not delete sample, could not find given sample");          if (iter == pSamples->end()) throw gig::Exception("Could not delete sample, could not find given sample");
5724          if (SamplesIterator != pSamples->end() && *SamplesIterator == pSample) ++SamplesIterator; // avoid iterator invalidation          if (SamplesIterator != pSamples->end() && *SamplesIterator == pSample) ++SamplesIterator; // avoid iterator invalidation
5725          pSamples->erase(iter);          pSamples->erase(iter);
5726            pSample->DeleteChunks();
5727          delete pSample;          delete pSample;
5728    
5729          SampleList::iterator tmp = SamplesIterator;          SampleList::iterator tmp = SamplesIterator;
# Line 5776  namespace { Line 5835  namespace {
5835              RIFF::File* file = poolFiles[i];              RIFF::File* file = poolFiles[i];
5836              RIFF::List* wvpl = file->GetSubList(LIST_TYPE_WVPL);              RIFF::List* wvpl = file->GetSubList(LIST_TYPE_WVPL);
5837              if (wvpl) {              if (wvpl) {
5838                  file_offset_t wvplFileOffset = wvpl->GetFilePos();                  file_offset_t wvplFileOffset = wvpl->GetFilePos() -
5839                                                   wvpl->GetPos(); // should be zero, but just to be sure
5840                  RIFF::List* wave = wvpl->GetFirstSubList();                  RIFF::List* wave = wvpl->GetFirstSubList();
5841                  while (wave) {                  while (wave) {
5842                      if (wave->GetListType() == LIST_TYPE_WAVE) {                      if (wave->GetListType() == LIST_TYPE_WAVE) {
# Line 5999  namespace { Line 6059  namespace {
6059          InstrumentList::iterator iter = find(pInstruments->begin(), pInstruments->end(), (DLS::Instrument*) pInstrument);          InstrumentList::iterator iter = find(pInstruments->begin(), pInstruments->end(), (DLS::Instrument*) pInstrument);
6060          if (iter == pInstruments->end()) throw gig::Exception("Could not delete instrument, could not find given instrument");          if (iter == pInstruments->end()) throw gig::Exception("Could not delete instrument, could not find given instrument");
6061          pInstruments->erase(iter);          pInstruments->erase(iter);
6062            pInstrument->DeleteChunks();
6063          delete pInstrument;          delete pInstrument;
6064      }      }
6065    
# Line 6258  namespace { Line 6319  namespace {
6319          }          }
6320          // now delete this group object          // now delete this group object
6321          pGroups->erase(iter);          pGroups->erase(iter);
6322            pGroup->DeleteChunks();
6323          delete pGroup;          delete pGroup;
6324      }      }
6325    
# Line 6279  namespace { Line 6341  namespace {
6341          // move all members of this group to another group          // move all members of this group to another group
6342          pGroup->MoveAll();          pGroup->MoveAll();
6343          pGroups->erase(iter);          pGroups->erase(iter);
6344            pGroup->DeleteChunks();
6345          delete pGroup;          delete pGroup;
6346      }      }
6347    
# Line 6378  namespace { Line 6441  namespace {
6441              pScriptGroup->DeleteScript(pScriptGroup->GetScript(i));              pScriptGroup->DeleteScript(pScriptGroup->GetScript(i));
6442          if (pScriptGroup->pList)          if (pScriptGroup->pList)
6443              pScriptGroup->pList->GetParent()->DeleteSubChunk(pScriptGroup->pList);              pScriptGroup->pList->GetParent()->DeleteSubChunk(pScriptGroup->pList);
6444            pScriptGroup->DeleteChunks();
6445          delete pScriptGroup;          delete pScriptGroup;
6446      }      }
6447    

Legend:
Removed from v.3475  
changed lines
  Added in v.3478

  ViewVC Help
Powered by ViewVC