Forums > MaxMSP

pure-data pitch transposer

March 15, 2008 | 6:30 pm

hi all i was trying to make this patch in max/msp, actually i’m missing something about pd objects and stuff..for sure for some of you it will take just a minute..thanks


March 21, 2008 | 2:40 am


March 21, 2008 | 9:37 am

Thank you very much for the hint Michael!
my question is: would be hard to have an object like groove or play or anything else that does play with this granular technique a buffer content..?..
i mean, i think msp should have a proper granular sampler object with built-in transposition time-compression..


March 21, 2008 | 1:37 pm


March 21, 2008 | 4:13 pm

…or Nathan Wolek’s wonderful granulation toolkit.

http://www.nathanwolek.com/software.html

With all these options, I don’t see the point of
wanting another MSP object, personally. There are
better things that one could spend one’s time
doing that *no one else* has already done or provided.

That’s just me, I’m sure


March 21, 2008 | 5:38 pm

..mmm well i have to say that i’ve spent many many hours trying to make a satisfying granular sampler patch that sounds good to me, most of times they sound too metallic (for me would be great to achieve what Radial does, is it plain-max objects?)..i know wolek granular toolkit and they are great..but you know what, max is great and it’s endless possibilities are sometimes overwhelming..is it worth spending all that time in trial-error process just to make a granular-sampler instead of making music or trying to do it?!
;)


March 21, 2008 | 5:51 pm

..i mean, i prefer spend time thinking of generative sequencencers and all that stuff that common commercial tools are not made for..as we have groove~ or play~ for me would be great to have a granular-sampler object..sure that’s my humble opinion
best
michele


March 21, 2008 | 6:06 pm

that’s actually is the best sounding patch i can get from this method..the first slice played sometimes has a weak attack even with a small window-size..i can imagine why..

max v2;
#N vpatcher 59 44 769 788;
#P origin 0 -59;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P hidden message 244 59 14 196617 6;
#P newex 439 82 29 196617 t b f;
#P newex 439 137 27 196617 /;
#P number 540 35 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 439 56 91 196617 expr pow(2\,$i1);
#B color 5;
#P user multiSlider 439 35 100 16 0. 8. 1 2664 47 0 0 2 0 0 0;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P hidden message 219 65 14 196617 1;
#P hidden message 167 66 14 196617 1;
#P hidden newex 201 37 48 196617 loadbang;
#P hidden message 201 64 14 196617 0;
#P newex 333 437 55 196617 sah~ 0.01;
#P newex 422 376 73 196617 receive~ gdur;
#P newex 383 577 31 196617 cos~;
#P newex 383 553 41 196617 *~ 0.5;
#P newex 383 530 39 196617 -~ 0.5;
#P newex 383 507 84 196617 receive~ phase2;
#P newex 325 603 27 196617 *~;
#P newex 325 552 52 196617 play~ buf;
#P newex 325 375 92 196617 receive~ play-pos;
#P newex 325 498 27 196617 +~;
#P newex 422 453 27 196617 *~;
#P newex 500 377 84 196617 receive~ phase2;
#P newex 422 421 55 196617 sah~ 0.01;
#P newex 28 443 55 196617 sah~ 0.01;
#P newex 113 379 73 196617 receive~ gdur;
#P newex 512 178 27 196617 sig~;
#P newex 512 204 55 196617 send~ gdur;
#P newex 466 200 27 196617 t b f;
#P flonum 385 57 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 439 231 116 196617 expr 1000. / $f1 * $f2;
#P flonum 439 161 39 9 1. 0 1 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 157 136 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 244 128 27 196617 t i i;
#P newex 244 154 49 196617 !/ 1000.;
#P button 86 92 15 0;
#P user ezdac~ 14 667 58 700 0;
#P newex 16 630 27 196617 +~;
#P newex 74 580 31 196617 cos~;
#P newex 74 556 41 196617 *~ 0.5;
#P newex 74 533 39 196617 -~ 0.5;
#P newex 74 510 78 196617 receive~ phase;
#P newex 16 606 27 196617 *~;
#P newex 16 555 52 196617 play~ buf;
#P newex 16 378 92 196617 receive~ play-pos;
#P newex 16 501 27 196617 +~;
#P newex 113 456 27 196617 *~;
#P newex 191 380 78 196617 receive~ phase;
#P newex 113 424 55 196617 sah~ 0.01;
#P newex 18 145 73 196617 s bufferlength;
#P newex 18 120 105 196617 info~ buf;
#P message 18 66 43 196617 replace;
#P newex 18 90 61 196617 buffer~ buf;
#P newex 505 343 70 196617 send~ phase2;
#P newex 505 315 69 196617 pong~ 1 0. 1.;
#P newex 505 293 40 196617 +~ 0.5;
#P newex 428 344 64 196617 send~ phase;
#P newex 428 267 46 196617 phasor~;
#P newex 207 227 43 196617 s speed;
#P newex 157 318 78 196617 send~ play-pos;
#P newex 157 257 27 196617 *~;
#P newex 157 227 46 196617 phasor~;
#P newex 244 173 29 196617 t b f;
#P number 244 111 66 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 244 85 73 196617 r bufferlength;
#P newex 157 206 29 196617 * 1.;
#P comment 440 20 62 196617 window size;
#P comment 156 114 54 196617 loop speed;
#P comment 385 41 37 196617 pitch;
#P connect 31 0 32 0;
#P connect 44 0 23 0;
#P connect 23 0 25 0;
#P connect 25 0 26 0;
#P connect 26 0 31 0;
#P connect 17 0 16 0;
#P connect 33 0 18 0;
#P connect 16 1 18 0;
#P connect 18 6 19 0;
#P connect 24 0 44 0;
#P fasten 22 0 23 1 118 489 38 489;
#P fasten 30 0 26 1 79 603 38 603;
#P connect 51 0 31 1;
#P connect 31 0 32 1;
#P fasten 21 0 44 1 196 437 78 437;
#P connect 27 0 28 0;
#P connect 28 0 29 0;
#P connect 29 0 30 0;
#P connect 43 0 20 0;
#P connect 20 0 22 0;
#P fasten 21 0 22 1 196 447 135 447;
#P hidden connect 60 0 36 0;
#P connect 6 0 3 0;
#P connect 36 0 3 0;
#P connect 3 0 7 0;
#P connect 7 0 8 0;
#P connect 8 0 9 0;
#P connect 21 0 20 1;
#P hidden connect 59 0 60 0;
#P fasten 35 1 8 1 266 148 299 148 299 251 179 251;
#P connect 6 1 3 1;
#P hidden connect 58 0 7 1;
#P hidden connect 59 0 58 0;
#P connect 3 0 10 0;
#P hidden connect 59 0 61 0;
#P hidden connect 59 0 67 0;
#P connect 4 0 5 0;
#P connect 5 0 35 0;
#P connect 35 0 34 0;
#P connect 34 0 6 0;
#P connect 57 0 48 0;
#P connect 48 0 50 0;
#P connect 50 0 51 0;
#P connect 49 0 57 0;
#P fasten 47 0 48 1 427 486 347 486;
#P fasten 55 0 51 1 388 600 347 600;
#P fasten 46 0 57 1 505 434 383 434;
#P connect 52 0 53 0;
#P connect 53 0 54 0;
#P connect 54 0 55 0;
#P hidden connect 61 0 39 0;
#P connect 56 0 45 0;
#P connect 45 0 47 0;
#P connect 38 0 11 0;
#P connect 11 0 12 0;
#P hidden connect 67 0 62 0;
#P connect 62 0 63 0;
#P connect 63 0 66 0;
#P fasten 4 0 65 0 249 107 444 107;
#P connect 66 0 65 0;
#P fasten 65 0 37 0 444 160;
#P fasten 37 0 38 0 444 173 444 173;
#P connect 40 0 38 0;
#P fasten 46 0 47 1 505 444 444 444;
#P connect 66 1 65 1;
#P hidden connect 58 0 11 1;
#P fasten 39 0 40 0 390 186 471 186;
#P connect 46 0 45 1;
#P connect 11 0 13 0;
#P connect 13 0 14 0;
#P connect 14 0 15 0;
#P connect 37 0 42 0;
#P connect 42 0 41 0;
#P connect 63 0 64 0;
#P fasten 40 1 38 1 488 224 550 224;
#P pop;


March 22, 2008 | 10:27 am

hi michele, just some thoughts:

On 21 Mar 2008, at 19:06, mic wrote:
>
> that’s actually is the best sounding patch i can get from this
> method..the first slice played sometimes has a weak attack even
> with a small window-size..i can imagine why..
you should wrap the readpointer at the end of the buffer to the
beginning.
e.g.: play-pos+phase –> [pong~ 1 0. buflength] –> [play~ buf]

>
> ..mmm well i have to say that i’ve spent many many hours trying to
> make a satisfying granular sampler patch that sounds good to me,
> most of times they sound too metallic

the metallic sound is due to the fact that overlap and grainsize in
your patch are not calculated in correspondence to the actual pitch
of the waveform you want to manipulate. to do this "right" is a
difficult thing and you would end up somewhere in PSOLA-land, i guess.
not a complete solution against metallic artefacts, but much easier
to do, is to add a little randomness to the playposition. [phasor~] +
[noise~]*x –> [send~ play-pos]
volker.


March 22, 2008 | 2:04 pm

hey Volker, thank you very much! wrapping rhe reading point works great!and thanks for for the other tips ;)


March 23, 2008 | 7:09 pm

I would really love if someone could either point me to an explanation of how such techniques work, or explain to me the principles of Michele’s patch.
I can follow the logic so far but start to get confused with so many sah~ objects.
Thanks!


Viewing 11 posts - 1 through 11 (of 11 total)