Groove patch


    Jan 14 2008 | 7:20 pm
    Hi, I am trying to make a looper using groove~ modules.
    I would like to use just standard max msp externals, and for this reason I am not using Xgroove~.
    I've made some attempts but the looper doesn't work as expected, and I am running out of ideas.
    The looper should handle sound files, allow adjustable crossfade (range in ms), and allow continuous variable speedrate.
    Can someone help me?
    Here's the patch I am working on at the moment.
    max v2;
    Thank you very much,
    Carlo

    • Jan 14 2008 | 7:51 pm
      did you want to crossfade between two separate soundfiles?
      if so, you need another buffer with another name.
      clean it up a bit, and I think you've basically got it
    • Jan 14 2008 | 7:56 pm
      some of this may help...
      one of the more important things to remember is to grab your loop point at signal-rate.
      jl
    • Jan 15 2008 | 12:23 am
      well, actually I need to loop a single soundfile using 2 groove~ modules
      crossfading each other.
      Carlo
      ----- Original Message -----
      From: "Michael"
      To:
      Sent: Monday, January 14, 2008 8:51 PM
      Subject: [maxmsp] Re: Groove patch
      >
      > did you want to crossfade between two separate soundfiles?
      > if so, you need another buffer with another name.
      >
      > clean it up a bit, and I think you've basically got it
    • Jan 15 2008 | 12:26 am
      Hi thanks for your help,
      what do you mean for "example config of loop"?
      Doesn't snapshot good enough to grab the loop points? Actually, it is a
      signal-rate value.
      Best,
      Carlo
      ----- Original Message -----
      From: "jLubow"
      To:
      Sent: Monday, January 14, 2008 8:56 PM
      Subject: [maxmsp] Re: Groove patch
      >
      > some of this may help...
      > one of the more important things to remember is to grab your loop point at
      > signal-rate.
      >
      > jl
      >
      > #P window setfont "Sans Serif" 9.;
      > #P window linecount 1;
      > #P comment 150 275 118 196617 < example config of loop;
      > #P comment 361 289 118 196617 < example config of loop;
      > #P button 323 76 15 0;
      > #P message 62 243 14 196617 0;
      > #P newex 296 203 27 196617 / 4.;
      > #P flonum 152 200 52 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P newex 48 149 60 196617 loadmess 1;
      > #P newex 119 385 36 196617 edge~;
      > #P toggle 119 405 29 0;
      > #P newex 119 365 33 196617 >~ 0.;
      > #P newex 119 345 38 196617 delta~;
      > #P newex 232 485 27 196617 *~;
      > #N vpatcher 488 273 843 613;
      > #P window setfont "Sans Serif" 9.;
      > #P newex 58 98 27 196617 + 1;
      > #P window linecount 1;
      > #P message 115 175 50 196617 1. , 0. $1;
      > #P message 225 174 50 196617 0. , 1. $1;
      > #P newex 58 58 27 196617 t i b;
      > #P newex 58 132 67 196617 gate 2;
      > #P inlet 132 31 15 0;
      > #P newex 115 94 27 196617 f;
      > #N comlet OUTput value ramp;
      > #P outlet 170 263 15 0;
      > #P newex 170 228 32 196617 line~;
      > #N comlet OUTput value ramp;
      > #P outlet 58 263 15 0;
      > #N comlet Fade IN - bang;
      > #P inlet 58 31 19 0;
      > #P window linecount 0;
      > #P message 170 174 50 196617 1. , 0. $1;
      > #P message 58 174 50 196617 0. , 1. $1;
      > #P newex 58 228 32 196617 line~;
      > #P connect 3 0 10 0;
      > #P connect 10 0 13 0;
      > #P connect 13 0 9 0;
      > #P connect 9 0 1 0;
      > #P connect 12 0 0 0;
      > #P connect 1 0 0 0;
      > #P connect 0 0 4 0;
      > #P connect 10 1 7 0;
      > #P connect 7 0 9 1;
      > #P connect 9 1 12 0;
      > #P connect 8 0 7 1;
      > #P connect 9 0 2 0;
      > #P connect 11 0 5 0;
      > #P connect 2 0 5 0;
      > #P connect 5 0 6 0;
      > #P connect 9 1 11 0;
      > #P pop;
      > #P newobj 119 452 140 196617 patcher FADEin-out;
      > #P message 48 176 165 196617 loop $1 , loopinterp 1 , startloop , 0;
      > #P newex 48 493 27 196617 *~;
      > #P newex 232 304 81 196617 groove~ sound1;
      > #P message 158 560 29 196617 stop;
      > #P message 90 560 67 196617 startwindow;
      > #P newex 49 602 31 196617 dac~;
      > #P flonum 83 275 62 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P flonum 296 174 59 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P newex 218 141 105 196617 info~ sound1;
      > #P newex 151 219 38 196617 sig~ 1;
      > #P newex 48 305 81 196617 groove~ sound1;
      > #P message 150 52 43 196617 replace;
      > #B color 6;
      > #P newex 150 110 78 196617 buffer~ sound1;
      > #P newex 49 518 194 196617 +~;
      > #P window setfont "Sans Serif" 10.;
      > #P comment 32 52 128 196618 first , load an audio file;
      > #P window setfont "Sans Serif" 12.;
      > #P window linecount 6;
      > #P comment 324 457 176 196620 This looper should: 1) - Loop a soundfile
      > 2) - Allow crossfade (specifying a range in ms) 3) - allow continuous
      > variable speedrate any help?;
      > #P window setfont "Sans Serif" 9.;
      > #P window linecount 1;
      > #P comment 358 228 91 196617 Fade Time (ms);
      > #P flonum 296 226 55 9 0. 0 1 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P newex 331 286 27 196617 + 0.;
      > #P connect 18 0 8 0;
      > #P connect 18 0 16 0;
      > #P connect 11 0 8 2;
      > #P connect 11 0 27 0;
      > #P connect 9 0 8 0;
      > #P connect 9 0 16 0;
      > #P connect 5 0 13 0;
      > #P connect 5 0 13 1;
      > #P connect 1 0 19 1;
      > #P connect 1 0 16 1;
      > #P connect 1 0 0 0;
      > #P connect 1 0 0 1;
      > #P connect 22 0 24 0;
      > #P connect 21 0 22 0;
      > #P connect 8 1 21 0;
      > #P connect 0 0 16 2;
      > #P connect 29 0 10 0;
      > #P connect 17 0 5 0;
      > #P connect 20 0 5 1;
      > #P connect 26 0 9 0;
      > #P connect 28 0 8 0;
      > #P connect 8 0 17 0;
      > #P connect 27 0 1 0;
      > #P connect 25 0 18 0;
      > #P connect 24 0 23 0;
      > #P connect 23 0 19 0;
      > #P connect 19 1 20 1;
      > #P connect 19 0 17 1;
      > #P connect 6 1 10 0;
      > #P connect 10 6 11 0;
      > #P connect 16 0 20 0;
      > #P connect 15 0 13 0;
      > #P connect 14 0 13 0;
      > #P connect 12 0 8 1;
      > #P connect 7 0 6 0;
      > #P window clipboard copycount 32;
      >
    • Jan 16 2008 | 6:45 am
      snapshot converts a signal- at audio rate- control rate data stream at a given time interval.
      it's not as efficient, and you'll not see any more accuracy with this methodology. it does work really well for other types of patches, but i tend to try to stay away from it because of the amount by which it taxes the CPU.
      instead i'd recommend the delta~ reading; for more info on this check the archives.
      as for the "example"; it's just an example of some loop points you might want to set along with another example of a way to set them dynamically.
      jl
    • Jan 16 2008 | 9:56 am
      Carlo Laurenzi schrieb:
      > Doesn't snapshot good enough to grab the loop points? Actually, it is a
      > signal-rate value.
      snapshot~ is polling the audio values. That is expensive, because most
      of the time it gets values which are not important. I always use edge~
      to find a specific point in an audio signal...
      Good for fading the signal of groove~ is trapezoid~ by the way. Can be
      directly controlled by the sync output of groove~...
      not as clean as my other examples, but take it as a starting point:
      --
      Stefan Tiedje------------x-------
      --_____-----------|--------------
      --(_|_ ----|-----|-----()-------
      -- _|_)----|-----()--------------
      ----------()--------www.ccmix.com
    • Jan 17 2008 | 1:36 am
      Hi Stefan,
      Thank you very much for your insight.
      I don't understand why Groove~ modules stop playing and crossfading if I
      play the loop in reverse (setting -1 speedrate, for example).
      Playing loops in reverse is one of the things I need the most..
      Can you help me?
      Thank you.
      Carlo
      ----- Original Message -----
      From: "Stefan Tiedje"
      To:
      Sent: Wednesday, January 16, 2008 10:56 AM
      Subject: Re: [maxmsp] Re: Groove patch
      > Carlo Laurenzi schrieb:
      >> Doesn't snapshot good enough to grab the loop points? Actually, it is a
      >> signal-rate value.
      >
      > snapshot~ is polling the audio values. That is expensive, because most of
      > the time it gets values which are not important. I always use edge~ to
      > find a specific point in an audio signal...
      >
      > Good for fading the signal of groove~ is trapezoid~ by the way. Can be
      > directly controlled by the sync output of groove~...
      >
      > not as clean as my other examples, but take it as a starting point:
      >
      > #P window setfont "Sans Serif" 9.;
      > #P window linecount 1;
      > #P newex 108 82 32 196617 sel 1;
      > #P newex 54 150 54 196617 t f 0. stop;
      > #P newex 290 232 13 196617 f;
      > #P newex 422 201 55 196617 clip 0. 0.5;
      > #P newex 422 147 13 196617 b;
      > #P newex 464 229 30 196617 !- 1.;
      > #P flonum 459 180 62 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P newex 422 180 35 196617 !/ 20.;
      > #P flonum 447 113 50 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P flonum 367 113 62 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P newex 280 85 33 196617 sel 0.;
      > #P newex 236 63 101 196617 info~ hitme;
      > #P newex 287 133 13 196617 b;
      > #P flonum 118 127 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P newex 262 155 62 196617 !- 0.;
      > #P newex 391 279 44 196617 ==~ 1;
      > #P newex 259 279 44 196617 ==~ 1;
      > #P user number~ 346 348 385 363 9 3 3 2 0. 0. 0 0. 250 0. 0 0 0 221 221
      > 221 222 222 222 0 0 0;
      > #P message 425 345 49 196617 startloop;
      > #P message 293 348 49 196617 startloop;
      > #P user number~ 194 348 261 363 9 3 3 2 0. 0. 0 0. 250 0. 0 0 0 221 221
      > 221 222 222 222 0 0 0;
      > #P user ezdac~ 174 405 218 438 0;
      > #P message 175 21 31 196617 read;
      > #P newex 175 41 71 196617 buffer~ hitme;
      > #P newex 391 299 44 196617 edge~;
      > #P newex 259 299 44 196617 edge~;
      > #P newex 306 299 84 196617 *~;
      > #P newex 174 299 84 196617 *~;
      > #P newex 380 258 95 196617 trapezoid~ 0.1 0.9;
      > #P newex 306 232 84 196617 groove~ hitme;
      > #B color 5;
      > #P newex 248 258 95 196617 trapezoid~ 0.1 0.9;
      > #P button 54 100 15 0;
      > #P flonum 54 127 47 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P message 192 149 24 196617 0.5;
      > #P flonum 314 113 50 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P flonum 262 113 50 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
      > #P toggle 174 64 15 0;
      > #P newex 174 169 27 196617 sig~;
      > #P newex 174 232 84 196617 groove~ hitme;
      > #B color 5;
      > #P comment 501 115 100 196617 ms crossfade;
      > #P comment 44 81 36 196617 start;
      > #P fasten 15 1 38 0 298 320 304 320 304 227 295 227;
      > #P connect 15 1 21 0;
      > #P connect 11 1 23 0;
      > #P connect 11 1 12 0;
      > #P connect 12 0 14 1;
      > #P connect 12 0 25 0;
      > #P connect 10 0 13 1;
      > #P connect 10 0 24 0;
      > #P fasten 37 0 38 0 427 221 295 221;
      > #P connect 37 0 12 1;
      > #P fasten 37 0 35 0 427 221 469 221;
      > #P fasten 35 0 10 2 469 254 337 254;
      > #P connect 35 0 12 2;
      > #P connect 33 0 37 0;
      > #P hidden connect 33 0 34 0;
      > #P connect 32 0 36 0;
      > #P connect 32 0 33 1;
      > #P hidden connect 26 0 31 0;
      > #P fasten 26 0 33 0 267 176 427 176;
      > #P connect 6 0 2 2;
      > #P connect 6 0 28 0;
      > #P connect 6 0 26 1;
      > #P connect 6 0 11 2;
      > #P connect 5 0 2 1;
      > #P connect 5 0 26 0;
      > #P connect 5 0 11 1;
      > #P connect 3 0 2 0;
      > #P fasten 3 0 11 0 179 194 311 194;
      > #P fasten 4 0 40 0 179 80 113 80;
      > #P connect 4 0 3 0;
      > #P connect 40 0 9 0;
      > #P fasten 39 2 11 0 103 203 311 203;
      > #P fasten 39 0 2 0 59 212 179 212;
      > #P connect 8 0 39 0;
      > #P fasten 39 1 10 1 81 253 295 253;
      > #P connect 29 6 6 0;
      > #P connect 38 0 10 1;
      > #P connect 16 1 22 0;
      > #P connect 2 1 20 0;
      > #P connect 2 1 10 0;
      > #P connect 36 0 33 0;
      > #P connect 28 0 26 0;
      > #P connect 30 1 6 0;
      > #P connect 29 3 30 0;
      > #P connect 29 2 5 0;
      > #P connect 17 1 29 0;
      > #P connect 9 0 8 0;
      > #P connect 7 0 3 0;
      > #P connect 27 0 3 0;
      > #P fasten 22 0 2 0 430 367 164 367 164 227 179 227;
      > #P connect 2 0 13 0;
      > #P connect 13 0 19 0;
      > #P connect 14 0 19 1;
      > #P connect 24 0 15 0;
      > #P fasten 21 0 11 0 298 375 502 375 502 226 311 226;
      > #P connect 11 0 14 0;
      > #P connect 25 0 16 0;
      > #P connect 18 0 17 0;
      > #P window clipboard copycount 41;
      >
      >
      > --
      > Stefan Tiedje------------x-------
      > --_____-----------|--------------
      > --(_|_ ----|-----|-----()-------
      > -- _|_)----|-----()--------------
      > ----------()--------www.ccmix.com
      >
      >
    • Jan 20 2008 | 7:41 pm
      I tried your patch - does a very nice job outputting sound at different intervaals of time one channel to another.
      good
      thanks
      ron
      Stefan Tiedje wrote: Carlo Laurenzi schrieb:
      > Doesn't snapshot good enough to grab the loop points? Actually, it is a
      > signal-rate value.
      snapshot~ is polling the audio values. That is expensive, because most
      of the time it gets values which are not important. I always use edge~
      to find a specific point in an audio signal...
      Good for fading the signal of groove~ is trapezoid~ by the way. Can be
      directly controlled by the sync output of groove~...
      not as clean as my other examples, but take it as a starting point:
      --
      Stefan Tiedje------------x-------
      --_____-----------|--------------
      --(_|_ ----|-----|-----()-------
      -- _|_)----|-----()--------------
      ----------()--------www.ccmix.com
    • Jan 21 2008 | 11:51 am
      Have you tried to play the loop backwards?
      Carlo
      ----- Original Message -----
      From: ronald alford
      To: maxmsp@cycling74.com
      Sent: Sunday, January 20, 2008 8:41 PM
      Subject: Re: [maxmsp] Re: Groove patch
      I tried your patch - does a very nice job outputting sound at different intervaals of time one channel to another.
      good
      thanks
      ron
      Stefan Tiedje wrote:
      Carlo Laurenzi schrieb:
      > Doesn't snapshot good enough to grab the loop points? Actually, it is a
      > signal-rate value.
      snapshot~ is polling the audio values. That is expensive, because most
      of the time it gets values which are not important. I always use edge~
      to find a specific point in an audio signal...
      Good for fading the signal of groove~ is trapezoid~ by the way. Can be
      directly controlled by the sync output of groove~...
      not as clean as my other examples, but take it as a starting point:
      --
      Stefan Tiedje------------x-------
      --_____-----------|--------------
      --(_|_ ----|-----|-----()-------
      -- _|_)----|-----()--------------
      ----------()--------www.ccmix.com
      ------------------------------------------------------------------------------
    • Jan 21 2008 | 3:58 pm
      hmmm...
      no, never occurred to me to do that - HOW?
      ron
      Carlo Laurenzi wrote: Have you tried to play the loop backwards?
      Carlo
      ----- Original Message -----
      From: ronald alford
      Sent: Sunday, January 20, 2008 8:41 PM
      Subject: Re: [maxmsp] Re: Groove patch
      I tried your patch - does a very nice job outputting sound at different intervaals of time one channel to another.
      good
      thanks
      ron
      Stefan Tiedje wrote: Carlo Laurenzi schrieb:
      > Doesn't snapshot good enough to grab the loop points? Actually, it is a
      > signal-rate value.
      snapshot~ is polling the audio values. That is expensive, because most
      of the time it gets values which are not important. I always use edge~
      to find a specific point in an audio signal...
      Good for fading the signal of groove~ is trapezoid~ by the way. Can be
      directly controlled by the sync output of groove~...
      not as clean as my other examples, but take it as a starting point:
      --
      Stefan Tiedje------------x-------
      --_____-----------|--------------
      --(_|_ ----|-----|-----()-------
      -- _|_)----|-----()--------------
      ----------()--------www.ccmix.com
      maxmsp mailing list
      ---------------------------------
      maxmsp mailing list
    • Jan 21 2008 | 6:46 pm
      Just write a negative value in the number field connected to sig~..
      You'll notice that the looper will stops looping after few seconds.
      Carlo
      ----- Original Message -----
      From: ronald alford
      To: maxmsp@cycling74.com
      Sent: Monday, January 21, 2008 4:58 PM
      Subject: Re: [maxmsp] Re: Groove patch
      hmmm...
      no, never occurred to me to do that - HOW?
      ron
      Carlo Laurenzi wrote:
      Have you tried to play the loop backwards?
      Carlo
      ----- Original Message -----
      From: ronald alford
      To: maxmsp@cycling74.com
      Sent: Sunday, January 20, 2008 8:41 PM
      Subject: Re: [maxmsp] Re: Groove patch
      I tried your patch - does a very nice job outputting sound at different intervaals of time one channel to another.
      good
      thanks
      ron
      Stefan Tiedje wrote:
      Carlo Laurenzi schrieb:
      > Doesn't snapshot good enough to grab the loop points? Actually, it is a
      > signal-rate value.
      snapshot~ is polling the audio values. That is expensive, because most
      of the time it gets values which are not important. I always use edge~
      to find a specific point in an audio signal...
      Good for fading the signal of groove~ is trapezoid~ by the way. Can be
      directly controlled by the sync output of groove~...
      not as clean as my other examples, but take it as a starting point:
      --
      Stefan Tiedje------------x-------
      --_____-----------|--------------
      --(_|_ ----|-----|-----()-------
      -- _|_)----|-----()--------------
      ----------()--------www.ccmix.com
      --------------------------------------------------------------------------
      ------------------------------------------------------------------------------
    • Jan 22 2008 | 7:13 am
      Carlo Laurenzi schrieb:
      > Have you tried to play the loop backwards?
      That had been left as excersize... ;-)
      --
      Stefan Tiedje------------x-------
      --_____-----------|--------------
      --(_|_ ----|-----|-----()-------
      -- _|_)----|-----()--------------
      ----------()--------www.ccmix.com