I have a question., I’m trying to learn supercollider as much as I can., but I have adhd. It’s hard to read mountains of help files. How did you learn SC? You seem so capable with it. I understand reading the basic stuff. but it is mountains of information. Its endless.
(Note: Maybe the moderators would split this off as a new topic so we don’t hijack this thread)
To be honest, it took me a long time to learn SC - at least a few years to get comfortable with coding larger projects. That was a long time ago (20+ years) so there weren’t so many resources available online.
It can be overwhelming seeing all the help files and, these days, all the online resources and tutorials.
I found the best way to learn was to start small and build from there. I would take some working code that inspired me - either from one of the help files or example files or else from what other people had posted in the mailing list (this was before the SC Forum or https://sccode.org/ existed). Then I would change the code, often adding a GUI so I could play live with the parameters, eventually making a small project that was usable.
I also bought a book - Curtis Roads’ “The Computer Music Tutorial” - which helped me understand the concepts behind the code. (Nowadays, there’s much more online which saves costs!)
When I got stuck, I also asked lots of questions on the SC mailing list which helped a lot.
All I can say is that it gradually became easier as I became more familiar with the SC way of doing things. Even now, there are lots of areas of SC that I haven’t yet had time or reason to explore more fully - for example I hardly ever use Patterns.
Maybe other people might chip in here, since everyone’s approach is different and my experience is probably a bit out of date.
Thank you very much. Yes, almost feels like option paralysis. There is so much. I have to reign myself in and remember my actual goals. Doing that seems to make things simpler and a way to build up from there. I really am only interested in SC as a sequencer. I have actual gear. I don’t think anything compares to the pattern system, but I’m getting lost playing around with other fun stuff and forgetting my main purpose with it sometimes. Sorry to hijack!
Split topic, done.
I didn’t feel this as much when learning SC, but I did feel it a lot when I had to pick up Pd for a course: It can be very frustrating, if you’ve got competence with one set of tools, to try to transfer that knowledge to a different set of tools. If you’re really good at DAWs and plugins, then you come to SC with a mindset of “I know what I want but it’s taking forever to figure out how to do these basic things.” That is, the ambition outstrips the specific technical knowledge.
It’s very easy to get tripped up by trying to skip over boring examples and get right to the cool stuff, but that also means fundamentals will be missing when you need them. So I think it’s helpful to slow down, squeeze as much as you can out of simple structures before moving on.
Set a goal that is just a little further forward than you’re comfortable with right now – not too ambitious, just ambitious enough. Get comfortable with that, then set another “little bit further” goal.
It just takes time. That’s the big thing I learned from Pd: I know pretty well what I’m doing with basic synthesis and some algorithmic composition techniques, but getting comfortable with them in graphical patchers was not at all immediate. Mastery is: you already made a ton of mistakes, which led you to a set of practices that work pretty well optimally. Knowing the concepts doesn’t make it possible to skip over making the mistakes.
hjh
I’d recommend looking at data structures and functions.
Make sure you understand, can use, and combine:
- Array
- Dictionary (event)
- Function
Along with methods like do
and collect
to transform/use the data.
.
A few remarks I try to always keep in mind:
-
World goes fast, but the learning process still stays slow. Even very smart people need time to learn. In SC, sometimes, you need to understand topic A to understand topic B to understand topic C… That’s ok. One step at a time. Be patient.
-
Things will get easier once you know every topic the documentation includes (more or less). Not reading it, just knowing that when you’ll need it, it exists and is covered in this particular help file. What’s overwhelming is that at first, it seems endless. But it isn’t.
-
SC is a mean to make music. Music is the main focus here. Maybe you produced some ugly code, unoptimized, etc. Does the music it make sound good ? Yes ? Then code’s perfect.
-
What’s my learning strategy ? I know I need to use topic B, but it requires to understand topic A first. Do I understand topic A ? What’s the best exercise I could imagine to understand topic A ?
- jamshark70 via scsynth noreply@m.scsynth.org [2024-11-13 06:44]:
[…]
Knowing the concepts doesn’t make it possible to skip over making the mistakes.
Thank you for this thoughtful phrase James!
Your post reminded me of the possibly widely known article by Peter
Norvig “Teach Yourself Programming in Ten Years”
https://norvig.com/21-days.html
Some random ideas that might help
Start by making sounds - even simple ones. A few UGens or functions at a time, and start playing with them. This is much more engaging than reading specific documentation, and you will learn a lot about the métier. It’s not just computations; what we do has much more to do with connecting the brain and the ear, playfully, skillfully coping with a few things at a time. Never forget.
Pick small projects rather than trying to learn “everything.”
Use the “copy-modify-create” approach. Copy code from documentation and small programs online and start from there. Play with the code. Many times, you will grasp what each part does and, equally important, how it connects with sound.
Keep a personal collection of snippets that you understand and use. This will prevent you from going to the documentation and losing yourself there. Most of the documentation in our field does not teach much about programming; it is all pretty confusing. Trying to “learn” programming reading max, pd, or sc documentation wastes time. – This is not even controversial; the sc documentation tells the reader to learn about OOP elsewhere, a programming language very close to Smalltalk. Go figures…
But remember, read this with a grain of salt. There is no correct or wrong way to learn programming; there are, in fact, different programming cultures and not much to compare. Maybe you will learn a lot connecting your brain and ears playing around with supercollider, and you can also have fun learning about computability/programming. But it does not mean they are the same, or you need one to do the other.
Take breaks when you feel overwhelmed. SuperCollider will still be there when you come back. And remember, everything will feel completely different when you have a “music vision” in your head. In my experience, I would not have learned about music, sound, and computation in the same way if I had not also been performing live and writing music for other people to play. See the computer as part of all of this experience.
I hear you. Ive been coming and going with supercollider for over 20 years now. SC2! I just got back into it, while my synth was in the repair shop. I thought about using it with CV. I have gear and love it. I don’t see anything as a waste of time; I got nowhere with sc back in the early 2000’s , but I learned from it. I am also a different person now with more knowledge. One thing that hasn’t changed though . PD is still ugly as hell. Why? Its got all that max has, Is it that hard to make it pretty? I suggested on another forum yesterday that this company should build a dedicated box for the supercollider pattern system. With a solid clock and CV Gate outs. As I feel super impressed by the system. It was spawned by me noticing they used SC for the dsp in their current box.
But people chimed in and said they thought the pattern system is clunky, which I thought was odd. Im always open to new apps, tho, so I’m anxious to hear what they use. . I do know after all these years. If it isn’t fun, you shouldn’t be doing it .cheers
I think Patterns is a unique little language that, while it has its strengths, also has many limitations. For some structural aspects, Patterns are kind of “blind.” As another system would probably have extraordinary resourcefulness in these “blind spots,” it would not have the same strength in other areas.
I tried to implement something similar to Patterns in Haskell, and I was surprised by how simple it is to use sophisticated operations in Sclang in many contexts. But this also happens with countless other things.
Form and rhythm are tricky to work with. They are not linear. We try to tame them, but they are always treacherous. The exciting thing is constantly breaking our habits and playing even with what “doesn’t work,” and musically, we make whatever we have at hand “work.”
It has more to do with a philosophy Miller Puckett believes. For him, software that grows disorderly is doomed to sink under its weight. That’s why he is Spartan in keeping PD this way. And, in the big picture, he has been correct!
@sslew if you have the time to watch this, it’s all here: https://www.youtube.com/watch?v=ZLACjtOpe0Q
Commercial software has no choice; it must constantly invent new “features” while accumulating the latest trends on top of old legacy code. (Banks work on top of Cobol code that nobody understands; Finale probably has 30+ years of Java code in there, and nobody knows what to do with that, etc. etc.). Proprietary technology makes that worse. At some point, it simply becomes unviable.
PD will probably survive all other computer music environments. Probably scsynth
will survive as well, just like PD, but accidentally, not because of planning. It has been kept in shape over the years. Many like to say scsynth has an antiquated “C with classes” style. I, for one, thank god it turned out this way, and we have such a remarkable audio engine today, that still rocks.
On the other hand, I’m not so confident with sclang in the same way. I would probably not write a large project with a fancy GUI in Sclang today, and still believe it would continue to be a robust system in a few years.
See plugdata: pd with a juce gui, and cyclone and else externals bundled in, and you can run it as a vst, and with limitations even compile patches.
Plugdata is less focused than pd vanilla (although… trying to use pd without the ELSE package is simply masochistic, just don’t do it). However, I think the main pd line could ditch the tcl/tk “it’s still 1996” vibe without losing its focus.
Btw Cycling 74’s work in the last several years on jit compilation (gen, rnbo) is a major achievement and no other audio platform has that. Plugdata tries, a bit, by bundling hvcc but Max’s framework for this is a lot more robust. So pd doesn’t have everything that Max has.
hjh
Ive recently realized Im going to have to use the Demand Ugens for my sequencing. I have a thing for solid timing. Owned a Roland Mc-4. It grew on me.They are a time bomb though. The chips are rare.
Thats a good point about PD. I just think it has had an unintended effect on poor people. Max is not too fancy at all. It’s a very nice looking app. Many apps are gaudy almost. Wouldn’t take much is all im saying.
Can jitter affect audio ? Can it go the other way instead of just reacting to audio input? That is more interesting to me. I was around when they stole that idea form the most infamous troll Netochka Nezvanova of nato.0+55 fame. What a character, Plugdata does looks nice. I dont know how much Max has in the way of sequencing. I mean you could do it like an analog computer. Ive alway wanted to try it.
About jitter affecting audio rather than just reactive to audio input: Absolutely. Some performers use live video as a controller. For example, you can use your hands captured by a video camera to express much more information than you could with a mouse or MIDI controllers.
A music keyboard is also a good option, but that’s a little bit more common.
You can also use your voice as a controller, as it is one of the body’s most expressive parts and will deliver much more information.
You would need to create your instrument and then study how to play it. It’s a journey.
But you don’t need max or pd for that. A small python or c++ program can deliver the information you need to sc. I don’t remember, but there is a library that can point the position of each of the fingers. It’s quite easy to setup,
I think I have a code like that somewhere, I can send you if I find it.
Try this python script, a very clean demo of the lib:
pip install mediapipe opencv-python numpy
import cv2
import mediapipe as mp
import numpy as np
class HandTracker:
def __init__(self):
self.mp_hands = mp.solutions.hands
self.hands = self.mp_hands.Hands(
static_image_mode=False,
max_num_hands=2,
min_detection_confidence=0.7,
min_tracking_confidence=0.5
)
self.mp_draw = mp.solutions.drawing_utils
def find_hands(self, img, draw=True):
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
self.results = self.hands.process(img_rgb)
if self.results.multi_hand_landmarks:
for hand_landmarks in self.results.multi_hand_landmarks:
if draw:
self.mp_draw.draw_landmarks(
img,
hand_landmarks,
self.mp_hands.HAND_CONNECTIONS
)
return img
def find_finger_positions(self, img, hand_no=0):
landmark_list = []
finger_names = ['THUMB', 'INDEX', 'MIDDLE', 'RING', 'PINKY']
if self.results.multi_hand_landmarks:
if len(self.results.multi_hand_landmarks) > hand_no:
hand = self.results.multi_hand_landmarks[hand_no]
finger_tips = [4, 8, 12, 16, 20]
for idx, tip_id in enumerate(finger_tips):
cx = int(hand.landmark[tip_id].x * img.shape[1])
cy = int(hand.landmark[tip_id].y * img.shape[0])
landmark_list.append({
'finger': finger_names[idx],
'position': (cx, cy)
})
cv2.circle(img, (cx, cy), 10, (255, 0, 255), cv2.FILLED)
return landmark_list
def main():
cap = cv2.VideoCapture(0)
detector = HandTracker()
while True:
success, img = cap.read()
if not success:
break
img = detector.find_hands(img)
finger_positions = detector.find_finger_positions(img)
if finger_positions:
y_pos = 30
for finger in finger_positions:
text = f"{finger['finger']}: {finger['position']}"
cv2.putText(img, text, (10, y_pos),
cv2.FONT_HERSHEY_SIMPLEX, 0.7,
(255, 255, 255), 2)
y_pos += 30
cv2.imshow("Hand Tracking", img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
Im gonna tell you a little secret I found out today.
Ive at times looked at Ircam over many years. Ive always found there system of payment obtuse and annoying but, Modalays is free now. You can use it with max, but there is a stand alone, ModaLisp, and it loads Lua files. It sounds outstanding. Its unbelievable. Im not into computers for the sound. I have some nice gear. Um, but this is truly amazing sounding.Its new and ground breaking. I downloaded Visual Studio Code to mess with the Lua files and Oh , wow, is all I can say. It is so real. And you can use stuff like Matlab and build objects to scrape or bang and it so real and non linear.
Send some of those sounds here. You have my attention
Around 2012, I tested Modalys on my MacBookPro 17 (2010). The single tone was impressive, but it used too much CPU… It was not easy to make music with it, only single tones or short phases were effectively produced.
Yeah, im using it to make samples for my akai. I still have to learn it, But it does sound very very cool. Very real. It’s an old program, They’ve been working on it for ages.
I was a modalys user in the day and loved it. Excited to give it a spin. I wonder if I could generate input files from SC…