Hi,
Just in case this could be useful to someone, here's what i've ended up doing in order to reduce the click at the looping point :
- I decide of the length and the starting point of the loop in a table.
- Then i play the "sample" plus an extra X ms at the end using another phasor object (at a frequency adjusted for the extra X ms).
- This gets written into another table, about twice as long, and the sound is directly envelopped before the tabwrite~ object. The enveloppe is made using an expr~ object and a cos shape for the fade-in / fade-out.
- The actual, definitive loop is play from this last table, using a phasor that runs at half the speed of the original phasor, and which reads two phase-inversed "copies" of the same loop in the table, plus the silent rest of the table. This means that the loop is played once, and when it is X ms far from the end the second, phase-inversed loop starts playing. While the phase-inversed loop plays the second half of the table (which has to be "const 0" 'ed beforehand) plays with no effect on the output. This is really just cross-fading between two tables, only there only one table and there is not need to program an actual cross-fader. This works backwards just fine.
My goal was to reduce the clicks in order to get nice drones using a voice as a source. This technique work fine with fairly long cross-fade times (above 20 or 30 ms). I'm quite happy with the result.
Then again, you're perfectly right about the difficulty of making a nice loop. The fact that the click is removed doesn't garantee that the loop will be percieved as smooth.
Cheers!
Pierre
-------- Original Message --------Some hints which can be useful both with the source material and the looping algorithm (but as Andy says much depends on the source):
Subject: Re: [PD] Loop point : a way to make it smooth?
From: Andy Farnell <padawan12@obiwannabe.co.uk>
To: Pierre Massat <pimassat@gmail.com>
CC: pd-list@iem.at
Date: 10/10/2010 09:48 PM
Ah yes, I see the constraint,
well, what kind of source material is it?
There's the zigzag (forward and back) method that
always seems to work well with textures and pad
like sounds. Have you tried that?
Andy
On Sun, 10 Oct 2010 21:32:21 +0200
Pierre Massat<pimassat@gmail.com> wrote:
I think i know what you mean. The problem here is that it has to be live
somehow. I don't how they do it in live loopers like the ones some singers
use on stage.
Thanks for your reply anway!
2010/10/10 Andy Farnell<padawan12@obiwannabe.co.uk>
There's a simple way to put this.
There is an art to looping.
- zeros: the start and end of the loop should ideally be a zero (or be exactly the same number). Some sound editors (like mhwaveedit on linux) will find zero-crossings for you. Another way to go might be "cross-fade" at the start and end of the loop: that is have a small fade-in at the beginning and a short fade out at the end, but results vary a lot.
- Finding the right "period" for the loop, on some sounds you'll want something very short on some pretty long
- Avoid looping "attacks" part, for example of a piano sample avoid all the part at the beginning and loop only when the sound "stabilises"
Lorenzo
It should be possible in a simple sound editor.
You might find the best way (to save time)
rather than spending dozens of hours to
improve the technicalities of your looping code,
is to give it to someone who is great
at making loops who will do it in 20 seconds.
It's also worth saying that it's very much about
the source material. Some things are just not
loopable in the way you think they might/should
be. It takes a lot of practice to find out
and hear immediately what needs doing.
Andy
On Sun, 10 Oct 2010 20:55:00 +0200
Pierre Massat<pimassat@gmail.com> wrote:
Hi all!piece
I've made a looping patch for a friend who needs to create a musical
for her school. She's complaining about the fact that she hears when theto
sample loops back to it's beginning. I tried to envelop it using a table
control the volume which just ramps up from 0 to 1 during X ms (X beingswitch
adjustable), outputs 1 during most of the sample except for the last X ms
where it ramps back down. The ramps are not linear, they have sort of an
inverse square shape. This doesn't really do the trick.
I've been thinking of writing the sample to 2 tables, one delayed by the
length of the sample minus X ms, so that i can play both tables and
between the two to avoid having to bring the volume to 0 at one point.The
sample needs to be X ms longer.
Is there another way to go? I've been doing some research on the web, but
i've found no satisfying answer.
Thanks!
Pierre
--
Andy Farnell<padawan12@obiwannabe.co.uk>
_______________________________________________
Pd-list@iem.at mailing list
UNSUBSCRIBE and account-management ->
http://lists.puredata.info/listinfo/pd-list