/[svn]/linuxsampler/trunk/src/engines/sfz/sfz.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/sfz/sfz.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2176 by persson, Sun May 1 15:19:38 2011 UTC revision 2216 by iliev, Mon Jul 25 17:21:16 2011 UTC
# Line 37  Line 37 
37  namespace sfz  namespace sfz
38  {  {
39    
40      Sample* SampleManager::FindSample(std::string samplePath) {      Sample* SampleManager::FindSample(std::string samplePath, int offset) {
41          std::map<Sample*, std::set<Region*> >::iterator it = sampleMap.begin();          std::map<Sample*, std::set<Region*> >::iterator it = sampleMap.begin();
42          for (; it != sampleMap.end(); it++) {          for (; it != sampleMap.end(); it++) {
43              if (it->first->GetFile() == samplePath) return it->first;              if (it->first->GetFile() == samplePath) {
44                    /* Because the start of the sample is cached in RAM we treat
45                     * same sample with different offset as different samples
46                     * // TODO: Ignore offset when the whole sample is cached in RAM?
47                     */
48                    int maxOffset = it->first->MaxOffset;
49                    if(it->first->Offset == offset || (it->first->Offset < maxOffset && offset < maxOffset)) {
50                        return it->first;
51                    }
52                }
53          }          }
54    
55          return NULL;          return NULL;
# Line 90  namespace sfz Line 99  namespace sfz
99      Sample* Region::GetSample(bool create)      Sample* Region::GetSample(bool create)
100      {      {
101          if(pSample == NULL && create) {          if(pSample == NULL && create) {
102              Sample* sf = GetInstrument()->GetSampleManager()->FindSample(sample);              int i = offset ? *offset : 0;
103                Sample* sf = GetInstrument()->GetSampleManager()->FindSample(sample, i);
104              if (sf != NULL) pSample = sf; // Reuse already created sample              if (sf != NULL) pSample = sf; // Reuse already created sample
105              else pSample = new Sample(sample);              else pSample = new Sample(sample, false, i);
106              GetInstrument()->GetSampleManager()->AddSampleConsumer(pSample, this);              GetInstrument()->GetSampleManager()->AddSampleConsumer(pSample, this);
107          }          }
108          return pSample;          return pSample;
# Line 1035  namespace sfz Line 1045  namespace sfz
1045          else if ("loopstart" == key) pCurDef->loop_start = ToInt(value); // nonstandard          else if ("loopstart" == key) pCurDef->loop_start = ToInt(value); // nonstandard
1046          else if ("loop_end" == key) pCurDef->loop_end = ToInt(value);          else if ("loop_end" == key) pCurDef->loop_end = ToInt(value);
1047          else if ("loopend" == key) pCurDef->loop_end = ToInt(value); // nonstandard          else if ("loopend" == key) pCurDef->loop_end = ToInt(value); // nonstandard
1048            else if ("offset" == key) pCurDef->offset = ToInt(value);
1049          else if ("sync_beats" == key) pCurDef->sync_beats = ToInt(value);          else if ("sync_beats" == key) pCurDef->sync_beats = ToInt(value);
1050          else if ("sync_offset" == key) pCurDef->sync_offset = ToInt(value);          else if ("sync_offset" == key) pCurDef->sync_offset = ToInt(value);
1051    

Legend:
Removed from v.2176  
changed lines
  Added in v.2216

  ViewVC Help
Powered by ViewVC