/[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 3324 by schoenebeck, Fri Jul 21 13:05:39 2017 UTC revision 3348 by schoenebeck, Tue Oct 3 15:05:45 2017 UTC
# Line 1736  namespace { Line 1736  namespace {
1736          // Gigasampler/GigaStudio !          // Gigasampler/GigaStudio !
1737          RIFF::Chunk* lsde = _3ewl->GetSubChunk(CHUNK_ID_LSDE);          RIFF::Chunk* lsde = _3ewl->GetSubChunk(CHUNK_ID_LSDE);
1738          if (lsde) {          if (lsde) {
1739              unsigned char byte = lsde->ReadUint8();              eg_opt_t* pEGOpts[2] = { &EG1Options, &EG2Options };
1740              EGOptions.AttackCancel     = byte & 1;              for (int i = 0; i < 2; ++i) {
1741              EGOptions.AttackHoldCancel = byte & (1 << 1);                  unsigned char byte = lsde->ReadUint8();
1742              EGOptions.Decay1Cancel     = byte & (1 << 2);                  pEGOpts[i]->AttackCancel     = byte & 1;
1743              EGOptions.Decay2Cancel     = byte & (1 << 3);                  pEGOpts[i]->AttackHoldCancel = byte & (1 << 1);
1744              EGOptions.ReleaseCancel    = byte & (1 << 4);                  pEGOpts[i]->Decay1Cancel     = byte & (1 << 2);
1745                    pEGOpts[i]->Decay2Cancel     = byte & (1 << 3);
1746                    pEGOpts[i]->ReleaseCancel    = byte & (1 << 4);
1747                }
1748          }          }
1749    
1750          pVelocityAttenuationTable = GetVelocityTable(VelocityResponseCurve,          pVelocityAttenuationTable = GetVelocityTable(VelocityResponseCurve,
# Line 1931  namespace { Line 1934  namespace {
1934          SRLZ(MSDecode);          SRLZ(MSDecode);
1935          //SRLZ(SampleStartOffset);          //SRLZ(SampleStartOffset);
1936          SRLZ(SampleAttenuation);          SRLZ(SampleAttenuation);
1937          SRLZ(EGOptions);          SRLZ(EG1Options);
1938            SRLZ(EG2Options);
1939    
1940          // derived attributes from DLS::Sampler          // derived attributes from DLS::Sampler
1941          SRLZ(FineTune);          SRLZ(FineTune);
# Line 2246  namespace { Line 2250  namespace {
2250              // only add this "LSDE" chunk if the EG options do not match the              // only add this "LSDE" chunk if the EG options do not match the
2251              // default EG behavior              // default EG behavior
2252              eg_opt_t defaultOpt;              eg_opt_t defaultOpt;
2253              if (memcmp(&EGOptions, &defaultOpt, sizeof(eg_opt_t))) {              if (memcmp(&EG1Options, &defaultOpt, sizeof(eg_opt_t)) ||
2254                  lsde = pParentList->AddSubChunk(CHUNK_ID_LSDE, 1);                  memcmp(&EG2Options, &defaultOpt, sizeof(eg_opt_t)))
2255                {
2256                    lsde = pParentList->AddSubChunk(CHUNK_ID_LSDE, 2);
2257                  // move LSDE chunk to the end of parent list                  // move LSDE chunk to the end of parent list
2258                  pParentList->MoveSubChunk(lsde, (RIFF::Chunk*)NULL);                  pParentList->MoveSubChunk(lsde, (RIFF::Chunk*)NULL);
2259              }              }
2260          }          }
2261          if (lsde) {          if (lsde) {
2262              unsigned char* pByte = (unsigned char*) lsde->LoadChunkData();              unsigned char* pData = (unsigned char*) lsde->LoadChunkData();
2263              *pByte =              eg_opt_t* pEGOpts[2] = { &EG1Options, &EG2Options };
2264                  (EGOptions.AttackCancel     ? 1 : 0) |              for (int i = 0; i < 2; ++i) {
2265                  (EGOptions.AttackHoldCancel ? (1<<1) : 0) |                  pData[i] =
2266                  (EGOptions.Decay1Cancel     ? (1<<2) : 0) |                      (pEGOpts[i]->AttackCancel     ? 1 : 0) |
2267                  (EGOptions.Decay2Cancel     ? (1<<3) : 0) |                      (pEGOpts[i]->AttackHoldCancel ? (1<<1) : 0) |
2268                  (EGOptions.ReleaseCancel    ? (1<<4) : 0);                      (pEGOpts[i]->Decay1Cancel     ? (1<<2) : 0) |
2269                        (pEGOpts[i]->Decay2Cancel     ? (1<<3) : 0) |
2270                        (pEGOpts[i]->ReleaseCancel    ? (1<<4) : 0);
2271                }
2272          }          }
2273      }      }
2274    
# Line 3225  namespace { Line 3234  namespace {
3234              if (file->GetAutoLoad()) {              if (file->GetAutoLoad()) {
3235                  for (uint i = 0; i < DimensionRegions; i++) {                  for (uint i = 0; i < DimensionRegions; i++) {
3236                      uint32_t wavepoolindex = _3lnk->ReadUint32();                      uint32_t wavepoolindex = _3lnk->ReadUint32();
3237                      if (file->pWavePoolTable) pDimensionRegions[i]->pSample = GetSampleFromWavePool(wavepoolindex);                      if (file->pWavePoolTable && pDimensionRegions[i])
3238                            pDimensionRegions[i]->pSample = GetSampleFromWavePool(wavepoolindex);
3239                  }                  }
3240                  GetSample(); // load global region sample reference                  GetSample(); // load global region sample reference
3241              }              }
# Line 4732  namespace { Line 4742  namespace {
4742          RegionList::iterator end  = pRegions->end();          RegionList::iterator end  = pRegions->end();
4743          for (; iter != end; ++iter) {          for (; iter != end; ++iter) {
4744              gig::Region* pRegion = static_cast<gig::Region*>(*iter);              gig::Region* pRegion = static_cast<gig::Region*>(*iter);
4745              for (int iKey = pRegion->KeyRange.low; iKey <= pRegion->KeyRange.high; iKey++) {              const int low  = std::max(int(pRegion->KeyRange.low), 0);
4746                const int high = std::min(int(pRegion->KeyRange.high), 127);
4747                for (int iKey = low; iKey <= high; iKey++) {
4748                  RegionKeyTable[iKey] = pRegion;                  RegionKeyTable[iKey] = pRegion;
4749              }              }
4750          }          }

Legend:
Removed from v.3324  
changed lines
  Added in v.3348

  ViewVC Help
Powered by ViewVC