Hello!
Thanks to everybody for the quick solutions for the clicking problem... I have a new question, is there a way to perform timestretching on arrays? Or on anything, this would probably be the final step for having a great live slicer!
thanx!
Rodrigo
Llamadas gratis de PC a PC http://imagine-msn.com/messenger/launch80/default.aspx?locale=es-mx
Time stretching is usually done one of two ways, both of which involve a kind of "windowing" of the array: you can use an FFT analysis (of which there are examples which come with PD), or you can use granulation.
In general, FFT is more accurate, but more expensive. Granulation is used to squeeze the samples in Ableton Live into the BPMs/divisions that one wants. It can also be fairly accurate, the smaller the grains, the more grains are used and the the more overlaps the grains have.
Check my ParticleChamber abstraction for a use of windowed array granulation for time domain manipulation independent of pitch.
http://www.puredata.org/Members/derek/Particlechamber.zip/ http://www.puredata.info/Members/derek/screenshot.png
best, d.
F R E N K wrote:
Hello!
Thanks to everybody for the quick solutions for the clicking problem... I have a new question, is there a way to perform timestretching on arrays? Or on anything, this would probably be the final step for having a great live slicer!
thanx!
Rodrigo
Con Windows Live Spaces en Prodigy/MSN abre tu mundo y crea tu propio espacio. Es gratis http://spaces.live.com/
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
i'd love it if someone would actually explain the ableton process fully or code it in pd. everyone always just says 'they do it like this, it's easy'....but no-one actually makes it as far as a patch.
ParticleChamber does it. The only thing missing is an adjustment to the pointer to make the sample loop, and maybe some math to calculate divisions of BPM. It's easy ;-)
d.
hard off wrote:
i'd love it if someone would actually explain the ableton process fully or code it in pd. everyone always just says 'they do it like this, it's easy'....but no-one actually makes it as far as a patch.
cool!!! Can you post a simple patch that does abelton-esue time-stretching on a loop?
Not right now, but if you look at the subpatch connected to the [grid] object in ParticleChamber, you can probably work it out yourself.
Of course, beat-analysis not included, it's just the raw timestretching.
best, d.
hard off wrote:
cool!!! Can you post a simple patch that does abelton-esue time-stretching on a loop?
On Tue, 2007-10-02 at 23:18 +0900, hard off wrote:
cool!!! Can you post a simple patch that does abelton-esue time-stretching on a loop?
not that it is very important in that case, but could you quote, what was going on before on that thread? it's pretty hard to figure out, what you find so cool. and it interests me as well, of course ;-)
roman
Telefonate ohne weitere Kosten vom PC zum PC: http://messenger.yahoo.de
roman, sorry i use gmail, which has a nice threaded view for mail. i forgot that not everyone gets this function.
derek wrote:
"Time stretching is usually done one of two ways, both of which involve a kind of "windowing" of the array: you can use an FFT analysis (of which there are examples which come with PD), or you can use granulation.
In general, FFT is more accurate, but more expensive. Granulation is used to squeeze the samples in Ableton Live into the BPMs/divisions that one wants. It can also be fairly accurate, the smaller the grains, the more grains are used and the the more overlaps the grains have.
Check my ParticleChamber abstraction for a use of windowed array granulation for time domain manipulation independent of pitch.
http://www.puredata.org/Members/derek/Particlechamber.zip/ http://www.puredata.info/Members/derek/screenshot.png
and then i wrote:
"i'd love it if someone would actually explain the ableton process fully or code it in pd. everyone always just says 'they do it like this, it's easy'....but no-one actually makes it as far as a patch."
to which derek replied:
"ParticleChamber does it. The only thing missing is an adjustment to the pointer to make the sample loop, and maybe some math to calculate divisions of BPM. It's easy ;-)"
and then i enthusiastically said:
"cool!!! Can you post a simple patch that does abelton-esue time-stretching on a loop?"
derek came and dashed all of my hopes with:
"Not right now, but if you look at the subpatch connected to the [grid] object in ParticleChamber, you can probably work it out yourself.
Of course, beat-analysis not included, it's just the raw timestretching."
Hey there,
hard off wrote:
derek came and dashed all of my hopes with:
"Not right now, but if you look at the subpatch connected to the [grid] object in ParticleChamber, you can probably work it out yourself.
Of course, beat-analysis not included, it's just the raw timestretching."
Hope I didn't dash all of them!
It's only that I never use this beatmatching thing, in PD or in Ableton. Most of the time I spent with Ableton, I was trying to NOT have it BPM-sync things! So I don't have a handy patch ready, and I'm waaaaaay too busy to cook one up for the list archives at this moment. Of course, if you'd like to commission me to customize ParticleChamber, we can discuss it ;-) Otherwise, PD helps those that help themselves...
best, d.
On Tue, 2007-10-02 at 23:18 +0900, hard off wrote:
cool!!! Can you post a simple patch that does abelton-esue time-stretching on a loop?
Isn't the technique demonstrated in the Pd help patches B14.sampler.rockafella.pd? Or have I misunderstood the question?
Jamie
No, he's talking about changing sample length and pitch independently. Or changing length without changing pitch at all. This is done with FFT or granulation, not just changing the playback rate alone.
best, d.
Jamie Bullock wrote:
On Tue, 2007-10-02 at 23:18 +0900, hard off wrote:
cool!!! Can you post a simple patch that does abelton-esue time-stretching on a loop?
Isn't the technique demonstrated in the Pd help patches B14.sampler.rockafella.pd? Or have I misunderstood the question?
Jamie
On Wed, 2007-10-03 at 16:36 +0200, Derek Holzer wrote:
No, he's talking about changing sample length and pitch independently. Or changing length without changing pitch at all. This is done with FFT or granulation,
...but that's exactly what sampler-rockafella does.
not just changing the playback rate alone.
It uses a windowed overlap-add. I suppose that's quasi-granular.
best,
Jamie
a while ago i have built a little, 'quick and dumb' beatloop which uses not exactly the same techniques used in live (it is missing the tempo-warp-stuff), but does basicly the same thing as reaktor and acid do. without any analysis though, so transients are not taken into acount. i have built this one because i was unhappy whith the soundquality of a 'rockafella'-based aproach, at least when using percussive loops.
in short it is: cut a loop into 1/16 (or whatever) slices, and trigger these slices on every 1/16.
sounds not much worse then live (1.x), within a reasonable tempo range.
i think live uses quite a similar method in its 'beat-mode'. maybe with a little sample-analysis for finding ideal (or at least better) start- and loop points (instead of just playing on) for the 'grains'. 'warping' could possibly be implemented with a variable bpm...
the other live-modes are probably something similar to the 'rockafella'-method, and something 'graincloud'-like ('texture'-mode). newer versions of live include also a frequency-domain based method, but i have not yet heard this one.
since it is not very big, i hope it is ok to attach the patch. (sorry, a little messy as usual ;-))
bis denn! martin
#N canvas 162 38 468 508 10; #X obj 18 189 dac~; #X obj 17 21 loadbang; #X msg 17 46 120; #N canvas 105 38 1142 827 beatloop1 0; #X floatatom 295 108 3 0 0 0 - - -; #X obj 128 114 hsl 160 8 3 128 0 1 empty empty olen -26 4 0 8 -262144 -1 -1 1700 1; #X obj 392 -79 int; #X obj 323 128 hsl 64 8 0 1 0 0 empty empty empty -2 -6 0 8 -262144 -258699 -1 3544 1; #X obj 278 -205 + 1; #X obj 227 -209 float; #X obj 278 -151 mod; #X obj 198 -410 inlet; #X obj 353 -318 inlet; #X text 238 -409 <-bpm; #X text 393 -318 <-reset/sync; #X msg 199 -367 1; #X obj 223 -343 /; #X obj 196 -388 t f f; #X obj 228 -318 * 15000; #X obj 341 -267 t b f; #X obj 223 -240 metro 125; #X msg 347 -292 -2; #X text 147 -318 1/16 in ms; #X text 168 -208 counter; #X obj 100 290 outlet~; #X obj 372 -123 mod 2; #N canvas 0 27 1249 889 sample 0; #X obj 92 430 soundfiler; #X obj 71 284 openpanel; #X obj 362 306 loadbang; #X obj 383 112 bng 15 250 50 0 empty empty load 0 -6 0 8 -262144 -1 -1; #X obj 109 240 splitfilename; #X msg 103 454 set $1; #X msg 102 503 0; #X obj -247 177 inlet; #X obj 468 1147 outlet~; #X obj 41 342 t b b a; #X obj 319 342 t b b; #X msg -46 712 0; #X obj 130 610 pack; #X obj 239 489 / 44.1; #X msg 143 674 0 0; #X msg 147 635 set $1 $2; #X obj 178 545 *; #X obj 201 468 t b f b; #X msg 554 403 1.05946; #X obj 560 432 pow; #X obj 544 339 * -1; #X obj 44 981 *~; #X msg -13 680 -1 17.8636; #X obj 250 108 hsl 128 8 100 160 0 1 empty empty dc -16 4 0 8 -262144 -1 -1 5300 1; #X obj -24 944 *~; #X obj 0 292 dbtorms; #X obj -143 345 moses 0.001; #X obj -135 685 pack; #X obj 250 120 hsl 128 8 100 150 0 1 empty empty at -16 4 0 8 -262144 -1 -1 6900 1; #X obj -123 305 dbtorms; #X msg -131 751 1 22.8175; #X msg -131 719 set $1 $2; #X obj -73 454 t b b f; #X obj -24 567 * -1; #X msg -7 635 set $1 $2; #X obj -4 606 pack; #X obj -18 913 +~; #X text -130 888 attack; #X text 49 882 release; #X obj 591 203 inlet; #X obj 543 367 t b f; #X msg 71 652 0; #X obj 41 543 delay 1; #X obj 41 566 t b b; #X obj 400 182 inlet; #X obj -152 201 inlet; #X text 635 202 tp (semitones); #X text -206 176 trigger/vel (0..1); #X obj 123 536 *; #X msg 36 597 set $1; #X obj 169 580 *; #X obj 302 625 -; #X msg 291 592 1; #X text -111 202 duration (ms); #X obj 276 546 t b b f; #X obj 373 427 float; #X msg -224 409 bang; #X symbolatom 102 114 18 0 0 0 - - -; #X text 442 183 sample start (percent); #X obj 346 492 / 100; #X msg 238 200 set symbol $1; #X obj 293 241 t b a; #X obj 469 1112 +~; #X obj -223 436 delay 1; #X obj -290 103 inlet; #X obj -278 250 pack; #X obj -278 272 route 0 1; #X obj -192 238 pack; #X obj -192 260 route 0 1; #X obj 398 221 pack; #X obj 398 243 route 0 1; #X obj 569 233 pack; #X obj 569 255 route 0 1; #X msg 966 504 0; #X msg 828 713 0; #X obj 1004 611 pack; #X obj 1113 490 / 44.1; #X msg 1017 675 0 0; #X msg 1021 636 set $1 $2; #X obj 1052 546 *; #X obj 1075 469 t b f b; #X msg 1295 374 1.05946; #X obj 1292 408 pow; #X obj 1285 310 * -1; #X msg 861 681 -1 17.8636; #X obj 764 402 moses 0.001; #X obj 745 683 pack; #X msg 743 752 1 22.8175; #X msg 743 720 set $1 $2; #X obj 801 455 t b b f; #X obj 850 568 * -1; #X msg 867 636 set $1 $2; #X obj 862 605 pack; #X obj 856 914 +~; #X text 744 889 attack; #X text 923 883 release; #X obj 1284 338 t b f; #X msg 945 653 0; #X obj 915 544 delay 1; #X obj 915 567 t b b; #X obj 997 537 *; #X msg 910 598 set $1; #X obj 1043 581 *; #X obj 1176 626 -; #X msg 1165 593 1; #X obj 1150 547 t b b f; #X obj 1232 443 float; #X msg 770 433 bang; #X obj 1220 493 / 100; #X obj 735 512 delay 1; #X text 625 553 2nd voice ->; #X obj 953 959 *~; #X obj 1018 798 vline~; #X obj 166 786 vline~; #X obj 48 862 vline~; #X obj -107 862 vline~; #X obj 764 861 vline~; #X obj 921 863 vline~; #X msg 160 275 set read -resize $1 mbloop1; #X msg 86 308 set read -resize $1 mbloop1; #X obj 451 690 table mbloop1; #X obj 1019 877 tabread4~ mbloop1; #X obj 141 882 tabread4~ mbloop1; #X text -247 105 <-voice nr; #X msg 215 371 read -resize 0 mbloop1; #X msg 91 400 read -resize 0 mbloop1; #X msg 123 37 symbol 0; #X connect 0 0 5 0; #X connect 1 0 119 0; #X connect 1 0 4 0; #X connect 2 0 10 0; #X connect 2 0 126 0; #X connect 3 0 1 0; #X connect 4 1 118 0; #X connect 4 1 60 0; #X connect 5 0 6 0; #X connect 5 0 73 0; #X connect 6 0 13 0; #X connect 6 0 12 0; #X connect 6 0 48 1; #X connect 7 0 65 1; #X connect 9 0 124 0; #X connect 9 0 6 0; #X connect 9 0 73 0; #X connect 9 1 125 0; #X connect 9 2 125 0; #X connect 10 0 6 0; #X connect 10 0 73 0; #X connect 10 1 124 0; #X connect 10 1 125 0; #X connect 11 0 114 0; #X connect 11 0 115 0; #X connect 12 0 15 0; #X connect 13 0 16 1; #X connect 14 0 113 0; #X connect 15 0 14 0; #X connect 16 0 50 0; #X connect 17 0 12 0; #X connect 17 1 16 0; #X connect 17 2 6 0; #X connect 18 0 19 0; #X connect 19 0 55 0; #X connect 20 0 40 0; #X connect 21 0 62 0; #X connect 22 0 114 0; #X connect 23 0 25 0; #X connect 24 0 21 0; #X connect 25 0 35 1; #X connect 25 0 92 1; #X connect 26 1 32 0; #X connect 26 1 42 0; #X connect 26 1 56 0; #X connect 27 0 31 0; #X connect 28 0 29 0; #X connect 29 0 27 1; #X connect 29 0 86 1; #X connect 30 0 115 0; #X connect 31 0 30 0; #X connect 32 0 30 0; #X connect 32 1 11 0; #X connect 32 2 27 0; #X connect 32 2 33 0; #X connect 33 0 35 0; #X connect 34 0 22 0; #X connect 35 0 34 0; #X connect 36 0 24 0; #X connect 36 0 24 1; #X connect 39 0 71 1; #X connect 40 0 18 0; #X connect 40 1 19 1; #X connect 41 0 113 0; #X connect 42 0 43 0; #X connect 43 0 14 0; #X connect 43 1 41 0; #X connect 44 0 69 1; #X connect 45 0 67 1; #X connect 48 0 49 0; #X connect 49 0 41 0; #X connect 50 0 12 1; #X connect 51 0 50 1; #X connect 52 0 51 0; #X connect 54 0 55 0; #X connect 54 1 52 0; #X connect 54 2 51 1; #X connect 55 0 17 0; #X connect 56 0 63 0; #X connect 59 0 54 0; #X connect 59 0 48 0; #X connect 60 0 61 0; #X connect 61 0 126 0; #X connect 61 1 126 0; #X connect 62 0 8 0; #X connect 63 0 22 0; #X connect 64 0 65 0; #X connect 64 0 67 0; #X connect 64 0 69 0; #X connect 64 0 71 0; #X connect 65 0 66 0; #X connect 66 0 26 0; #X connect 66 1 85 0; #X connect 67 0 68 0; #X connect 68 0 63 1; #X connect 68 1 109 1; #X connect 69 0 70 0; #X connect 70 0 59 0; #X connect 70 1 108 0; #X connect 71 0 72 0; #X connect 72 0 20 0; #X connect 72 1 83 0; #X connect 73 0 76 0; #X connect 73 0 75 0; #X connect 73 0 100 1; #X connect 74 0 116 0; #X connect 74 0 117 0; #X connect 75 0 78 0; #X connect 76 0 79 1; #X connect 77 0 112 0; #X connect 78 0 77 0; #X connect 79 0 102 0; #X connect 80 0 75 0; #X connect 80 1 79 0; #X connect 80 2 73 0; #X connect 81 0 82 0; #X connect 82 0 106 0; #X connect 83 0 96 0; #X connect 84 0 117 0; #X connect 85 1 89 0; #X connect 85 1 98 0; #X connect 85 1 107 0; #X connect 86 0 88 0; #X connect 87 0 116 0; #X connect 88 0 87 0; #X connect 89 0 87 0; #X connect 89 1 74 0; #X connect 89 2 86 0; #X connect 89 2 90 0; #X connect 90 0 92 0; #X connect 91 0 84 0; #X connect 92 0 91 0; #X connect 93 0 111 0; #X connect 96 0 81 0; #X connect 96 1 82 1; #X connect 97 0 112 0; #X connect 98 0 99 0; #X connect 99 0 77 0; #X connect 99 1 97 0; #X connect 100 0 101 0; #X connect 101 0 97 0; #X connect 102 0 75 1; #X connect 103 0 102 1; #X connect 104 0 103 0; #X connect 105 0 106 0; #X connect 105 1 104 0; #X connect 105 2 103 1; #X connect 106 0 80 0; #X connect 107 0 109 0; #X connect 108 0 105 0; #X connect 108 0 100 0; #X connect 109 0 84 0; #X connect 111 0 62 1; #X connect 112 0 121 0; #X connect 113 0 122 0; #X connect 114 0 36 1; #X connect 115 0 36 0; #X connect 116 0 93 0; #X connect 117 0 93 1; #X connect 118 0 124 0; #X connect 119 0 9 0; #X connect 121 0 111 1; #X connect 122 0 21 1; #X connect 125 0 0 0; #X connect 126 0 57 0; #X coords 0 -1 1 1 310 30 1 100 100; #X restore 105 139 pd sample; #X obj 348 -48 /; #X msg 347 -72 100; #X obj 302 -133 t b f; #X obj 308 -20 *; #X obj 308 5 t b f; #X msg 289 34 1; #X floatatom 295 124 3 0 0 0 - - -; #X obj 128 128 hsl 160 8 3 128 0 1 empty empty llen -26 4 0 8 -262144 -1 -1 1700 1; #X obj 70 68 int; #X obj 387 74 /; #X obj 323 114 hsl 64 8 0 50 0 0 empty empty ofst -2 -6 0 8 -262144 -1 -1 0 1; #X obj 337 66 +; #X text 390 105 tp; #X obj 279 -176 +; #X obj 411 -241 inlet; #X text 455 -241 pos offset (1/16); #X obj 514 -208 inlet; #X text 565 -209 tp (semitones , -36..36); #X floatatom 392 122 3 -36 36 0 - - -; #X obj 515 138 hsl 73 8 -36 36 0 1 empty empty empty -2 -6 0 8 -262144 -1 -1 3600 1; #X obj 501 83 loadbang; #X obj 478 161 int; #X connect 1 0 25 0; #X connect 2 0 0 0; #X connect 2 0 23 1; #X connect 4 0 5 1; #X connect 4 0 21 0; #X connect 4 0 36 0; #X connect 5 0 4 0; #X connect 6 0 32 0; #X connect 6 0 26 0; #X connect 7 0 13 0; #X connect 8 0 17 0; #X connect 11 0 12 0; #X connect 12 0 14 0; #X connect 13 0 11 0; #X connect 13 1 12 1; #X connect 14 0 22 2; #X connect 14 0 16 1; #X connect 15 0 16 0; #X connect 15 1 5 0; #X connect 16 0 5 0; #X connect 17 0 15 0; #X connect 21 0 22 0; #X connect 22 0 20 0; #X connect 23 0 26 1; #X connect 24 0 23 0; #X connect 25 0 24 0; #X connect 25 1 2 0; #X connect 26 0 27 0; #X connect 27 0 28 0; #X connect 27 1 34 0; #X connect 28 0 22 1; #X connect 30 0 31 0; #X connect 31 0 29 0; #X connect 31 0 6 1; #X connect 31 0 32 1; #X connect 32 0 3 0; #X connect 33 0 34 1; #X connect 34 0 22 3; #X connect 36 0 6 0; #X connect 37 0 36 1; #X connect 39 0 41 0; #X connect 41 0 42 0; #X connect 41 0 22 4; #X connect 42 0 44 1; #X connect 43 0 44 0; #X connect 44 0 41 0; #X coords 0 -1 1 1 320 70 1 100 100; #X restore 17 78 pd beatloop1; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 2 0 3 1; #X connect 3 0 0 0; #X connect 3 0 0 1;
hard off a écrit :
cool!!! Can you post a simple patch that does abelton-esue time-stretching on a loop?
Make it simple might be very difficult because ableton uses several kinds of time stretching, you can simply pitch the sound, or use the rockafella timestretching patch in the tutorial, for two of the several time stretching modes of ableton.
Also Live saves a temporary file in the hard drive that has all necessary data for time stretching a sound in real time. The live's versatile interface permits a user to find with ease the stretching points, maybe some datastructure magicks could do the trick?
The complexity of such patch might drive to a bunch of abstractions, external files, many things that makes this project looking like something not simple at all, :)
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
On Tue, Oct 02, 2007 at 11:07:59AM +0200, Derek Holzer wrote:
Time stretching is usually done one of two ways, both of which involve a kind of "windowing" of the array: you can use an FFT analysis (of which there are examples which come with PD), or you can use granulation.
In general, FFT is more accurate, but more expensive. Granulation is used to squeeze the samples in Ableton Live into the BPMs/divisions that one wants. It can also be fairly accurate, the smaller the grains, the more grains are used and the the more overlaps the grains have.
Check my ParticleChamber abstraction for a use of windowed array granulation for time domain manipulation independent of pitch.
http://www.puredata.org/Members/derek/Particlechamber.zip/ http://www.puredata.info/Members/derek/screenshot.png
Do you mean the "unauthorized" grid plugin?
If it is "unauthorized", should I be using it? Is there something wrong with it? Are there licensing issues?
F R E N K wrote:
Hello!
Thanks to everybody for the quick solutions for the clicking problem... I have a new question, is there a way to perform timestretching on arrays? Or on anything, this would probably be the final step for having a great live slicer!
thanx!
Rodrigo
Con Windows Live Spaces en Prodigy/MSN abre tu mundo y crea tu propio espacio. Es gratis http://spaces.live.com/
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
-- derek holzer ::: http://www.umatic.nl ::: http://blog.myspace.com/macumbista ---Oblique Strategy # 175: "What are the sections sections of? Imagine a caterpillar moving"
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Hi Ken,
Ken Restivo wrote:
Do you mean the "unauthorized" grid plugin?
If it is "unauthorized", should I be using it?
"Unauthorized" just means that the author is more than a bit of an anarchist who does not recognize "authority". So it depends on your attitude towards authority.
Is there something wrong with it?
Nothing that I know of. It's worked fine for me for years. If you're using Windows, it might be a bit harder to get a hold of (again, issues with "authority"), but as far as I know it's in PD-Extended.
Are there licensing issues?
Ahhh... this depends on who you ask. But in this case I recommend the list archives, since a summary would only bring up the worst in some rather intense personality clashes we've seen lately. Keywords "PiDiP" + "license".
d.
This patch in Audio Examples in Pd would do the fftbased stretching and transposing
j
I07.phase.vocoder.pd
On 10/7/07, Derek Holzer derek@umatic.nl wrote:
Hi Ken,
Ken Restivo wrote:
Do you mean the "unauthorized" grid plugin?
If it is "unauthorized", should I be using it?
"Unauthorized" just means that the author is more than a bit of an anarchist who does not recognize "authority". So it depends on your attitude towards authority.
Is there something wrong with it?
Nothing that I know of. It's worked fine for me for years. If you're using Windows, it might be a bit harder to get a hold of (again, issues with "authority"), but as far as I know it's in PD-Extended.
Are there licensing issues?
Ahhh... this depends on who you ask. But in this case I recommend the list archives, since a summary would only bring up the worst in some rather intense personality clashes we've seen lately. Keywords "PiDiP" + "license".
d.
-- derek holzer ::: http://www.umatic.nl ::: http://blog.myspace.com/macumbista ---Oblique Strategy # 162: "Try faking it"
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list