[sharing] grainstretch~

    Jan 25 2012 | 2:38 pm
    I just released my new external grainstretch~
    This flexible granular audioplayer object is based on the algorithm in Mattijs Kneppers' granular timestretcher max patch. But now in 1 max object and with lots of other features and options (including streaming mode, so you have a 'no-latency' pitchshifter).
    for mac and windows for max 5 and max 6
    have fun!

    • Jan 25 2012 | 3:11 pm
      thanks for this. very nice regards.
    • Jan 26 2012 | 12:27 am
      can i use in maxforlive?
    • Jan 26 2012 | 12:47 am
      i get his when trying to load in m4l. am i doing something wrong?
    • Jan 26 2012 | 1:34 am
      your search path perhaps isn't set up properly?
    • Jan 26 2012 | 3:48 am
      Thank u ! it is stable ?
    • Jan 26 2012 | 7:13 am
      thanks guys
      yes you can use it in max 4 live, make sure it the mxo file (for mac) or mxe (for windows) is in in a place where m4l will find the object, usually something like the Cycling '74 folder of your max install
      I hope it is stable, I can't get it to crash... if you can, let me know and I'll try to fix it
    • Jan 26 2012 | 12:34 pm
      i tried reinstalling, copying into cycling74 folder and got this in the max window.
    • Jan 26 2012 | 1:03 pm
      ok, interesting... what version of os x do you use? and what processors do you have? Intel or not?
      It is compiled with Lion, and I know it works fine in Snow Leopard. It is not a universal build so it won't work on a powerpc (G5, G4 etc)
    • Jan 26 2012 | 5:28 pm
      here you go.
      System Version: Mac OS X 10.5.8 (9L31a)
      Model Name: iMac Model Identifier: iMac7,1 Processor Name: Intel Core 2 Duo Processor Speed: 2.4 GHz
      i'm very behind. i'm guessing it wont run on leopard?
    • Jan 26 2012 | 5:47 pm
      yes that was the problem, it didn't run on Leopard, but I updated it, please try again with the new version on http://www.timorozendal.nl/?p=456
    • Jan 26 2012 | 7:49 pm
      Hey, this is really great! Only one question: is it possible to turn looping off?
    • Jan 26 2012 | 8:46 pm
      thanks for doing that port to leopard! i cant get over how great this is. reminds me loads of granulab on the pc from years ago. never been able to find anything to replace that, until now!
      i love how with a super slow speed and a high grain size you get mega evolving techno!
      greta work.
    • Jan 26 2012 | 9:54 pm
      good to hear that it works now for you nedrush
      @rwg: unfortunately no, but what about this solution, it uses an adsr~ to mute the signal and stop the processing too:
      That still leaves the question how to stop it at exactly the end while playing with the playback parameters. But that raises more questions, also about position randomness and such.
    • Jan 26 2012 | 10:27 pm
      Absolutely lovely - this is already a great thing for realtime processing. But, okay, now on to my question at hand:
      Does anyone have an idea about how to apply the stretching itself to a rotating live input buffer? I'd love love love for that to be at all possible.
    • Jan 26 2012 | 10:44 pm
      well, internally it has a rotating live input buffer :-)
      what is that you want exactly?
    • Jan 26 2012 | 11:22 pm
      yeah, it occured to me, since you can do the "randompositionoffset" even in streaming mode.
      Well, I already love it as-is, but would kill for a way to get that time-stretched sound with this even in streaming - in other words, to get the [speed $1] and ideally [pos $1] to run in streaming mode; yes, it might end up sounding... "experimental", but that's what I'm looking for ;)
      cheers, Andreas
    • Jan 27 2012 | 12:11 am
      yeah, I already did something similar. What I need, among other things, is to be able to trigger a soundfile and play it once (without looping) and adjust its speed dynamically according to some live-input data.
      Of course other objects exists for that, for example the supervp.play~ from ircam - but I actually really like the sound and some of the other features of the grainstretch~... So a non-looping version would be awesome ;-)
    • Jan 27 2012 | 2:12 am
      well, honestly I'd say it's very different; I'm talking about the live-input streaming version, not a buffer manipulator per se.
    • Jan 27 2012 | 8:51 am
      @Wetterberg: rwg is talking about something else: turning loop function off What you want with the live buffer is a bit of a puzzle and maybe a separate object will work better for that. Maybe I'll do it sometime, but not very soon.
      @rwg: I'll check how much work it is and I can imagine that it's hard to get it proper sounding with position- and pitch randomness (these wrap around the file currently)
    • Jan 27 2012 | 12:37 pm
      is this something you are planning to continue work on and expand? if so can i offer a suggestion of a pitch envelope on single grains? so if i have a high grain size and a slow speed, i can get pitch changes with each new grain? or is that totally wack?
      if not could i do this in max anyway? maybe but somehow monitoring the grain size, converting that to clicks then using those clicks to trigger an adsr~ multiplying the pitch?
    • Jan 27 2012 | 1:13 pm
      @nedrush: I think I will let it go for a bit, I mean, I just wait and see what people want and collect feature requests (and fix bugs if people have problems) and then in a later stage I'll decide what to add.
      I don't full understand your idea, currently the pitch is applied at the start of the grain (and it remains constant during the grain), this makes parameter changes smooth and without clicks. This already sounds a bit like what you are after, or do I miss something?
    • Jan 27 2012 | 3:42 pm
      Yes, of course randomness doesn't go so well with the idea of a non-looping player... But without randomness it would be great – and in my eyes really make this external a bit more complete - but hey, this is just my opinion ;-)
      Anyway it should be possible to make a system that stops it at the end by using information about samplelength, speed and position. I'll get back about that if I manage to make a solution when I have time.
      I hope you continue to develop this external as I think that what you have done this far is really good!
    • Jan 27 2012 | 4:16 pm
      @timo i could probably demonstrate the idea using a regular sampler and post a video, or i'll look around for something that explains it better.
    • Jan 27 2012 | 7:14 pm
      maybe look around for a video: http://www.youtube.com/watch?v=2FFEBeQBqhA
      Inspired by Timo's video, I've got some very funky pitch/time stretchiness here, applied using the very algo Timo (and yourself) describes
    • Jan 28 2012 | 2:08 am
      here you go. heres me jamming around with it, plugged into a pitched reverb which is on a feedback loop.
      apologies if you're not into half an hour of cacophonous drone techno.
    • Jan 28 2012 | 12:45 pm
      this is a great object, some very clean musical sounds imo. thanks very much, I can see this getting incorporated into a few patches :)
    • Jul 24 2012 | 3:28 pm
      I just put grainstretch into my msp-externals folder but it doesn't come up when i look for it on object explorer. Any ideas why ?
    • Jul 25 2012 | 8:47 am
      Hi Freddy,
      personally I never use the object explorer, but I don't think third party externals appear there. does it work when you simple make a new object (press 'n') and type grainstretch~ in it?
    • Oct 03 2012 | 1:02 pm
      Yes it does actually.
    • Oct 03 2012 | 9:11 pm
      Timo, this is a really nice and good sounding max external used it for awhile in max. Now just built a device around it in M4L and it seems to act a bit differently but I have to try it further to be sure...
    • Oct 05 2012 | 11:23 am
      i'm using this in a sampler project. timo, i noticed it seems to be hardcoded to 44kHz. with other samplefreq. a speed value of 1. is not the normal pitch anymore. i can work around it. it creates nice grain clouds.
    • Oct 05 2012 | 1:34 pm
      I like this object and have built it into a patch I'm using Tuesday. For all of its great features it is lacking some basic functions (based on copying and pasting from the help file), such as a start/stop loop, and a reset for neutral settings. I'll have to hack into it more to deal with the latter. For the former I've added a standard gain~ object, with 128 and 0 messages sent to it; I'm not so much starting and stopping the loop as I am the audio feed. Feeding a silent audio file into the buffer is also useful.
    • Jan 05 2014 | 8:56 pm
      Hi Timo
      I've been enjoying your grainstretch~ external for a few months now. It's very comprehensible. Huge thanks. Big benefit to my quality of life. I have two questions and thought I'd ask them here. First, what kind of grain envelope is controlled by the fade command? I suspect it's a Hanning, but maybe it's a trapezoid, or maybe there's a way to customize it. Second, do you have any version where the grain number can be customized? I should be able to handle 32 voices no sweat, if that's an option.
      Thanks again Jesse
    • Jan 05 2014 | 9:04 pm
      Yes ! Timo , Sir ? can you provide 64bit version for windows ?
    • Jan 23 2014 | 3:16 pm
      Great, great, great external..thanks Timo for sharing your work with us. I'm using it mostly as a sample-masher/granulator. Feature request, if I may: all the parameters control seems to work very smoothly, but sometimes I get some clicks when changing the grain size, has anyone else noticed that? It would be great to have a click-free 'size' parameter control.
      Btw, thanks again for this amazing external Timo
    • Jun 01 2014 | 11:50 am
      Hi Timo,
      I get this message when I trying to load in Max6 running on OS X Mavericks. Is there something wrong?
      Thanks Alessandro
    • Oct 25 2014 | 2:14 pm
      Hi Timo
      I was using grainstretch OSX 32 bit previous and everything was fine.
      Now using it Win7 64 bit M4L Live 9.1.5 and Max 6.1.7 and I get an error in the max window: newobj: grainstretch~: No such object
      However when I add a new object it shows up, and I can view the helpfile(so seems like max can locate the external ok).
      Any ideas?
    • Oct 25 2014 | 4:25 pm
      32-bit objects only work in 32-bit hosts. You can't just switch over and have it still work, I'm afraid.
    • Sep 24 2016 | 10:48 pm
      I'm havi problems with this external in Max4live aswell. I've built a project in Max7 and exported it as a Max4Live Device. The grainstretch~.mxo is in the externals folder in the Max7 folder where MaxForLive devices are stored.
      I get the message: "unable to load object bundle executable" in the max console.
      Any Ideas.
    • Sep 25 2016 | 9:13 am
      Sounds like a 32/64 Bit issue. AFAIK grainstretch~ is 64-Bit only (starting with Max 6) . Maybe you are using Live in 32 Bit mode? When using Max4Live the Live version used (32/64 Bit) will determine wich Max version is launched. Unfortunately there are two separate installers for Live in 32 and 64 Bit. But you can install both side by side if you rename Live .app file of one of them.
    • Oct 31 2018 | 9:03 pm
      There's some 32bit/64bit confusion going on with the PC version of this. Everything seems to claim to be 64bit, but it used to work in my 32bit max 7.0, and now it doesn't work in 64bit Max 8.0.
      Anybody know what the real story is with the PC version?
    • Nov 01 2018 | 9:44 am
      The accuracy internally is 64 bit, however the current release is compiled for a 32 bit os (those nrs are totally unrelated). I do have a (beta) version of for 64 bit mac os, but not for pc yet.
    • Feb 26 2020 | 8:32 pm
      Hi Timo I was hoping I could get a copy of the beta for 64 bit Mac. my email is hubert dot oneill at gmail thanks very much