/[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 3140 by schoenebeck, Wed May 3 16:19:53 2017 UTC revision 3348 by schoenebeck, Tue Oct 3 15:05:45 2017 UTC
# Line 341  namespace { Line 341  namespace {
341    
342    
343    
344    // *************** eg_opt_t ***************
345    // *
346    
347        eg_opt_t::eg_opt_t() {
348            AttackCancel     = true;
349            AttackHoldCancel = true;
350            Decay1Cancel     = true;
351            Decay2Cancel     = true;
352            ReleaseCancel    = true;
353        }
354    
355        void eg_opt_t::serialize(Serialization::Archive* archive) {
356            SRLZ(AttackCancel);
357            SRLZ(AttackHoldCancel);
358            SRLZ(Decay1Cancel);
359            SRLZ(Decay2Cancel);
360            SRLZ(ReleaseCancel);
361        }
362    
363    
364    
365  // *************** Sample ***************  // *************** Sample ***************
366  // *  // *
367    
# Line 1711  namespace { Line 1732  namespace {
1732              VCFType                         = vcf_type_lowpass;              VCFType                         = vcf_type_lowpass;
1733              memset(DimensionUpperLimits, 127, 8);              memset(DimensionUpperLimits, 127, 8);
1734          }          }
1735            // format extension for EG behavior options, these will *NOT* work with
1736            // Gigasampler/GigaStudio !
1737            RIFF::Chunk* lsde = _3ewl->GetSubChunk(CHUNK_ID_LSDE);
1738            if (lsde) {
1739                eg_opt_t* pEGOpts[2] = { &EG1Options, &EG2Options };
1740                for (int i = 0; i < 2; ++i) {
1741                    unsigned char byte = lsde->ReadUint8();
1742                    pEGOpts[i]->AttackCancel     = byte & 1;
1743                    pEGOpts[i]->AttackHoldCancel = byte & (1 << 1);
1744                    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,
1751                                                       VelocityResponseDepth,                                                       VelocityResponseDepth,
# Line 1817  namespace { Line 1852  namespace {
1852      }      }
1853    
1854      void DimensionRegion::serialize(Serialization::Archive* archive) {      void DimensionRegion::serialize(Serialization::Archive* archive) {
1855            // in case this class will become backward incompatible one day,
1856            // then set a version and minimum version for this class like:
1857            //archive->setVersion(*this, 2);
1858            //archive->setMinVersion(*this, 1);
1859    
1860          SRLZ(VelocityUpperLimit);          SRLZ(VelocityUpperLimit);
1861          SRLZ(EG1PreAttack);          SRLZ(EG1PreAttack);
1862          SRLZ(EG1Attack);          SRLZ(EG1Attack);
# Line 1894  namespace { Line 1934  namespace {
1934          SRLZ(MSDecode);          SRLZ(MSDecode);
1935          //SRLZ(SampleStartOffset);          //SRLZ(SampleStartOffset);
1936          SRLZ(SampleAttenuation);          SRLZ(SampleAttenuation);
1937            SRLZ(EG1Options);
1938            SRLZ(EG2Options);
1939    
1940          // derived attributes from DLS::Sampler          // derived attributes from DLS::Sampler
1941          SRLZ(FineTune);          SRLZ(FineTune);
# Line 2200  namespace { Line 2242  namespace {
2242          if (chunksize >= 148) {          if (chunksize >= 148) {
2243              memcpy(&pData[140], DimensionUpperLimits, 8);              memcpy(&pData[140], DimensionUpperLimits, 8);
2244          }          }
2245    
2246            // format extension for EG behavior options, these will *NOT* work with
2247            // Gigasampler/GigaStudio !
2248            RIFF::Chunk* lsde = pParentList->GetSubChunk(CHUNK_ID_LSDE);
2249            if (!lsde) {
2250                // only add this "LSDE" chunk if the EG options do not match the
2251                // default EG behavior
2252                eg_opt_t defaultOpt;
2253                if (memcmp(&EG1Options, &defaultOpt, sizeof(eg_opt_t)) ||
2254                    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
2258                    pParentList->MoveSubChunk(lsde, (RIFF::Chunk*)NULL);
2259                }
2260            }
2261            if (lsde) {
2262                unsigned char* pData = (unsigned char*) lsde->LoadChunkData();
2263                eg_opt_t* pEGOpts[2] = { &EG1Options, &EG2Options };
2264                for (int i = 0; i < 2; ++i) {
2265                    pData[i] =
2266                        (pEGOpts[i]->AttackCancel     ? 1 : 0) |
2267                        (pEGOpts[i]->AttackHoldCancel ? (1<<1) : 0) |
2268                        (pEGOpts[i]->Decay1Cancel     ? (1<<2) : 0) |
2269                        (pEGOpts[i]->Decay2Cancel     ? (1<<3) : 0) |
2270                        (pEGOpts[i]->ReleaseCancel    ? (1<<4) : 0);
2271                }
2272            }
2273      }      }
2274    
2275      double* DimensionRegion::GetReleaseVelocityTable(curve_type_t releaseVelocityResponseCurve, uint8_t releaseVelocityResponseDepth) {      double* DimensionRegion::GetReleaseVelocityTable(curve_type_t releaseVelocityResponseCurve, uint8_t releaseVelocityResponseDepth) {
# Line 2614  namespace { Line 2684  namespace {
2684    
2685              // unknown controller type              // unknown controller type
2686              default:              default:
2687                  throw gig::Exception("Unknown leverage controller type.");                  decodedcontroller.type = leverage_ctrl_t::type_none;
2688                    decodedcontroller.controller_number = 0;
2689                    printf("Warning: Unknown leverage controller type (0x%x).\n", EncodedController);
2690                    break;
2691          }          }
2692          return decodedcontroller;          return decodedcontroller;
2693      }      }
# Line 3161  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 4668  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          }          }
# Line 6468  namespace { Line 6544  namespace {
6544  // *************** Exception ***************  // *************** Exception ***************
6545  // *  // *
6546    
6547      Exception::Exception(String Message) : DLS::Exception(Message) {      Exception::Exception() : DLS::Exception() {
6548        }
6549    
6550        Exception::Exception(String format, ...) : DLS::Exception() {
6551            va_list arg;
6552            va_start(arg, format);
6553            Message = assemble(format, arg);
6554            va_end(arg);
6555        }
6556    
6557        Exception::Exception(String format, va_list arg) : DLS::Exception() {
6558            Message = assemble(format, arg);
6559      }      }
6560    
6561      void Exception::PrintMessage() {      void Exception::PrintMessage() {

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

  ViewVC Help
Powered by ViewVC