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