MCPcopy Create free account
hub / github.com/LMMS/lmms / renderOutput

Method renderOutput

plugins/monstro/Monstro.cpp:110–648  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

108
109
110void MonstroSynth::renderOutput( fpp_t _frames, sampleFrame * _buf )
111{
112 float modtmp; // temp variable for freq modulation
113// macros for modulating with env/lfos
114#define modulatefreq( car, mod ) \
115 modtmp = 0.0f; \
116 if( mod##_e1 != 0.0f ) modtmp += env[0][f] * mod##_e1; \
117 if( mod##_e2 != 0.0f ) modtmp += env[1][f] * mod##_e2; \
118 if( mod##_l1 != 0.0f ) modtmp += lfo[0][f] * mod##_l1; \
119 if( mod##_l2 != 0.0f ) modtmp += lfo[1][f] * mod##_l2; \
120 car = qBound( MIN_FREQ, car * powf( 2.0f, modtmp ), MAX_FREQ );
121
122#define modulateabs( car, mod ) \
123 if( mod##_e1 != 0.0f ) car += env[0][f] * mod##_e1; \
124 if( mod##_e2 != 0.0f ) car += env[1][f] * mod##_e2; \
125 if( mod##_l1 != 0.0f ) car += lfo[0][f] * mod##_l1; \
126 if( mod##_l2 != 0.0f ) car += lfo[1][f] * mod##_l2;
127
128#define modulatephs( car, mod ) \
129 if( mod##_e1 != 0.0f ) car += env[0][f] * mod##_e1; \
130 if( mod##_e2 != 0.0f ) car += env[1][f] * mod##_e2; \
131 if( mod##_l1 != 0.0f ) car += lfo[0][f] * mod##_l1; \
132 if( mod##_l2 != 0.0f ) car += lfo[1][f] * mod##_l2;
133
134#define modulatevol( car, mod ) \
135 if( mod##_e1 > 0.0f ) car *= ( 1.0f - mod##_e1 + mod##_e1 * env[0][f] ); \
136 if( mod##_e1 < 0.0f ) car *= ( 1.0f + mod##_e1 * env[0][f] ); \
137 if( mod##_e2 > 0.0f ) car *= ( 1.0f - mod##_e2 + mod##_e2 * env[1][f] ); \
138 if( mod##_e2 < 0.0f ) car *= ( 1.0f + mod##_e2 * env[1][f] ); \
139 if( mod##_l1 != 0.0f ) car *= ( 1.0f + mod##_l1 * lfo[0][f] ); \
140 if( mod##_l2 != 0.0f ) car *= ( 1.0f + mod##_l2 * lfo[1][f] ); \
141 car = qBound( -MODCLIP, car, MODCLIP );
142
143
144
145 ////////////////////
146 // //
147 // MODULATORS //
148 // //
149 ////////////////////
150
151 // LFO phase offsets
152 const float lfo1_po = m_parent->m_lfo1Phs.value() / 360.0f;
153 const float lfo2_po = m_parent->m_lfo2Phs.value() / 360.0f;
154
155 // remove cruft from phase counters to prevent overflow, add phase offset
156 m_lfo_phase[0] = absFraction( m_lfo_phase[0] + lfo1_po );
157 m_lfo_phase[1] = absFraction( m_lfo_phase[1] + lfo2_po );
158
159 // LFO rates and increment
160 m_lfo_rate[0] = ( m_parent->m_lfo1Rate.value() * 0.001f * m_parent->m_samplerate );
161 m_lfo_rate[1] = ( m_parent->m_lfo2Rate.value() * 0.001f * m_parent->m_samplerate );
162 m_lfo_inc[0] = 1.0f / m_lfo_rate[0];
163 m_lfo_inc[1] = 1.0f / m_lfo_rate[1];
164
165 m_env_sus[0] = m_parent-> m_env1Sus.value();
166 m_env_sus[1] = m_parent-> m_env2Sus.value();
167

Callers 1

playNoteMethod · 0.45

Calls 6

absFractionFunction · 0.85
pdToLenFunction · 0.85
oscillateFunction · 0.85
linearInterpolateFunction · 0.85
frequencyMethod · 0.80
valueMethod · 0.45

Tested by

no test coverage detected