| 1819 | //============================================================================================================= |
| 1820 | |
| 1821 | void CVASTSingleNote::processBuffer(sRoutingBuffers& routingBuffers, int startSample, int numSamples) { |
| 1822 | modMatrixInputState l_inputState{ mVoiceNo, startSample }; |
| 1823 | if (!isPlayingInRange(startSample, numSamples) || (m_iNumParallelOsc == 0)) { |
| 1824 | clearCurrentNote(); |
| 1825 | |
| 1826 | resetSoftFadeState(); |
| 1827 | |
| 1828 | if (m_bLastFilterOutputZero[0] && m_bLastFilterOutputZero[1] && m_bLastFilterOutputZero[2]) { //check |
| 1829 | if (m_VCA.isActive()) |
| 1830 | m_VCA.init(); //to reset envelopes |
| 1831 | return; |
| 1832 | } |
| 1833 | } |
| 1834 | else { |
| 1835 | #ifdef _DEBUG |
| 1836 | if (startSample > 0) |
| 1837 | VDBG("StartSample > 0: " << startSample << " numSamples: " << numSamples << " bufferSamples: " << routingBuffers.getNumSamples()); |
| 1838 | #endif |
| 1839 | m_Set->bufferInputState.store(l_inputState); |
| 1840 | |
| 1841 | //Mod matrix pitch |
| 1842 | float lSamplerPitch = m_Set->getParameterValueWithMatrixModulation(m_Set->m_State->m_fPitchMod, MODMATDEST::SamplerPitch, &l_inputState) * 0.01f; |
| 1843 | m_bSmoothersTakeNextValue ? m_fPitchModSampler_smoothed.setCurrentAndTargetValue(lSamplerPitch) : |
| 1844 | m_fPitchModSampler_smoothed.setTargetValue(lSamplerPitch); |
| 1845 | |
| 1846 | //who is really playing |
| 1847 | MYUINT uNumOscAOscsPlaying = 0; |
| 1848 | if (*m_Set->m_State->m_bOscOnOff_OscA == static_cast<int>(SWITCH::SWITCH_ON)) { |
| 1849 | //for (int i = 0; i < *m_Set->m_State->m_iNumOscs_OscA; i++) if (m_Oscillator[0][i].isPlaying() == true) uNumOscAOscsPlaying++; |
| 1850 | uNumOscAOscsPlaying = m_Oscillator[0].m_unisonOscis; |
| 1851 | if (*m_Set->m_State->m_bOscRetrigOnOff_OscA == static_cast<int>(SWITCH::SWITCH_ON)) |
| 1852 | if (m_uLastuNumOscAOscsPlaying < uNumOscAOscsPlaying) { //added oscis generating |
| 1853 | for (int i = m_uLastuNumOscAOscsPlaying - 1; i < uNumOscAOscsPlaying; i++) { //sync new oscis to master |
| 1854 | if (i > 0) |
| 1855 | syncOscToMaster(0, i); |
| 1856 | } |
| 1857 | } |
| 1858 | } |
| 1859 | m_uLastuNumOscAOscsPlaying = uNumOscAOscsPlaying; |
| 1860 | |
| 1861 | MYUINT uNumOscBOscsPlaying = 0; |
| 1862 | if (*m_Set->m_State->m_bOscOnOff_OscB == static_cast<int>(SWITCH::SWITCH_ON)) { |
| 1863 | //for (int i = 0; i < *m_Set->m_State->m_iNumOscs_OscB; i++) if (m_Oscillator[1][i].isPlaying() == true) uNumOscBOscsPlaying++; |
| 1864 | uNumOscBOscsPlaying = m_Oscillator[1].m_unisonOscis; |
| 1865 | if (*m_Set->m_State->m_bOscRetrigOnOff_OscB == static_cast<int>(SWITCH::SWITCH_ON)) |
| 1866 | if (m_uLastuNumOscBOscsPlaying < uNumOscBOscsPlaying) { //added oscis generating |
| 1867 | for (int i = m_uLastuNumOscBOscsPlaying - 1; i < uNumOscBOscsPlaying; i++) { //sync new oscis to master |
| 1868 | if (i > 0) |
| 1869 | syncOscToMaster(1, i); |
| 1870 | } |
| 1871 | } |
| 1872 | } |
| 1873 | m_uLastuNumOscBOscsPlaying = uNumOscBOscsPlaying; |
| 1874 | |
| 1875 | MYUINT uNumOscCOscsPlaying = 0; |
| 1876 | if (*m_Set->m_State->m_bOscOnOff_OscC == static_cast<int>(SWITCH::SWITCH_ON)) { |
| 1877 | //for (int i = 0; i < *m_Set->m_State->m_iNumOscs_OscC; i++) if (m_Oscillator[2][i].isPlaying() == true) uNumOscCOscsPlaying++; |
| 1878 | uNumOscCOscsPlaying = m_Oscillator[2].m_unisonOscis; |
nothing calls this directly
no test coverage detected