--- linuxsampler/trunk/src/engines/sfz/sfz.cpp 2011/08/08 18:46:19 2233 +++ linuxsampler/trunk/src/engines/sfz/sfz.cpp 2011/08/09 18:27:58 2234 @@ -51,7 +51,7 @@ return val; } - Sample* SampleManager::FindSample(std::string samplePath, int offset) { + Sample* SampleManager::FindSample(std::string samplePath, uint offset, int end) { std::map >::iterator it = sampleMap.begin(); for (; it != sampleMap.end(); it++) { if (it->first->GetFile() == samplePath) { @@ -59,10 +59,7 @@ * same sample with different offset as different samples * // TODO: Ignore offset when the whole sample is cached in RAM? */ - int maxOffset = it->first->MaxOffset; - if(it->first->Offset == offset || (it->first->Offset < maxOffset && offset < maxOffset)) { - return it->first; - } + if (it->first->Offset == offset && it->first->End == end) return it->first; } } @@ -113,10 +110,11 @@ Sample* Region::GetSample(bool create) { if(pSample == NULL && create) { - int i = offset ? *offset : 0; - Sample* sf = GetInstrument()->GetSampleManager()->FindSample(sample, i); + uint i = offset ? *offset : 0; + int e = end ? *end : -2; + Sample* sf = GetInstrument()->GetSampleManager()->FindSample(sample, i, e); if (sf != NULL) pSample = sf; // Reuse already created sample - else pSample = new Sample(sample, false, i); + else pSample = new Sample(sample, false, i, e); GetInstrument()->GetSampleManager()->AddSampleConsumer(pSample, this); } return pSample;