Granular Synthesis: Building a granular synth with Max, part 2

Поділитися
Вставка
  • Опубліковано 24 січ 2025

КОМЕНТАРІ • 43

  • @augustinasalisauskas1858
    @augustinasalisauskas1858 3 роки тому +7

    Hi Oliver! Superb video! The shortcut for updating the poly~ object is to simply put a space at the end of the arguments and press enter and it will update itself. No need to delete the name or anything tedious like that.

    • @thrly
      @thrly  3 роки тому +1

      Thanks, you've saved us!!

  • @Spearced
    @Spearced 3 роки тому +5

    I know how hard these videos can be to put together Oliver, so bravo. I'm also very familiar with making frequent patching mistakes along the way myself! One other useful thing I've found with poly~ is that rather than bothering with the whole mute 1, 0 malarkey, you can just route your audio signal out into thispoly~, and when the note finishes and the signal is 0, it will release the voice. I've built many polyphonic synths doing this and have never had any problems, I just find it so much easier to do than worry about which mute message goes where and in which order etc.

  • @billyjames78
    @billyjames78 Рік тому +1

    great video series - and super fun to watch along with. Thanks so much!

  • @teemumastovaara
    @teemumastovaara 3 роки тому +2

    Thanks for a very lovely series! Granular synthesis has been fascinating me for a long time already, and these two videos cleared it up for me! Keep up the good work man!

    • @thrly
      @thrly  2 роки тому

      Thanks!! Glad you like them!

  • @arthursauer6670
    @arthursauer6670 2 роки тому +7

    For people learning all this stuff: there is a big difference between an abstraction and a subpatch. Abstractions take replaceable arguments (starting with #). The replaceable argument #0 is special because it will be replaced by max with a unique number. Replaceable arguments starting from #1 are replaced by what you put as an argument in the object box you use to load the abstraction. The "arg" argument in poly~ in this case is called "#0", which replaces the replaceable argument called #1 in the abstraction. So if you edit the abstraction it is called #1, if you take the abstraction out of edit-mode you can see what the argument in poly is, which is #0... So using #0 in front of the buffer names in the main patch has no use. The main patch is not an abstraction. Check out the reference files to learn more about this. Abstractions inside poly are not automatically updated. So: if the abstraction with the name you give in poly~ does not exist, and you change the file name of the abstraction to the name in poly~, poly~ will not check automatically what happened. You have to reinstantiate poly~. The trick to do this easily is to add a space to poly~ and hit enter. Also, don't put UI object inside an abstraction that is to be used in poly~. It is a waste of resources. Also to balance to load when using many voices: poly~ can be used in a parallel processing mode (check out in the reference doucmentation).

    • @knightyman8000
      @knightyman8000 Рік тому

      This isn't working for me, I am using Max for live. Any ideas?

  • @TheYogiMat
    @TheYogiMat 6 місяців тому +2

    I would have loved to finish this patch but got stuck around 31.27 when you had triggered the wrong thing. I could not get anything to work after that very sadly

  • @abbiehoward6440
    @abbiehoward6440 2 роки тому +1

    Hi Oliver! Great tutorial. I was wondering if you had an update on polyphonic pitch/chord based granular synth as you mentioned you might cover this topic in another video? I would be really interested learning this as I'm super struggling atm with it haha! Thanks :)

  • @danielgardner7601
    @danielgardner7601 3 роки тому +1

    Hey Oliver, this is great. I have been messing around with this patch for a couple of weeks and was running into an issue with mine. Whenever metro triggered a midi note I would still get two pitches even though I was using the [stripnote] inside the [Poly~] patch as you were.
    I did a bunch of testing and figured out that these double notes we separate by the note-duration-parameter inside of [makenote] and that what was happening was the midi-on and midi-off messages were getting sent to separate voices. Once I moved [stripnote] outside of the [poly~] patch and into the main patch the whole thing started working as intended.
    Just figured it would be something to share in case anyone was coming across the same issue, it made for a great little "learn how to troubleshoot [poly~] " exercise!

    • @thrly
      @thrly  2 роки тому

      That's great! Thanks for testing and sharing your findings -- appreciate it!!

  • @frey.ya.m
    @frey.ya.m Рік тому +1

    Could you show what’s in the basic pan subpatch

  • @pixelhexing
    @pixelhexing 3 роки тому +1

    this is fantastic (warts and all). Thanks for the info! Now the next challenge will be recreating all of this using mc~.

    • @thrly
      @thrly  3 роки тому

      You can do it! mc~ is more straightforward than it seems!

  • @kwokedwin9628
    @kwokedwin9628 5 місяців тому +1

    Hello Oliver, it is a really guide and I have followed along from part 1 to 2. May I ask what book should I look into to achieve a high level understanding on MaxMSP and in general Synthesis ?

    • @thrly
      @thrly  2 місяці тому +1

      Oooh interesting question! I think I would say, rather than look for a book, try to spend some time reading through Max's own tutorials and object references. The Help files are the BEST teacher for Max, and you'll learn so much from reading them and trying stuff yourself!

    • @kwokedwin9628
      @kwokedwin9628 Місяць тому

      @@thrly Thank you for your advice! I will read it and learn step by step. Hopefully I can show you something when I had the ability!

    • @thrly
      @thrly  Місяць тому

      @@kwokedwin9628 looking forward to it! good luck!

  • @yihangbao3775
    @yihangbao3775 3 роки тому +1

    Thank you very much for your tutorial. I've really been waiting for a long time hhhhh

  • @SuperWollibolli
    @SuperWollibolli 3 роки тому +1

    4.05 Hey Oliver, did you forget to save the patch you did a year and a half ago...haha great moment!

  • @Blackriver124
    @Blackriver124 3 роки тому +1

    Hey Oliver! THanks for the the great tutorials! Was wandering whether you'd ahve any further pointers on making the synth "truly polyphonic", as in allowing us to play chords? I've tried everything from nested poly objects and tried figurin out the coll solution you hinted on but to no avail. Thanks again!

    • @thrly
      @thrly  2 роки тому

      Sorry for the late reply -- I'm rubbish with comments! Hopefully the easiest explanation is to show you! Copy the code below and in Max, select File > New From Clipboard...
      ----------begin_max5_patcher----------
      1477.3ocyYkriaiCD8rCP9G3nKIAwoAI09.jaykbXNMG6zHfVlsMSjHEjn5z
      FAy7sObQxVIwRl1gwvG5lhkV368phEKR+sW9hEAqDOSaC.+I3dvhEeSYYgwl
      1xhACKBpHOWTRZMOXPgnphxkAK6uoj9rzbC4VJGH2xZAetqUB1RIqaAhGeDH
      E.QWC39ZQ4t+Crogv6JIM+yNtb6CfZhrX6er+qUx3zBQG27IwCVYqMifX0me
      GJY+yZdUFeymZnERKIv336fKAwwlFTtoIL5NH3gg2h2Uw3kTogMnQVEcxAyP
      i0+8kuP2pZV9qqNOxJKMxPgPcwWYxs.BnjoDJwi.hxjR9.0LEinsfuptrjrC
      v3tKL4yoKHqdfgllX3MirvdzHJOQKEEL4Nv6eO.BdMWHopHm2rDXBpD0lHKJ
      XCQR0gSEMT8UGDv8BmVW0O4qZnUhmnuBTQaaIan2orRjp6qT55NqbWoFZyaq
      eg609kGLeviq4gGQySmSyC6E8DSCNEdWHNOIMAifYYPb1RPT1sfGfi.uGHaX
      a1Pa.6zdC0TTFuE755FwJxpxcJgthJaDbQE8Mej+QNiiUuye+g+5CVkWaIbv
      xde46dG3CJA8KFWVWK0pyspjCpO+C.k.pzJsOnkslZybzJTuRAgad7pcfuP2
      sRPZV+J0sruGnltlTdbWT7QbQgyltHseBgY9PpoQ++qkSgS+pBi+rOolT7k8
      VsijbWM0B5ffCvabhwYm+GZ3V99I9p.R7j7Debdh7NOqXqY0jlV5Ljc4g+X5
      328Miu73JBZdMIynFQ1FTF9t3YUkI79YWrpzmZ5mkkhRJo4b8+4Nr..NxF.D
      eqD.T2PU41WCrYqO6PdHb1Y2w87LzD6mbBRitVjtiO+76Qg4Gm1gNv59ZehR
      uLVi8NqeK.MOkmXN7rbEAGUWCN+DyfuZg05pXtDxBcgs8IwCuUlCaJJCehL3
      SvWrKdWa4pIW3pV3eaIsZoxyOi0rycQPakHgFFmhuUxX0y3ymsQyw1zwkcEG
      dqPV8FAbqdjoXc7oYMNylkFleYzNZvbK4I55OYqk9SDopN9UcR6d5Wbf4KBn
      UqnFLBWNXR4UKXsLAWaNwZsWH8pfJAq.qlVQWQ3azpoocBEM8zJZ+BdHbzsx
      Jd5paerrqc6EsTPlK0tZSMFeyTZigxhlJh7jk2bbdGlbZOcjMKY1oROl5aG8
      jErutqp97SNl6PZh9B1yu0JXW6n0mRyYuKkXGBqi6W3Ght1w0lO8Y6IcH6jc
      E8C+eBBAmfPClGNEG8PuePY70zm+sx6ISSggNbpCWEtiu9b2kh0uJbO7h4tc
      rBNF6vtLQMN1I5M0AmcYg01Awbze+3ucgAp5a7CjtUz0TL3QGNsDvH3tl1JY
      bhruZn6GUJ23GSk1qVnhH5GWUsF5cblZROmcnC3go8HtCwXWfn1OMCBQYlME
      GaOyuw87BF0KW6hLlMKHsJWTzXLZ54ELpmm5BFQy6pQFXkX2lxgNGdAQyZZy
      INOXeCZ0CgNEj6KONdemi.YjOfLzUHOS3ZTzAUdTGuDHnWm1k.gTGBVsHLyy
      .LzM.BmORMwlHBYKZbTO+.RjSgl4wNkWB9c4kfQdCjtojXWlyirIlF2yOfD5
      kEg5W2wd9Xi53ILl4DFQHWb2QoeWJ9T+gRGmZm6hRhFubt+l2XvH5Wcsxdsa
      3WtT2CFGkGgCSxiRPvj4uWjsj7AOPXr2XWradfHG7.gvQd.SGOhQG7.gy6AP
      iA43ddBkQtnj+XkWGWHyGKj49Chg9vYOHcwixbY53IPhcxaG5xhoHahqw87H
      H+02GBZbRggMh.8FHca0TmJfV6zGsXJxeJIzKJYRzuSkz8pRPmpF4gpRRhlt
      pj9cJSpqeh1LbR+V3ETQ9rvT6e1RaeF212dVhAMzm1+iCzahzTrkIoExtFCq
      BdNo+G3InRn1IAuiMrYBs.oGZyQMvIUz1ZhUJLGIwKeg5A9e.R9U9NB
      -----------end_max5_patcher-----------

  • @BleepBloop
    @BleepBloop 2 роки тому

    Love your videos. I can't figure out why my grains don't overlap though. I followed thru step by step and tried to trouble shoot but I am curious at which point you explain how you fixed it to make the grains sustain across the start of the next grain to get that cloud swarm effect. thanks

  • @frey.ya.m
    @frey.ya.m Рік тому

    Also what’s in the rgrain pitch subpatch ? :)

  • @lapocock2713
    @lapocock2713 2 роки тому +1

    Thanks for a great video, have you done any experimenting in the mc. domain with granular stuff?

    • @thrly
      @thrly  2 роки тому

      Only a tiny bit -- there's lots of potential there too. The new mc.snowfall~ particle stuff might be interesting too!

  • @kuba3570
    @kuba3570 Рік тому +1

    Does someone whats´s happening in that basic-pan subpatch?

  • @gabrielestrada6165
    @gabrielestrada6165 Рік тому

    hey hey! Wonderful video! I'm having an issue with a modification I'm doing at the patch:
    I've replaced the buffer with a polybuffer˜ because I want to use more than one sound. I've updated the "play" object inside the "poly˜" and it works just fine. The issue is that I'm trying to multiply the signal coming out of the "play"˜ object with some number to increase or decrease the volume (the final idea is to be able to have a fading effect with another sample in the buffer). But as soon as I place the "*˜", the sounds starts to get turned on ritmically with the input from outside the poly˜and the sound lasts all the times for less than half a second and that's just it. Seems like the granulation breaks as soon as I just add something to the signal outputted from the play˜object! Am I doing something wrong? cause I wouldn't say it looks like it and I can't find a solution to this T.T
    UPDATE: I was rewatching you video and it seems very similar to what happens to you around minute 32, before you add that steal and parallel message. Unfortunately that doesn't seem to be what fixes the issue and you didn't explain it in the video :-/
    Thank you in advance!

    • @thrly
      @thrly  Рік тому

      Hmmm, sounds tricky. The polybuffer~ isn't something I've used much so I can't say for certain, but it sounds like its not working the way you want here. I *think* I'd first check that all the buffers are being named and called correctly, then see if you can play all of them simultaneously just to check that it's possible before even getting into the poly~/granular stuff...
      For the sound turning on/off rhythmically (you mean like a tremolo effect?) that suggests that you're amplifying the signal with *~ at the wrong point in your signal (or using the wrong value?)
      Beyond that, I'd suggest the really boring (but most effective) debugging process of walking through your patch step by step and checking everything is doing what you think it should be, until you find what's going wrong! Good Luck!

  • @Omnempathy
    @Omnempathy 2 роки тому +2

    Hi - I liked building this a lot. Thanks. Just to note that in your play out - your second split probably wants to be 75 rather than 25 :-)

    • @thrly
      @thrly  2 роки тому

      Thanks for the heads up!

  • @ribponce
    @ribponce 3 роки тому

    Hi, great video, thank you so much! I have a question, why do we need makenote 60 100, pack and midinote $1 $2 at all? It seems that inside the grainGen all you need are the bangs? I don't understand where/how you're using the midi note value inside the setup. Would be great if you could enlighten me there. If I bypass all of that and simply feed the bang into grainGen it works, so I'm confused. Perhaps there's something I'm missing. Thanks!

    • @thrly
      @thrly  3 роки тому +1

      *I* am probably missing something to be honest! My understanding is that 'midinote' prepend tells poly that "okay, this is a midi note" and that allows poly to assign a voice index for the multi-voice stuff. I think that just triggering the object, with a bang might not give us multiple voices each time? We don't need the MIDI for the notes (unless we go down the routes of granular chords, which is _fiddly_), but I'm using them for voice targeting? I think... but there's lots of ways of doing stuff, and I might be doing a weird old way that doesn't help. Try a different route and if it works, it works! Let me know!

    • @Spearced
      @Spearced 3 роки тому +2

      @@thrly from what I understand about poly~, you should just be able to prepend 'note' instead of 'midinote' and it won't require the message to be in MIDI format, while still allocating voices dynamically.

  • @daxu9605
    @daxu9605 3 роки тому

    Holy crap. It finally happened!!!

  • @curls6778
    @curls6778 3 роки тому +2

    Your tutorials are great!
    Why are you using #0- naming conventions? The buffers and sends aren't being cloned, so their name is already unique, isn't it?

  • @Marxcarlmarx
    @Marxcarlmarx Рік тому

    Is that Guerrilla Warfare over your shoulder there?

  • @loidis9347
    @loidis9347 3 роки тому +1

    woohoo! thanks!

  • @raydani8748
    @raydani8748 Рік тому

    I get no sound when using the Gaussian Envelope. Also that $1 error you made is the only way I can get any sound... If I use $2, I get nothing. The sound I do get is also riddled with clicks.