Skip to content

Commit abb74a1

Browse files
committed
Compile error in FreeVerb
1 parent 576f1d8 commit abb74a1

File tree

2 files changed

+92
-82
lines changed

2 files changed

+92
-82
lines changed

src/FreeVerb.cpp

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,20 @@ void FreeVerb::clear()
181181
lastFrame_[1] = 0.0;
182182
}
183183

184+
185+
StkFloat FreeVerb :: lastOut( unsigned int channel )
186+
{
187+
#if defined(_STK_DEBUG_)
188+
if ( channel > 1 ) {
189+
oStream_ << "FreeVerb::lastOut(): channel argument must be less than 2!";
190+
handleError( StkError::FUNCTION_ARGUMENT );
191+
}
192+
#endif
193+
194+
return lastFrame_[channel];
195+
}
196+
197+
184198
StkFrames& FreeVerb::tick( StkFrames& frames, unsigned int channel )
185199
{
186200
#if defined(_STK_DEBUG_)
@@ -225,3 +239,75 @@ StkFrames& FreeVerb::tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int
225239

226240
return oFrames;
227241
}
242+
243+
StkFloat FreeVerb::tick( StkFloat inputL, StkFloat inputR, unsigned int channel )
244+
{
245+
#if defined(_STK_DEBUG_)
246+
if ( channel > 1 ) {
247+
oStream_ << "FreeVerb::tick(): channel argument must be less than 2!";
248+
handleError(StkError::FUNCTION_ARGUMENT);
249+
}
250+
#endif
251+
252+
StkFloat fInput = (inputL + inputR) * gain_;
253+
StkFloat outL = 0.0;
254+
StkFloat outR = 0.0;
255+
256+
// Parallel LBCF filters
257+
for ( int i = 0; i < nCombs; i++ ) {
258+
// Left channel
259+
//StkFloat yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPL_[i].tick(FreeVerb::undenormalize(combDelayL_[i].nextOut()))));
260+
StkFloat yn = fInput + (roomSize_ * combLPL_[i].tick( combDelayL_[i].nextOut() ) );
261+
combDelayL_[i].tick(yn);
262+
outL += yn;
263+
264+
// Right channel
265+
//yn = fInput + (roomSize_ * FreeVerb::undenormalize(combLPR_[i].tick(FreeVerb::undenormalize(combDelayR_[i].nextOut()))));
266+
yn = fInput + (roomSize_ * combLPR_[i].tick( combDelayR_[i].nextOut() ) );
267+
combDelayR_[i].tick(yn);
268+
outR += yn;
269+
}
270+
271+
// Series allpass filters
272+
for ( int i = 0; i < nAllpasses; i++ ) {
273+
// Left channel
274+
//StkFloat vn_m = FreeVerb::undenormalize(allPassDelayL_[i].nextOut());
275+
StkFloat vn_m = allPassDelayL_[i].nextOut();
276+
StkFloat vn = outL + (g_ * vn_m);
277+
allPassDelayL_[i].tick(vn);
278+
279+
// calculate output
280+
outL = -vn + (1.0f + g_)*vn_m;
281+
282+
// Right channel
283+
//vn_m = FreeVerb::undenormalize(allPassDelayR_[i].nextOut());
284+
vn_m = allPassDelayR_[i].nextOut();
285+
vn = outR + (g_ * vn_m);
286+
allPassDelayR_[i].tick(vn);
287+
288+
// calculate output
289+
outR = -vn + (1.0f + g_)*vn_m;
290+
}
291+
292+
// Mix output
293+
lastFrame_[0] = outL*wet1_ + outR*wet2_ + inputL*dry_;
294+
lastFrame_[1] = outR*wet1_ + outL*wet2_ + inputR*dry_;
295+
296+
/*
297+
// Hard limiter ... there's not much else we can do at this point
298+
if ( lastFrame_[0] >= 1.0 ) {
299+
lastFrame_[0] = 0.9999;
300+
}
301+
if ( lastFrame_[0] <= -1.0 ) {
302+
lastFrame_[0] = -0.9999;
303+
}
304+
if ( lastFrame_[1] >= 1.0 ) {
305+
lastFrame_[1] = 0.9999;
306+
}
307+
if ( lastFrame_[1] <= -1.0 ) {
308+
lastFrame_[1] = -0.9999;
309+
}
310+
*/
311+
312+
return lastFrame_[channel];
313+
}

src/FreeVerb.h

Lines changed: 6 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ class FreeVerb : public Effect
116116
*/
117117
StkFrames& tick( StkFrames& iFrames, StkFrames &oFrames, unsigned int iChannel = 0, unsigned int oChannel = 0 );
118118

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+
119125
protected:
120126
//! Update interdependent parameters.
121127
void update( void );
@@ -162,89 +168,7 @@ class FreeVerb : public Effect
162168
Delay allPassDelayR_[nAllpasses];
163169
};
164170

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-
}
176171

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-
}
248172

249173
}
250174

0 commit comments

Comments
 (0)