On Wed, Apr 27, 2005 at 09:02:40PM +0200, julien.breval@tremplin-utc.net wrote:
you should use |vd~| or |delread~| rather than |tabread4~| (this one is for reading in |array| or |table|)
thanks for the tip. It's working much better now. :)
to get a granular effect, change the delay time just before you trigger the amplitude envelope; you can omit the amplitude enveloppe but it's good for fragmenting sounds (some people also add a synchronized filter and/or a pitch shift) most of the time, the enveloppe lasts between 10 and 100 ms; you can use constant or variable enveloppe times (you can also add a random density parameter for the "trigger enveloppe" event)
use some feedback too if you want to get more complex fragmented things
to remove the doppler effect, there are two basic methods: 1. use a sample and hold, like in the sampler.transpose.pd example by Miller Puckette (this method is rather suited to constant enveloppe time / synchronous granular synthesis; the whole granulator is scheduled by a single |phasor~|)
OK, so using a samphold~, phasor~, and vd~, I've got the envelope-less granulator going, but how do I trigger the envelope with sub-block accuracy? I can use vline~ create the envelope itself, but getting it started is the problem.
-spencer
Looking in Frank's tutorial for making a drum machine (/dir/to/pd/doc/tutorials/footils/pddrums), he shows the use of some cool subblock external objects, t3_line~ and t3_bpe (a breakpoint envelope), found in iemlib. These may be what you need to generate interesting envelopes at a granular level.
~Kyle
On 4/27/05, Spencer Russell Spencer.Russell@oberlin.edu wrote:
On Wed, Apr 27, 2005 at 09:02:40PM +0200, julien.breval@tremplin-utc.net wrote:
you should use |vd~| or |delread~| rather than |tabread4~| (this one is for reading in |array| or |table|)
thanks for the tip. It's working much better now. :)
to get a granular effect, change the delay time just before you trigger the amplitude envelope; you can omit the amplitude enveloppe but it's good for fragmenting sounds (some people also add a synchronized filter and/or a pitch shift) most of the time, the enveloppe lasts between 10 and 100 ms; you can use constant or variable enveloppe times (you can also add a random density parameter for the "trigger enveloppe" event)
use some feedback too if you want to get more complex fragmented things
to remove the doppler effect, there are two basic methods: 1. use a sample and hold, like in the sampler.transpose.pd example by Miller Puckette (this method is rather suited to constant enveloppe time / synchronous granular synthesis; the whole granulator is scheduled by a single |phasor~|)
OK, so using a samphold~, phasor~, and vd~, I've got the envelope-less granulator going, but how do I trigger the envelope with sub-block accuracy? I can use vline~ create the envelope itself, but getting it started is the problem.
-spencer
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
For sub-block envelope accuracy, you may be able to use the "Time Tagged Triggers" (T3) objects in IEMLIB by Thomas Musil. Or you will have to write an external. I can't think of another way... anyone else have ideas there?
By the way, I have a survey of quite a few granular objects and patches for Pd on my puredata.info page here: http://www.puredata.info/Members/nmariette
I also updated my nm-grainer patch to incorporate OSC input facilities, changed to horizontal sliders, made the controls a bit more obvious, and removed graph on parent functionality to improve speed. That patch is online at my puredata.info page - look for the April 2005 version.
Nick
On 28/04/2005, at 10:08 AM, Spencer Russell wrote:
On Wed, Apr 27, 2005 at 09:02:40PM +0200, julien.breval@tremplin-utc.net wrote:
you should use |vd~| or |delread~| rather than |tabread4~| (this one is for reading in |array| or |table|)
thanks for the tip. It's working much better now. :)
to get a granular effect, change the delay time just before you trigger the amplitude envelope; you can omit the amplitude enveloppe but it's good for fragmenting sounds (some people also add a synchronized filter and/or a pitch shift) most of the time, the enveloppe lasts between 10 and 100 ms; you can use constant or variable enveloppe times (you can also add a random density parameter for the "trigger enveloppe" event)
use some feedback too if you want to get more complex fragmented things
to remove the doppler effect, there are two basic methods: 1. use a sample and hold, like in the sampler.transpose.pd example by Miller Puckette (this method is rather suited to constant enveloppe time / synchronous granular synthesis; the whole granulator is scheduled by a single |phasor~|)
OK, so using a samphold~, phasor~, and vd~, I've got the envelope-less granulator going, but how do I trigger the envelope with sub-block accuracy? I can use vline~ create the envelope itself, but getting it started is the problem.
-spencer
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Selon Spencer Russell Spencer.Russell@oberlin.edu:
OK, so using a samphold~, phasor~, and vd~, I've got the envelope-less granulator going, but how do I trigger the envelope with sub-block accuracy? I can use vline~ create the envelope itself, but getting it started is the problem.
For synchronous granular synthesis, the most straightforward way to set up the envelope is to use the scheduling |phasor~|. The phasor outputs signal ramps for 0 to 1, that can be used two different ways for playing an envelope:
sample). You can fill it manually or by a mathematical function (see how the analysis windows are done in the fft examples, it's the same). Then, if the duration of the buffer is N, just |*~ N| the output of the |phasor~| and use tabread4~ for reading the table
[r~ phase] <--- sent by the scheduling phasor | [-~ 0.5] | [wrap~] | [-~ 0.5] | | [r~ sharpness] <-- 0 for silence, float >= 1 for getting the envelope | | [*~ ] | [clip~ -0.5 0.5] | [cos~] | [-~ 1] | [*~ -0.5] | [outlet~] <--- output of the envelope (multiply your signal by it)
(sharpness: if you use 1, the envelope has a cosine shape, and becomes more stiff if you increase this parameter)
The iem_t3_lib works very well but you will only need it for below 1.5 ms time precision. It's only useful if you use [line~]- and [del]-based enveloppes (multisegment envelopes, like AD, AHD, ADSR, etc) for your granulator (in this case, you can have different durations for each granular particle). Check the CPU too.
regards, -j
On Thu, Apr 28, 2005 at 02:43:19PM +0200, julien.breval@tremplin-utc.net wrote:
- use cos~ for making the envelope (adapted from an old example in pd-0.36):
[r~ phase] <--- sent by the scheduling phasor | [-~ 0.5] | [wrap~] | [-~ 0.5] | | [r~ sharpness] <-- 0 for silence, float >= 1 for getting the envelope | | [*~ ] | [clip~ -0.5 0.5] | [cos~] | [-~ 1] | [*~ -0.5] | [outlet~] <--- output of the envelope (multiply your signal by it)
Thanks for all the info! I ended up simplifying a bit(but I think this patch does pretty much the same thing):
[phasor~] | [*~ 0.5] | [-~ 0.25] | [cos~] | | [r sharpness] | | [*~] | [clip~ 0 1] | [outlet]