@@ -116,6 +116,12 @@ class FreeVerb : public Effect
116
116
*/
117
117
StkFrames& tick ( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0 , unsigned int oChannel = 0 );
118
118
119
+ // ! Input one sample to the effect and return the specified \c channel value of the computed mono frame.
120
+ StkFloat tick ( StkFloat input, unsigned int channel ) override {
121
+ return tick (input, 0.0 , channel);
122
+ }
123
+
124
+
119
125
protected:
120
126
// ! Update interdependent parameters.
121
127
void update ( void );
@@ -162,89 +168,7 @@ class FreeVerb : public Effect
162
168
Delay allPassDelayR_[nAllpasses];
163
169
};
164
170
165
- inline StkFloat FreeVerb :: lastOut( unsigned int channel )
166
- {
167
- #if defined(_STK_DEBUG_)
168
- if ( channel > 1 ) {
169
- oStream_ << " FreeVerb::lastOut(): channel argument must be less than 2!" ;
170
- handleError ( StkError::FUNCTION_ARGUMENT );
171
- }
172
- #endif
173
-
174
- return lastFrame_[channel];
175
- }
176
171
177
- inline StkFloat FreeVerb::tick ( StkFloat inputL, StkFloat inputR, unsigned int channel )
178
- {
179
- #if defined(_STK_DEBUG_)
180
- if ( channel > 1 ) {
181
- oStream_ << " FreeVerb::tick(): channel argument must be less than 2!" ;
182
- handleError (StkError::FUNCTION_ARGUMENT);
183
- }
184
- #endif
185
-
186
- StkFloat fInput = (inputL + inputR) * gain_;
187
- StkFloat outL = 0.0 ;
188
- StkFloat outR = 0.0 ;
189
-
190
- // Parallel LBCF filters
191
- for ( int i = 0 ; i < nCombs; i++ ) {
192
- // Left channel
193
- // StkFloat yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPL_[i].tick(FreeVerb::undenormalize(combDelayL_[i].nextOut()))));
194
- StkFloat yn = fInput + (roomSize_ * combLPL_[i].tick ( combDelayL_[i].nextOut () ) );
195
- combDelayL_[i].tick (yn);
196
- outL += yn;
197
-
198
- // Right channel
199
- // yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPR_[i].tick(FreeVerb::undenormalize(combDelayR_[i].nextOut()))));
200
- yn = fInput + (roomSize_ * combLPR_[i].tick ( combDelayR_[i].nextOut () ) );
201
- combDelayR_[i].tick (yn);
202
- outR += yn;
203
- }
204
-
205
- // Series allpass filters
206
- for ( int i = 0 ; i < nAllpasses; i++ ) {
207
- // Left channel
208
- // StkFloat vn_m = FreeVerb::undenormalize(allPassDelayL_[i].nextOut());
209
- StkFloat vn_m = allPassDelayL_[i].nextOut ();
210
- StkFloat vn = outL + (g_ * vn_m);
211
- allPassDelayL_[i].tick (vn);
212
-
213
- // calculate output
214
- outL = -vn + (1 .0f + g_)*vn_m;
215
-
216
- // Right channel
217
- // vn_m = FreeVerb::undenormalize(allPassDelayR_[i].nextOut());
218
- vn_m = allPassDelayR_[i].nextOut ();
219
- vn = outR + (g_ * vn_m);
220
- allPassDelayR_[i].tick (vn);
221
-
222
- // calculate output
223
- outR = -vn + (1 .0f + g_)*vn_m;
224
- }
225
-
226
- // Mix output
227
- lastFrame_[0 ] = outL*wet1_ + outR*wet2_ + inputL*dry_;
228
- lastFrame_[1 ] = outR*wet1_ + outL*wet2_ + inputR*dry_;
229
-
230
- /*
231
- // Hard limiter ... there's not much else we can do at this point
232
- if ( lastFrame_[0] >= 1.0 ) {
233
- lastFrame_[0] = 0.9999;
234
- }
235
- if ( lastFrame_[0] <= -1.0 ) {
236
- lastFrame_[0] = -0.9999;
237
- }
238
- if ( lastFrame_[1] >= 1.0 ) {
239
- lastFrame_[1] = 0.9999;
240
- }
241
- if ( lastFrame_[1] <= -1.0 ) {
242
- lastFrame_[1] = -0.9999;
243
- }
244
- */
245
-
246
- return lastFrame_[channel];
247
- }
248
172
249
173
}
250
174
0 commit comments