|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- /*
- CHORUS and FLANGE effects
- Both effects use a delay line to hold previous samples. This allows
- the current sample to be combined in some way with a sample that
- occurred in the past. An obvious effect this would allow would be
- an echo where the current sample is combined with a sample from,
- say, 250 milliseconds ago. The chorus and flange effects do this
- as well but they combine samples from only about 50ms (or less) ago.
-
- CHORUS EFFECT
- This combines one or more samples up to about 50ms ago. In this
- library, the additional samples are evenly spread through the
- supplied delay line.
- E.G. If the number of voices is specified as 2 then the effect
- combines the current sample and the oldest sample (the last one in
- the delay line). If the number of voices is 3 then the effect
- combines the most recent sample, the oldest sample and the sample
- in the middle of the delay line.
- For two voices the effect can be represented as:
- result = (sample(0) + sample(dt))/2
- where sample(0) represents the current sample and sample(dt) is
- the sample in the delay line from dt milliseconds ago.
-
- FLANGE EFFECT
- This combines only one sample from the delay line but the position
- of that sample varies sinusoidally.
- In this case the effect can be represented as:
- result = sample(0) + sample(dt + depth*sin(2*PI*Fe))
- The value of the sine function is always a number from -1 to +1
- and so the result of depth*(sinFe) is always a number from
- -depth to +depth. Thus, the delayed sample will be selected from
- the range (dt-depth) to (dt+depth). This selection will vary
- at whatever rate is specified as the frequency of the effect Fe.
-
- Try these settings:
- #define FLANGE_DELAY_LENGTH (2*AUDIO_BLOCK_SAMPLES)
- and
- int s_idx = 2*FLANGE_DELAY_LENGTH/4;
- int s_depth = FLANGE_DELAY_LENGTH/4;
- double s_freq = 3;
- The flange effect can also produce a chorus effect if a longer
- delay line is used with a slower rate, for example try:
- #define FLANGE_DELAY_LENGTH (12*AUDIO_BLOCK_SAMPLES)
- and
- int s_idx = 3*FLANGE_DELAY_LENGTH/4;
- int s_depth = FLANGE_DELAY_LENGTH/8;
- double s_freq = .0625;
-
- When trying out these effects with recorded music as input, it is
- best to use those where there is a solo voice which is clearly
- "in front" of the accompaniment. Tracks which already contain
- flange or chorus effects don't work well.
-
- */
|