MCPcopy Create free account
hub / github.com/andrewreeman/SpectralSuite / doLock

Method doLock

PhaseLock/Source/PhaseLockFFTProcessor.cpp:32–101  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

30}
31
32void PhaseLockFFTProcessor::doLock(int bins, const PolarVector &in, PolarVector &out) {
33 if (m_lockPhaseState.shouldTransitionToOn()) {
34 m_lockedPhases.clear();
35 for (size_t i = 0; i < static_cast<size_t>(bins); ++i) {
36 m_lockedPhases.push_back(in[i].m_phase);
37 }
38
39 m_lockPhaseState.completeTransitionToOn();
40 }
41
42 if (m_lockMagState.shouldTransitionToOn()) {
43 m_lockedMag.clear();
44 for (size_t i = 0; i < static_cast<size_t>(bins); ++i) {
45 m_lockedMag.push_back(in[i].m_mag);
46 }
47
48 m_lockMagState.completeTransitionToOn();
49 }
50
51 float maxMag = 0.f;
52
53 for(auto& inBin : in) {
54 if(inBin.m_mag > maxMag) {
55 maxMag = inBin.m_mag;
56 }
57 }
58
59 float maxLockedMag = 0.1f;
60 for(auto& lockedBin : m_lockedMag) {
61 if(lockedBin > maxLockedMag) {
62 maxLockedMag = lockedBin;
63 }
64 }
65
66 float scale = maxMag / maxLockedMag;
67 scale = scale + (-(scale - 1.f) * (1.0f - m_magTrack));
68 float magMix = m_magMix;
69 float randPhaseMix = m_randomPhaseMix;
70
71 if(m_lockPhaseState.isOn() && m_lockMagState.isOn()) {
72 for (size_t i = 0; i < static_cast<size_t>(bins); ++i) {
73 float inPhase = in[i].m_phase;
74 out[i].m_phase = inPhase + ((m_lockedPhases.at(i) - inPhase) * m_phaseMix);
75
76 float inMag = in[i].m_mag;
77 out[i].m_mag = (inMag + ((m_lockedMag.at(i) - inMag) * magMix)) * scale;
78 out[i].m_phase = ( randPhaseMix * phaseLockGenerateRandomNumber()) + ((1.f - randPhaseMix) * out[i].m_phase); }
79 }
80 else if(m_lockPhaseState.isOn() && m_lockMagState.isOff()) {
81 for (size_t i = 0; i < static_cast<size_t>(bins); ++i) {
82 out[i] = in[i];
83 float inPhase = in[i].m_phase;
84 out[i].m_phase = inPhase + ((m_lockedPhases.at(i) - inPhase) * m_phaseMix);
85 out[i].m_phase = ( randPhaseMix * phaseLockGenerateRandomNumber()) + ((1.f - randPhaseMix) * out[i].m_phase);
86 }
87 }
88 else if(m_lockPhaseState.isOff() && m_lockMagState.isOn()) {
89 for (size_t i = 0; i < static_cast<size_t>(bins); ++i) {

Callers

nothing calls this directly

Calls 6

shouldTransitionToOnMethod · 0.80
clearMethod · 0.80
isOnMethod · 0.80
isOffMethod · 0.45

Tested by

no test coverage detected