Hi,

Today I have used a piece of code which is on musicdsp for testing this out 
again.

http://musicdsp.org/archive.php?classid=4#98 
<http://musicdsp.org/archive.php?classid=4#98>

I was able to have a delay changing in time without any kind of artefact or 
glitch. However I have only managed to get this results by changing the 
parameter by myself.

When I say, manually moving the parameter by myself I say that I update a 
property which will be linearly interpolated in time (500ms).

When I try to apply the modulation which is a value between -1 and 1, that 
comes from an LFO, I always end up with artefacts and noise

I don’t understand why it works so well when I move the parameter value (which 
is also changing constantly due to interpolation, and it doesn’t work when I 
apply the modulation with the lo… 

Any ideas?

This is my current code

void IDelay::read(IAudioSample *output)
{
    double t=double(_writeIndex)-_time; // works perfectly moving the handle 
manually with the value being interpolated before getting the variable _time;
    //double t=double(_writeIndex)-_time+_modulation*_modulationRange; 

    // clip lookback buffer-bound
    if(t<0.0)
        t=_size+t;

    // compute interpolation left-floor
    int const index0=int(t);

    // compute interpolation right-floor
    int index_1=index0-1;
    int index1=index0+1;
    int index2=index0+2;

    // clip interp. buffer-bound
    if(index_1<0)index_1=_size-1;
    if(index1>=_size)index1=0;
    if(index2>=_size)index2=0;

    // get neighbourgh samples
    float const y_1= _buffer[index_1];
    float const y0 = _buffer[index0];
    float const y1 = _buffer[index1];
    float const y2 = _buffer[index2];

    // compute interpolation x
    float const x=(float)t-(float)index0;

    // calculate
    float const c0 = y0;
    float const c1 = 0.5f*(y1-y_1);
    float const c2 = y_1 - 2.5f*y0 + 2.0f*y1 - 0.5f*y2;
    float const c3 = 0.5f*(y2-y_1) + 1.5f*(y0-y1);

    *output=((c3*x+c2)*x+c1)*x+c0;
}
> On 20 Mar 2015, at 14:20, Bjorn Roche <bj...@shimmeo.com 
> <mailto:bj...@shimmeo.com>> wrote:
> 
> Interpolating the sample value is not sufficient to eliminate artifacts.
> You also need to eliminate glitches that occur when jumping from one time
> value to another. In other words: no matter how good your sample-value
> interpolation is, you will still introduce artifacts when changing the
> delay time. A steep low-pass filter going into the delay line would be one
> way to solve this. (this is the idea of "bandlimiting" alluded to earlier
> in this discussion.)
> 
> I can say from experience that you absolutely must take this into account,
> but, if memory serves (which it may not), the quality of interpolation and
> filtering is not that important. I am pretty sure I've written code to
> handle both cases using something super simple and efficient like linear
> interpolation and it sounded surprisingly good, which is to say everyone
> else on the project thought it sounded great, and that was enough to
> consider it done on that particular project.
> 
> HTH
> 
> 
> 
> On Fri, Mar 20, 2015 at 6:43 AM, Steven Cook <stevenpaulc...@tiscali.co.uk 
> <mailto:stevenpaulc...@tiscali.co.uk>>
> wrote:
> 
>> 
>> Let suppose that I fix the errors In the algorithm. Is this sufficient
>>> for a quality delay time
>>> Modulation? Or will I need more advance technics?
>>> 
>> 
>> That's a matter of opinion :-) My opinion is that the hermite
>> interpolation you're using here (I didn't check to see if it's implemented
>> correctly!) is more than adequate for modulated delay effects like chorus -
>> I suspect a lot of commercial effects have used linear interpolation.
>> 
>> Steven Cook.
>> 
>> 
>> 
>> -----Original Message----- From: Nuno Santos
>>> Sent: Thursday, March 19, 2015 6:28 PM
>>> To: A discussion list for music-related DSP
>>> Subject: Re: [music-dsp] Glitch/Alias free modulated delay
>>> 
>>> Hi,
>>> 
>>> Thanks for your replies.
>>> 
>>> What I hear is definitely related with the modulation. The artefacts are
>>> audible every time the modulation is applied: manually or automatically
>>> (please not that I have an interpolator for manual parameter changes to
>>> avoid abrupt changes). I think I was already applying an Hermit
>>> interpolation. This is my delay read function.
>>> 
>>> void IDelay::read(IAudioSample *output)
>>> {
>>>  float t = _time+_modulation*_modulationRange;
>>> 
>>>  if (t>(_size-1))
>>>      t=_size-1;
>>> 
>>>  float sf;
>>> 
>>>  #if 0
>>>  sf = _buffer[int(readIndex(t,0))];
>>>  #else
>>>  float const y_1= _buffer[int(readIndex(t,-1))];
>>>  float const y0 = _buffer[int(readIndex(t,0))];
>>>  float const y1 = _buffer[int(readIndex(t,1))];
>>>  float const y2 = _buffer[int(readIndex(t,2))];
>>>  float const x=readIndex(t,0)-int(readIndex(t,0));
>>>  float const c0 = y0;
>>>  float const c1 = 0.5f*(y1-y_1);
>>>  float const c2 = y_1 - 2.5f*y0 + 2.0f*y1 - 0.5f*y2;
>>>  float const c3 = 0.5f*(y2-y_1) + 1.5f*(y0-y1);
>>> 
>>>  sf=((c3*x+c2)*x+c1)*x+c0;
>>>  #endif
>>> 
>>>  *output = sf;
>>> }
>>> 
>>> float IDelay::readIndex(float t, int offset)
>>> {
>>>  float index=_writeIndex-t+offset;
>>> 
>>>  if (index<0)
>>>      index+=_size;
>>> 
>>>  return index;
>>> }
>>> 
>>> Thanks,
>>> 
>>> Regards,
>>> 
>>> Nuno
>>> 
>>> On 19 Mar 2015, at 18:12, David Olofson <da...@olofson.net 
>>> <mailto:da...@olofson.net>> wrote:
>>>> 
>>>> On Thu, Mar 19, 2015 at 6:15 PM, Nuno Santos <nunosan...@imaginando.pt 
>>>> <mailto:nunosan...@imaginando.pt>>
>>>> wrote:
>>>> [...]
>>>> 
>>>>> If I use interpolation for buffer access I experience less glitch and
>>>>> more alias.
>>>>> 
>>>> 
>>>> What type of interpolation are you using? I would think you need
>>>> something better than linear interpolation for this. I'd try Hermite.
>>>> That should be sufficient for "slow" modulation, although
>>>> theoretically, you *should* bandlimit the signal as soon as you play
>>>> it back faster than the original sample rate.
>>>> 
>>>> For more extreme effects (which effectively means you're sometimes
>>>> playing back audio at a substantially higher sample rate than that of
>>>> your audio stream), you may need a proper bandlimited resampler.
>>>> (Apply a brickwall filter before the interpolation, and/or oversample
>>>> the interpolator.)
>>>> 
>>>> 
>>>> --
>>>> //David Olofson - Consultant, Developer, Artist, Open Source Advocate
>>>> 
>>>> .--- Games, examples, libraries, scripting, sound, music, graphics ---.
>>>> |   http://consulting.olofson.net <http://consulting.olofson.net/>         
>>>>  http://olofsonarcade.com <http://olofsonarcade.com/>   |
>>>> '---------------------------------------------------------------------'
>>>> --
>>>> dupswapdrop -- the music-dsp mailing list and website:
>>>> subscription info, FAQ, source code archive, list archive, book reviews,
>>>> dsp links
>>>> http://music.columbia.edu/cmc/music-dsp 
>>>> <http://music.columbia.edu/cmc/music-dsp>
>>>> http://music.columbia.edu/mailman/listinfo/music-dsp
>>>> 
>>> 
>>> --
>>> dupswapdrop -- the music-dsp mailing list and website:
>>> subscription info, FAQ, source code archive, list archive, book reviews,
>>> dsp links
>>> http://music.columbia.edu/cmc/music-dsp 
>>> <http://music.columbia.edu/cmc/music-dsp>
>>> http://music.columbia.edu/mailman/listinfo/music-dsp
>>> --
>>> dupswapdrop -- the music-dsp mailing list and website:
>>> subscription info, FAQ, source code archive, list archive, book reviews,
>>> dsp links
>>> http://music.columbia.edu/cmc/music-dsp
>>> http://music.columbia.edu/mailman/listinfo/music-dsp
>>> 
>> --
>> dupswapdrop -- the music-dsp mailing list and website:
>> subscription info, FAQ, source code archive, list archive, book reviews,
>> dsp links
>> http://music.columbia.edu/cmc/music-dsp 
>> <http://music.columbia.edu/cmc/music-dsp>
>> http://music.columbia.edu/mailman/listinfo/music-dsp
>> --
>> dupswapdrop -- the music-dsp mailing list and website:
>> subscription info, FAQ, source code archive, list archive, book reviews,
>> dsp links
>> http://music.columbia.edu/cmc/music-dsp
>> http://music.columbia.edu/mailman/listinfo/music-dsp
>> 
> 
> 
> 
> -- 
> Bjorn Roche
> @shimmeoapp
> --
> dupswapdrop -- the music-dsp mailing list and website:
> subscription info, FAQ, source code archive, list archive, book reviews, dsp 
> links
> http://music.columbia.edu/cmc/music-dsp 
> <http://music.columbia.edu/cmc/music-dsp>
> http://music.columbia.edu/mailman/listinfo/music-dsp

--
dupswapdrop -- the music-dsp mailing list and website:
subscription info, FAQ, source code archive, list archive, book reviews, dsp 
links
http://music.columbia.edu/cmc/music-dsp
http://music.columbia.edu/mailman/listinfo/music-dsp

Reply via email to