108 |
|
|
109 |
Sample* Region::GetSample(bool create) |
Sample* Region::GetSample(bool create) |
110 |
{ |
{ |
111 |
if(pSample == NULL && create) { |
if (pSample == NULL && create) { |
112 |
uint i = offset ? *offset : 0; |
uint i = offset ? *offset : 0; |
113 |
int e = end ? *end : -2; |
Sample* sf = GetInstrument()->GetSampleManager()->FindSample(sample, i, end); |
|
Sample* sf = GetInstrument()->GetSampleManager()->FindSample(sample, i, e); |
|
114 |
if (sf != NULL) pSample = sf; // Reuse already created sample |
if (sf != NULL) pSample = sf; // Reuse already created sample |
115 |
else pSample = new Sample(sample, false, i, e); |
else pSample = new Sample(sample, false, i, end); |
116 |
GetInstrument()->GetSampleManager()->AddSampleConsumer(pSample, this); |
GetInstrument()->GetSampleManager()->AddSampleConsumer(pSample, this); |
117 |
} |
} |
118 |
return pSample; |
return pSample; |
169 |
} |
} |
170 |
|
|
171 |
bool Region::HasLoop() { |
bool Region::HasLoop() { |
172 |
bool b = loop_mode == ::sfz::LOOP_UNSET ? pSample->GetLoops() : |
bool b = loop_mode == LOOP_UNSET ? pSample->GetLoops() : |
173 |
(loop_mode == ::sfz::LOOP_CONTINUOUS || loop_mode == ::sfz::LOOP_SUSTAIN); |
(loop_mode == LOOP_CONTINUOUS || loop_mode == LOOP_SUSTAIN); |
174 |
return b && GetLoopStart() && GetLoopEnd() && GetLoopEnd() > GetLoopStart(); |
return b && GetLoopEnd() > GetLoopStart(); |
175 |
} |
} |
176 |
|
|
177 |
uint Region::GetLoopStart() { |
uint Region::GetLoopStart() { |
309 |
delay.unset(); delay_random.unset(); |
delay.unset(); delay_random.unset(); |
310 |
delay_beats.unset(); stop_beats.unset(); |
delay_beats.unset(); stop_beats.unset(); |
311 |
delay_samples.unset(); |
delay_samples.unset(); |
312 |
end.unset(); |
end = 0; |
313 |
loop_crossfade.unset(); |
loop_crossfade.unset(); |
314 |
offset.unset(); offset_random.unset(); |
offset.unset(); offset_random.unset(); |
315 |
loop_mode = LOOP_UNSET; |
loop_mode = LOOP_UNSET; |
1020 |
velcurve[v] = v * v / (127.0 * 127.0); |
velcurve[v] = v * v / (127.0 * 127.0); |
1021 |
} |
} |
1022 |
} |
} |
|
|
|
|
// apply amp_veltrack |
|
|
float offset = -pRegion->amp_veltrack; |
|
|
if (offset <= 0) offset += 100; |
|
|
for (int v = 0 ; v < 128 ; v++) { |
|
|
velcurve[v] = (offset + pRegion->amp_veltrack * velcurve[v]) / 100; |
|
|
} |
|
1023 |
} |
} |
1024 |
} |
} |
1025 |
|
|
1813 |
else if ("volume_curve" == key_cc) pCurDef->volume_curvecc.add( CC(num_cc, 0, check(key, 0, 30000, ToInt(value))) ); |
else if ("volume_curve" == key_cc) pCurDef->volume_curvecc.add( CC(num_cc, 0, check(key, 0, 30000, ToInt(value))) ); |
1814 |
else if ("volume_smooth" == key_cc) pCurDef->volume_smoothcc.add( CC(num_cc, 0, -1, check(key, 0.0f, 100000.0f /* max? */, ToFloat(value))) ); |
else if ("volume_smooth" == key_cc) pCurDef->volume_smoothcc.add( CC(num_cc, 0, -1, check(key, 0.0f, 100000.0f /* max? */, ToFloat(value))) ); |
1815 |
else if ("volume_step" == key_cc) pCurDef->volume_stepcc.add( CC(num_cc, 0, -1, 0, check(key, -20.0f, 20.0f, ToFloat(value))) ); |
else if ("volume_step" == key_cc) pCurDef->volume_stepcc.add( CC(num_cc, 0, -1, 0, check(key, -20.0f, 20.0f, ToFloat(value))) ); |
1816 |
else if ("pan" == key_cc) pCurDef->pan_oncc.add( CC(num_cc, check(key, -100.0f, 100.0f, ToFloat(value))) ); |
else if ("pan" == key_cc) pCurDef->pan_oncc.add( CC(num_cc, check(key, -200.0f, 200.0f, ToFloat(value))) ); |
1817 |
else if ("pan_curve" == key_cc) pCurDef->pan_curvecc.add( CC(num_cc, 0, check(key, 0, 30000, ToInt(value))) ); |
else if ("pan_curve" == key_cc) pCurDef->pan_curvecc.add( CC(num_cc, 0, check(key, 0, 30000, ToInt(value))) ); |
1818 |
else if ("pan_smooth" == key_cc) pCurDef->pan_smoothcc.add( CC(num_cc, 0, -1, check(key, 0.0f, 100000.0f /* max? */, ToFloat(value))) ); |
else if ("pan_smooth" == key_cc) pCurDef->pan_smoothcc.add( CC(num_cc, 0, -1, check(key, 0.0f, 100000.0f /* max? */, ToFloat(value))) ); |
1819 |
else if ("pan_step" == key_cc) pCurDef->pan_stepcc.add( CC(num_cc, 0, -1, 0, check(key, -100.0f, 100.0f, ToFloat(value))) ); |
else if ("pan_step" == key_cc) pCurDef->pan_stepcc.add( CC(num_cc, 0, -1, 0, check(key, -100.0f, 100.0f, ToFloat(value))) ); |