Amazing. My own granular attempts are quite primitive when I look at this. I'll have to re-watch this a few more times and get my brain around these new ideas. Huge thanks.
Thanks for the great tutorial! It's a bummer that the for loop doesn't work, my fix was to make it into an mc.gen~ and set voices to mc_channelcount. Then the first argument for make_grain could be mc_channel-1. For many more voices I also had to increase the max density.
thanks for the great tutorial, really helpful. wondering if you could share some insight in how to use the in1 on the gen~ instead of the buffer. trying to implement something similar to this in my eurorack system with daisy, but for that i need to use in 1 as the input instead of a buffer. i have a sample going in to in1 and looping and have been trying to change the Buffer smpl ("smpl") to something like smpl = in1; but that obviously didnt work. any tips for a newbie?? thanks!
i got this to work by using poke to write in1 to a data node within gen~ with a counter. also built a little system to trigger the recording when a sound is present at the input. just wondering what to do with this line of code in the codebox: c = counter(p,in1,voices); this in1 should be changed to something eles i think
First time looking at genexpr and looks quite an elegant language. I like the way how you can return multiple values and decompose them like you did with pan_left, pan_right.
@@bigmistqke Yep - it has its limitations!! But it is great to be able to incorporate code into your patches so easily. And returning multiple values from a function is really nice. Thanks for watching!
@@00Dakka thanks for this. I don't think it's possible as long as there are latch and delta objects within the loop. I'm going to make a video soon of how I've managed to make a granular Synth with a for loop
Thanks for this great tutorial! - I'm new to gen~ but have exp wi other programming - so this is a great help in my learning about GenExpr. I took a look at the loop problem. I got it to work by setting a lower loop number for(i = 0; i < 10; i += 1) {... The strange thing is that the upper limit it will tolerate changes. Yesterday I could only go up to i < 5. Today the limit is higher - I was changing this value gradually, then restarting DSP, and got up to 20 voices. Then later it wouldn't go above 10... I speculate that it is some problem with internal to Max. It would be good to post this in the cycling74 Gen forum. I'm so new to gen I'm hesitant as I may be missing something. Your thoughts on this would be appreciated. The loop problem is definitely worth solving -- cut & pasting those code blocks is really ugly! I'm already building on this with a function to allow for different windowing options for amp. The Hann window is great, but with granular I find that interesting results can come from different amp envelopes. Would love to communicate more on this. I also found that the pitch spread Param didn't work quite as I expected. When I set it to 0, I don't get any audio output, and as I increase from 0 - .01 it seems that the output amplitude is rising as the sound starts to become audible. I hear nothing at 0. So when I'm testing the loop, I had to make sure that spread was not 0.
This was great! Have you gotten it working with for loops yet? That's the part of Gen~ that I'm most curious about, as I haven't really had experience with that sort of code as it applies to sound.
Thanks. I've migrated a more complicated version of this over to RNBO and I swear there's a bug with the buffer referencing. The only way round for me was to only have a buffer reference in the max patch outside and the gen~ patch inside the RNBO
@@toneparticle can i see that anywhere? im trying to incorporate a good granular sampler into a react project for class and it needs to be rnbo. thanks for the tip, i'm just very weak with max in general
Very nice. However mine seems to play back at a lot higher pitch. When loading a sound with a constant pitch into the buffer and just playing the buffer back using a play~ object the granular is wayyyy higher. Any thoughts? I have checked the code to the best of my ability, but I can't see anything wrong.
Amazing. My own granular attempts are quite primitive when I look at this. I'll have to re-watch this a few more times and get my brain around these new ideas. Huge thanks.
Thanks Matt. Hope it eventually helps you to make some music with it and gives you more confidence with codebox!
very interesting. I would love to see some codebox programming of physical modeling, something other than karplus-strong
Thanks for watching. That's quite a challenging topic, but I will look into it
buraz pa daj neki live coding na sledecem koncertu tapatapatapate :D
@@ilijadjordjevic9087 ne želim prepast djevojke
Thanks for the great tutorial! It's a bummer that the for loop doesn't work, my fix was to make it into an mc.gen~ and set voices to mc_channelcount. Then the first argument for make_grain could be mc_channel-1. For many more voices I also had to increase the max density.
Thank you very much! Amazing and very clear tutorial!
Ty for providing this info. I plan on building it this weekend :)
thanks for the great tutorial, really helpful. wondering if you could share some insight in how to use the in1 on the gen~ instead of the buffer. trying to implement something similar to this in my eurorack system with daisy, but for that i need to use in 1 as the input instead of a buffer. i have a sample going in to in1 and looping and have been trying to change the Buffer smpl ("smpl") to something like smpl = in1; but that obviously didnt work. any tips for a newbie?? thanks!
any idea :))?
i got this to work by using poke to write in1 to a data node within gen~ with a counter. also built a little system to trigger the recording when a sound is present at the input. just wondering what to do with this line of code in the codebox: c = counter(p,in1,voices); this in1 should be changed to something eles i think
@@martypants88 hi trying to figure out to do the same thing as i got also a daisy patch could be good to share some infos about
First time looking at genexpr and looks quite an elegant language. I like the way how you can return multiple values and decompose them like you did with pan_left, pan_right.
Ok lol and then 30:44 happened
@@bigmistqke Yep - it has its limitations!! But it is great to be able to incorporate code into your patches so easily. And returning multiple values from a function is really nice. Thanks for watching!
@@toneparticle btw, you can optimise this by using a for loop with the accumulator inside instead of unrolling the loop
@@00Dakka thanks for this. I don't think it's possible as long as there are latch and delta objects within the loop. I'm going to make a video soon of how I've managed to make a granular Synth with a for loop
hi. thanks for this amazing video. it helped me a lot. did you ever made the loop work?
Awesome , great tutorial
Thanks for this great tutorial! - I'm new to gen~ but have exp wi other programming - so this is a great help in my learning about GenExpr. I took a look at the loop problem. I got it to work by setting a lower loop number for(i = 0; i < 10; i += 1) {... The strange thing is that the upper limit it will tolerate changes. Yesterday I could only go up to i < 5. Today the limit is higher - I was changing this value gradually, then restarting DSP, and got up to 20 voices. Then later it wouldn't go above 10... I speculate that it is some problem with internal to Max. It would be good to post this in the cycling74 Gen forum. I'm so new to gen I'm hesitant as I may be missing something. Your thoughts on this would be appreciated. The loop problem is definitely worth solving -- cut & pasting those code blocks is really ugly! I'm already building on this with a function to allow for different windowing options for amp. The Hann window is great, but with granular I find that interesting results can come from different amp envelopes. Would love to communicate more on this.
I also found that the pitch spread Param didn't work quite as I expected. When I set it to 0, I don't get any audio output, and as I increase from 0 - .01 it seems that the output amplitude is rising as the sound starts to become audible. I hear nothing at 0. So when I'm testing the loop, I had to make sure that spread was not 0.
What command or menu you use for create the Density element in 6:25 ? and what is his name?? Thank you!
I need this... did you find out what it is called?
Oh press 'A' as a command lol
This was great! Have you gotten it working with for loops yet? That's the part of Gen~ that I'm most curious about, as I haven't really had experience with that sort of code as it applies to sound.
I have indeed. I'll do another shorter tutorial soon
thanks a lot
this tutorial is epic..
next step, learn how to export to raspberry pi devices. so much more fun making your own synths
great! thx!
how would you use that buffer~ smpl in rnbo? everything else seems to be pretty easy to migrate over
this rules, by the way. thanks for sharing
Thanks. I've migrated a more complicated version of this over to RNBO and I swear there's a bug with the buffer referencing. The only way round for me was to only have a buffer reference in the max patch outside and the gen~ patch inside the RNBO
@@toneparticle can i see that anywhere? im trying to incorporate a good granular sampler into a react project for class and it needs to be rnbo.
thanks for the tip, i'm just very weak with max in general
anyone else get a lot of clicks when increasing the spray param? any good way to smooth that out ideas??
Very nice.
However mine seems to play back at a lot higher pitch. When loading a sound with a constant pitch into the buffer and just playing the buffer back using a play~ object the granular is wayyyy higher. Any thoughts?
I have checked the code to the best of my ability, but I can't see anything wrong.
Thanks for watching and following along. Feel free to send me your code via my website and I'll take a look
just tested mine. no difference unless the sample was recorded at a different sample rate to what i'm using on max
How did you learn this ? :)
by looking at the code tab in normal gen~ patches, trial + error and the occasional "eureka" moment in the shower