603 |
} |
} |
604 |
|
|
605 |
float EndpointUnit::GetFilterCutoff() { |
float EndpointUnit::GetFilterCutoff() { |
606 |
float val; |
float val = GetRack()->suCutoffOnCC.Active() ? RTMath::CentsToFreqRatioUnlimited(GetRack()->suCutoffOnCC.GetLevel()) : 1; |
607 |
|
|
608 |
FilLFOUnit* u = &(GetRack()->suFilLFO); |
FilLFOUnit* u = &(GetRack()->suFilLFO); |
609 |
CCSignalUnit* u1 = &(GetRack()->suFilLFO.suDepthOnCC); |
CCSignalUnit* u1 = &(GetRack()->suFilLFO.suDepthOnCC); |
610 |
float f = u1->Active() ? u1->GetLevel() : 0; |
float f = u1->Active() ? u1->GetLevel() : 0; |
611 |
val = u->Active() ? RTMath::CentsToFreqRatioUnlimited(u->GetLevel() * (u->pLfoInfo->cutoff + f)) : 1; |
val *= u->Active() ? RTMath::CentsToFreqRatioUnlimited(u->GetLevel() * (u->pLfoInfo->cutoff + f)) : 1; |
612 |
|
|
613 |
FilEGUnit* u2 = &(GetRack()->suFilEG); |
FilEGUnit* u2 = &(GetRack()->suFilEG); |
614 |
val *= u2->Active() ? RTMath::CentsToFreqRatioUnlimited(u2->GetLevel() * u2->depth) : 1; |
val *= u2->Active() ? RTMath::CentsToFreqRatioUnlimited(u2->GetLevel() * u2->depth) : 1; |
635 |
} |
} |
636 |
|
|
637 |
float EndpointUnit::CalculateFilterCutoff(float cutoff) { |
float EndpointUnit::CalculateFilterCutoff(float cutoff) { |
638 |
cutoff *= GetFilterCutoff(); |
cutoff *= GetFilterCutoff(); |
639 |
float maxCutoff = 0.49 * pVoice->GetSampleRate(); |
float maxCutoff = 0.49 * pVoice->GetSampleRate(); |
640 |
return cutoff > maxCutoff ? maxCutoff : cutoff; |
return cutoff > maxCutoff ? maxCutoff : cutoff; |
641 |
} |
} |
642 |
|
|
643 |
float EndpointUnit::GetPitch() { |
float EndpointUnit::GetPitch() { |
670 |
} |
} |
671 |
|
|
672 |
float EndpointUnit::GetResonance() { |
float EndpointUnit::GetResonance() { |
673 |
float val = 0; |
float val = GetRack()->suResOnCC.Active() ? GetRack()->suResOnCC.GetLevel() : 0; |
674 |
|
|
675 |
for (int i = 0; i < GetRack()->resEGs.size(); i++) { |
for (int i = 0; i < GetRack()->resEGs.size(); i++) { |
676 |
EGv2Unit* eg = GetRack()->resEGs[i]; |
EGv2Unit* eg = GetRack()->resEGs[i]; |
726 |
|
|
727 |
SfzSignalUnitRack::SfzSignalUnitRack(Voice* voice) |
SfzSignalUnitRack::SfzSignalUnitRack(Voice* voice) |
728 |
: SignalUnitRack(MaxUnitCount), pVoice(voice), suEndpoint(this), suVolEG(this), suFilEG(this), suPitchEG(this), |
: SignalUnitRack(MaxUnitCount), pVoice(voice), suEndpoint(this), suVolEG(this), suFilEG(this), suPitchEG(this), |
729 |
EGs(maxEgCount), volEGs(maxEgCount), pitchEGs(maxEgCount), filEGs(maxEgCount), resEGs(maxEgCount), panEGs(maxEgCount), suVolOnCC(this), |
EGs(maxEgCount), volEGs(maxEgCount), pitchEGs(maxEgCount), filEGs(maxEgCount), resEGs(maxEgCount), panEGs(maxEgCount), |
730 |
|
suVolOnCC(this), suCutoffOnCC(this), suResOnCC(this), |
731 |
suAmpLFO(this), suPitchLFO(this), suFilLFO(this), |
suAmpLFO(this), suPitchLFO(this), suFilLFO(this), |
732 |
LFOs(maxLfoCount), volLFOs(maxLfoCount), pitchLFOs(maxLfoCount), |
LFOs(maxLfoCount), volLFOs(maxLfoCount), pitchLFOs(maxLfoCount), |
733 |
filLFOs(maxLfoCount), resLFOs(maxLfoCount), panLFOs(maxLfoCount) |
filLFOs(maxLfoCount), resLFOs(maxLfoCount), panLFOs(maxLfoCount) |
734 |
{ |
{ |
735 |
suEndpoint.pVoice = suEndpoint.suXFInCC.pVoice = suEndpoint.suXFOutCC.pVoice = suEndpoint.suPanOnCC.pVoice = voice; |
suEndpoint.pVoice = suEndpoint.suXFInCC.pVoice = suEndpoint.suXFOutCC.pVoice = suEndpoint.suPanOnCC.pVoice = voice; |
736 |
suVolEG.pVoice = suFilEG.pVoice = suPitchEG.pVoice = voice; |
suVolEG.pVoice = suFilEG.pVoice = suPitchEG.pVoice = voice; |
737 |
suAmpLFO.pVoice = suPitchLFO.pVoice = suFilLFO.pVoice = suVolOnCC.pVoice = voice; |
suAmpLFO.pVoice = suPitchLFO.pVoice = suFilLFO.pVoice = suVolOnCC.pVoice = suCutoffOnCC.pVoice = suResOnCC.pVoice = voice; |
738 |
suPitchLFO.suDepthOnCC.pVoice = suPitchLFO.suFadeEG.pVoice = suPitchLFO.suFreqOnCC.pVoice = voice; |
suPitchLFO.suDepthOnCC.pVoice = suPitchLFO.suFadeEG.pVoice = suPitchLFO.suFreqOnCC.pVoice = voice; |
739 |
suFilLFO.suFadeEG.pVoice = suFilLFO.suDepthOnCC.pVoice = suFilLFO.suFreqOnCC.pVoice = voice; |
suFilLFO.suFadeEG.pVoice = suFilLFO.suDepthOnCC.pVoice = suFilLFO.suFreqOnCC.pVoice = voice; |
740 |
suAmpLFO.suFadeEG.pVoice = suAmpLFO.suDepthOnCC.pVoice = suAmpLFO.suFreqOnCC.pVoice = voice; |
suAmpLFO.suFadeEG.pVoice = suAmpLFO.suDepthOnCC.pVoice = suAmpLFO.suFreqOnCC.pVoice = voice; |
780 |
Pool<Smoother>* pSmootherPool = pVoice->pEngine->pSmootherPool; |
Pool<Smoother>* pSmootherPool = pVoice->pEngine->pSmootherPool; |
781 |
|
|
782 |
suVolOnCC.InitCCList(pCCPool, pSmootherPool); |
suVolOnCC.InitCCList(pCCPool, pSmootherPool); |
783 |
|
suCutoffOnCC.InitCCList(pCCPool, pSmootherPool); |
784 |
|
suResOnCC.InitCCList(pCCPool, pSmootherPool); |
785 |
suEndpoint.suXFInCC.InitCCList(pCCPool, pSmootherPool); |
suEndpoint.suXFInCC.InitCCList(pCCPool, pSmootherPool); |
786 |
suEndpoint.suXFOutCC.InitCCList(pCCPool, pSmootherPool); |
suEndpoint.suXFOutCC.InitCCList(pCCPool, pSmootherPool); |
787 |
suEndpoint.suPanOnCC.InitCCList(pCCPool, pSmootherPool); |
suEndpoint.suPanOnCC.InitCCList(pCCPool, pSmootherPool); |
831 |
::sfz::Region* const pRegion = pVoice->pRegion; |
::sfz::Region* const pRegion = pVoice->pRegion; |
832 |
|
|
833 |
suVolOnCC.SetCCs(pRegion->volume_oncc); |
suVolOnCC.SetCCs(pRegion->volume_oncc); |
834 |
|
suCutoffOnCC.SetCCs(pRegion->cutoff_oncc); |
835 |
|
suResOnCC.SetCCs(pRegion->resonance_oncc); |
836 |
|
|
837 |
for (int i = 0; i < pRegion->eg.size(); i++) { |
for (int i = 0; i < pRegion->eg.size(); i++) { |
838 |
if (pRegion->eg[i].node.size() == 0) continue; |
if (pRegion->eg[i].node.size() == 0) continue; |
939 |
Units.clear(); |
Units.clear(); |
940 |
|
|
941 |
Units.add(&suVolOnCC); |
Units.add(&suVolOnCC); |
942 |
|
Units.add(&suCutoffOnCC); |
943 |
|
Units.add(&suResOnCC); |
944 |
|
|
945 |
Units.add(&suVolEG); |
Units.add(&suVolEG); |
946 |
Units.add(&suFilEG); |
Units.add(&suFilEG); |
1004 |
|
|
1005 |
void SfzSignalUnitRack::Reset() { |
void SfzSignalUnitRack::Reset() { |
1006 |
suVolOnCC.RemoveAllCCs(); |
suVolOnCC.RemoveAllCCs(); |
1007 |
|
suCutoffOnCC.RemoveAllCCs(); |
1008 |
|
suResOnCC.RemoveAllCCs(); |
1009 |
suEndpoint.suXFInCC.RemoveAllCCs(); |
suEndpoint.suXFInCC.RemoveAllCCs(); |
1010 |
suEndpoint.suXFOutCC.RemoveAllCCs(); |
suEndpoint.suXFOutCC.RemoveAllCCs(); |
1011 |
suEndpoint.suPanOnCC.RemoveAllCCs(); |
suEndpoint.suPanOnCC.RemoveAllCCs(); |