Love your channel and your music. Thanks for both! One comment: I notice that you bake the .play message into the definition of the ~myKick Pbind. Because you do so, your commands to start and stop it (~myKick.play and ~myKick.stop) both work. But I learned that hard way that if one does NOT bake .play into the Pbind definition, those commands don't work because of the relation between a Pbind and an EventStreamPlayer. (Note that this comment applies only to the Pbind section of the video, not the Pbindef section.) Personally, it's not intuitive to me to define the Pbind to include the .play message. Instead, I intuitively want to separate out the pattern definition and pattern playback. But I discovered that when I did that, then to get .play and .start to work, I had to do something a little different. It took me a while to figure this out, so I'm sharing it here for you and any readers: Assume that the Pbind ends with a parenthesis but without the message .play at the end. If so, when you invoke the Pbind after defining it, you have to assign the invokation to a variable, like so (using the terminology from your video): ~kickPlayer = ~myKick.play; // The new variable ~kickPlayer is an EventStreamPlayer that now handles playback of the Pbind ~kickPlayer.stop; // The .stop method can operate on the EventStreamPlayer just created, so we can stop ~kickPlayer this way ~kickPlayer.play; // And we can restart it now this way. Again, thanks for the great work on this channel. We need more up-to-date tutorials on SuperCollider, and yours are terrific! Thanks!
Thank you for your videos, they took me one step forward! Do you know why when I put my TempoClock t variable the pdindef is evaluater but I don't hear any more the kick? Nothing seems wrong yet no kick output?
Hi firas firas, I've come across this before. I haven't figured why this happens to Pbindef specifically. (I haven't seen this with Pbind.) The not-so-clean way to get that output back is to save, quit, and start again. But to be more efficient, have you tried this code below for TempoClock? ( t = TempoClock(88/60).permanent_(true); t.schedAbs(t.nextBar, {t.beats.postln;1}); //resched every 1 beat ) t.schedAbs(t.nextBar, {t.tempo_(60/60);nil}); //don't resched, if you want to change the tempo while running synths t.stop; After implementing tempo this way, I stopped getting those hiccups. Hope this helps you out!
@@SoundEngraver Oh, I mean: if you search on SC Help Docs "Task" you'll find everything about Routine and Tasks. A Task is a class with argument a timed-loop function in SC. If you can find what's happening to hardware, among Patterns and Tasks, you'd help me a lot! :)
@@granumuse7847 Hey, Argy. I do apologize. Somehow, I wasn't receiving notifications for replies. I haven't explored Tasks. I would like to practice Routine and other UGens, if provided. I've grown so used to composing with the Pattern subclasses, Pbind and Pbindef. I'll take a look for you! I'll admit, learning a new technique in SC does take time for me, so I can't guarantee an immediate response. Have you found anything?
Hi, succisa68. Thank you for watching. I highly recommend exploring Pattern in the SC Help File, as well as referring to my other videos. These demos include code that are essential for how I compose rhythm. An incredible source for learning SC code is Eli Fieldsteel's channel: ua-cam.com/users/elifieldsteel
My apologies for the small code. This is an old video, and when making it, I wasn't aware yet of how to properly format it. Thanks for listening!
nice kick, awesome rhythm
You are really good at explaining supercollider, I learned a lot in this video!
Thank you, Tyler! I love posting these demos. More to come!
Thank You! You are so clear explaining SC. Keep doing it!!
Thank you, Manuel! That means a lot to me. There will definitely be more SC videos!
Very cool! Thanks for these
bit late to the party but subbed and will be following these! these and Eli Fieldsteel's supercollider tutorials are very helpful!!
Thank you, Chris! Welcome!
Thanks a lot, so great!
You're more than welcome, Alejandro!
Love your channel and your music. Thanks for both! One comment: I notice that you bake the .play message into the definition of the ~myKick Pbind. Because you do so, your commands to start and stop it (~myKick.play and ~myKick.stop) both work. But I learned that hard way that if one does NOT bake .play into the Pbind definition, those commands don't work because of the relation between a Pbind and an EventStreamPlayer. (Note that this comment applies only to the Pbind section of the video, not the Pbindef section.)
Personally, it's not intuitive to me to define the Pbind to include the .play message. Instead, I intuitively want to separate out the pattern definition and pattern playback. But I discovered that when I did that, then to get .play and .start to work, I had to do something a little different. It took me a while to figure this out, so I'm sharing it here for you and any readers:
Assume that the Pbind ends with a parenthesis but without the message .play at the end. If so, when you invoke the Pbind after defining it, you have to assign the invokation to a variable, like so (using the terminology from your video):
~kickPlayer = ~myKick.play; // The new variable ~kickPlayer is an EventStreamPlayer that now handles playback of the Pbind
~kickPlayer.stop; // The .stop method can operate on the EventStreamPlayer just created, so we can stop ~kickPlayer this way
~kickPlayer.play; // And we can restart it now this way.
Again, thanks for the great work on this channel. We need more up-to-date tutorials on SuperCollider, and yours are terrific! Thanks!
Thank you, Brian! You're very kind. Thanks for the advice, I'll look into it!
Thank you for your videos, they took me one step forward! Do you know why when I put my TempoClock t variable the pdindef is evaluater but I don't hear any more the kick? Nothing seems wrong yet no kick output?
Hi firas firas, I've come across this before. I haven't figured why this happens to Pbindef specifically. (I haven't seen this with Pbind.) The not-so-clean way to get that output back is to save, quit, and start again. But to be more efficient, have you tried this code below for TempoClock?
(
t = TempoClock(88/60).permanent_(true);
t.schedAbs(t.nextBar, {t.beats.postln;1}); //resched every 1 beat
)
t.schedAbs(t.nextBar, {t.tempo_(60/60);nil}); //don't resched, if you want to change the tempo while running synths
t.stop;
After implementing tempo this way, I stopped getting those hiccups. Hope this helps you out!
As you are SC qualified, is it software-safer than creating Tasks??
Hi, Argy. I'm not sure if I am SC-qualified, as you say. What do you mean by creating Tasks?
@@SoundEngraver Oh, I mean: if you search on SC Help Docs "Task" you'll find everything about Routine and Tasks. A Task is a class with argument a timed-loop function in SC. If you can find what's happening to hardware, among Patterns and Tasks, you'd help me a lot! :)
@@granumuse7847 Hey, Argy. I do apologize. Somehow, I wasn't receiving notifications for replies. I haven't explored Tasks. I would like to practice Routine and other UGens, if provided. I've grown so used to composing with the Pattern subclasses, Pbind and Pbindef. I'll take a look for you! I'll admit, learning a new technique in SC does take time for me, so I can't guarantee an immediate response. Have you found anything?
Good
part 2 :)?
On its way! I was hoping to include Tempo in Part 2, but it seemed to be its own thing. Thanks for watching!
can you show me the code to make me rhythm?
Hi, succisa68. Thank you for watching. I highly recommend exploring Pattern in the SC Help File, as well as referring to my other videos. These demos include code that are essential for how I compose rhythm. An incredible source for learning SC code is Eli Fieldsteel's channel: ua-cam.com/users/elifieldsteel
@@SoundEngraver thanks a lot