146 |
|
|
147 |
// get current dimension values to select the right dimension region |
// get current dimension values to select the right dimension region |
148 |
//FIXME: controller values for selecting the dimension region here are currently not sample accurate |
//FIXME: controller values for selecting the dimension region here are currently not sample accurate |
149 |
uint DimValues[5] = {0,0,0,0,0}; |
uint DimValues[8] = { 0 }; |
150 |
for (int i = pRegion->Dimensions - 1; i >= 0; i--) { |
for (int i = pRegion->Dimensions - 1; i >= 0; i--) { |
151 |
switch (pRegion->pDimensionDefinitions[i].dimension) { |
switch (pRegion->pDimensionDefinitions[i].dimension) { |
152 |
case ::gig::dimension_samplechannel: |
case ::gig::dimension_samplechannel: |
248 |
std::cerr << "gig::Voice::Trigger() Error: Unknown dimension\n" << std::flush; |
std::cerr << "gig::Voice::Trigger() Error: Unknown dimension\n" << std::flush; |
249 |
} |
} |
250 |
} |
} |
251 |
pDimRgn = pRegion->GetDimensionRegionByValue(DimValues[4],DimValues[3],DimValues[2],DimValues[1],DimValues[0]); |
pDimRgn = pRegion->GetDimensionRegionByValue(DimValues); |
252 |
|
|
253 |
pSample = pDimRgn->pSample; // sample won't change until the voice is finished |
pSample = pDimRgn->pSample; // sample won't change until the voice is finished |
254 |
|
|
310 |
|
|
311 |
// calculate initial pitch value |
// calculate initial pitch value |
312 |
{ |
{ |
313 |
double pitchbasecents = pDimRgn->FineTune * 10 + (int) pEngine->ScaleTuning[MIDIKey % 12]; |
double pitchbasecents = pDimRgn->FineTune + (int) pEngine->ScaleTuning[MIDIKey % 12]; |
314 |
if (pDimRgn->PitchTrack) pitchbasecents += (MIDIKey - (int) pDimRgn->UnityNote) * 100; |
if (pDimRgn->PitchTrack) pitchbasecents += (MIDIKey - (int) pDimRgn->UnityNote) * 100; |
315 |
this->PitchBase = RTMath::CentsToFreqRatio(pitchbasecents) * (double(pSample->SamplesPerSecond) / double(pEngine->pAudioOutputDevice->SampleRate())); |
this->PitchBase = RTMath::CentsToFreqRatio(pitchbasecents) * (double(pSample->SamplesPerSecond) / double(pEngine->pAudioOutputDevice->SampleRate())); |
316 |
this->PitchBend = RTMath::CentsToFreqRatio(((double) PitchBend / 8192.0) * 200.0); // pitchbend wheel +-2 semitones = 200 cents |
this->PitchBend = RTMath::CentsToFreqRatio(((double) PitchBend / 8192.0) * 200.0); // pitchbend wheel +-2 semitones = 200 cents |