Completely agree with you Brandx.

I will add that Python has some really good libraries too (other languages often do too), so before coding something up look around, you may find what you’re looking for.

Python doesn’t always run fast, but it does develop fast ! That counts for a lot.

Also as far as time sensitive issues: Since Python is so powerful, i find it good to work through ideas, especially if you can work them in a non-time sensitive way, and then take the best and recode them in some other language if you need. You can also compile Python code in various ways and speed it up. Actually there’s lots you can do to speed up Python (or any language for that matter).

Fast processing now-days will even handle many time sensitive problems in a predictable way with interpreted code, so don’t prejudge things. Get the basic function first and then worry about speed-up (This is a good rule - usually. But there is no fix for the impossible design.)


Languages are a lot like audio gear, tools to an end. A moog voyager is a very different proposition from a virus ti and both are very different from a modular, and all which are very different from a rytm and so on.

My advice would be to choose the one that rustles your jimmies so to speak and stick with it till you get where you want to be or know where to go next.

Look at the works that interest or inspire you and find out what was used under the hood. Dont be afraid to ask the creators most people are happy to talk about what they use.


i think it’s important to start from something basic that gives you an understanding of how things work, a bit like you would do with a spoken language :slight_smile:
once you get to know how things work, then it’s mostly a matter of choosing the language you want to use to communicate with the machine. you’ll be using different words to do pretty much the same things in the end. whether it’s Assembly, C, Basic, Python or well…any other language really…you’ll probably find that all of them can perform the same things just by using different words. some are more dedicated to specific tasks but nonetheless, they all have something in common: tell the machine what, how and when to do it :slight_smile:
i would not start by using libraries or pre-built code but rather try things for yourself first, again, to get an understanding of how things work…even if it’s just doing really simple things. C would probably be a good starting point i think, as you’ll find that many other languages are similar to/based on it (and C++ next :scream_cat:) unless you really want to go loooow level, then i’d say Assembly but mh…i don’t think it’s what you’re after…
on the other hand, if you want to just get things done, then there’re plenty resources out there (libraries and the dev platforms) that will allow you to do things pretty quickly, but you could find yourself debugging code and asking why things don’t do what you’d expected them to (of course, this is not always the case but well…those things can happen…there’s always a human being behind libraries and platforms :slight_smile: )


Compiler Language, also known as C is a very important basis of understanding. There are low-level functions and presumptions within higher-level programming languages that build upon this as a foundation.

by “higher-level language” i mean a programming language that exists upon a mid-level interpreter platform. this platform allows for quicker programming and prototyping, provides some convenient aspects and possibilities … and in return for the benefits, accesses a few extra cpu cycles and thus is less efficient in realtime performance. although it is possible to ameliorate some of the extra time required.

C# does provide automated memory allocation and so if memory management seems like a hassle with Compiler Language (allocating a memory position pointer for a variable and then deallocating that pointer manually where and how the programmer indicates the program should view the variable as no longer in use), there is the option to go for a memory-managed language after learning the foundational basis upon which the higher-level languages are referencing due to the nature of their structure.

although more importantly i guess, the main idea is to achieve an understanding of what the flows of information look like. the arcs of data going back and forth, creating tides and whirls with inputs and outputs.

initially this might not seem so important as making a User Interface actually work properly.

but then later when exploring data-oriented functions such as making a landscape from a table of realtime generated values from a mathematical function, the data flows and structures start to display their value and integral essence in relation to what a program is capable of.


sure - in a past life (2002) I was on teams writing prototypes for clinical applications for speech analysis. I think you’d be better off jumping in on the C side - since that’s where you’ll end up anyway if you want to do fun & efficient DSP on ‘fullsize’ computers or more specialised devices like a Bela or something.

There’s an array of opensource components you’ll use to help you out: libsndfile, portaudio & portmidi - not to mention actual DSP libraries that make life easier. There’s also no necessity to make a GUI application - you can always make a quick frontend in something like javascript etc later.

Max/PD are indeed great environments to try out stuff in (although the data flow stuff can be unsuited to solving some problems) - Gen is something I’ve completely missed the boat on so far


Learning how to write an iPad synth.

Just saw something that might be of interest if you wanted to learn how to do a synth on the iPad. It’s not out quite yet, but should be later this month. It’s free and completely open source, plus it’s feature rich and great sounding. It’s all written in C/C++.

It’s called AudioKit Synth One.

Here’s an article on it at Sonic State.

ADDED June 29, 2018: AudioKit Synth One has now been released.


There is nothing scary about C/C++, nothing at all. Except for my self-taught experiences with it before knowing the first thing about coding. I know admitting this is like admitting I probably don’t contain the necessary midichlorians to become a real Jedi, but it’s the truth.

Even though my skills were only baby talk at the time, Python was the first computer language that I could read, or at least I thought I could read :slightly_smiling_face: and that was enough to feel like it would be a safe environment to swim in. And the people who I knew who used Python also happened to be nice people too, which for me mattered. I could ask questions and no one was going to throw the K&R book at my non-bubble sorting dummy head. Whatever its merits beyond that, at the time it was the most comfortable slipper to try on programming.

Seriously, though. I would still like to learn C someday. Because of hardware things. I know it’ll always be there for me, one abstraction layer below where I actually do my work, which is increasingly JavaScript based.


Don’t get me wrong :slight_smile: I’m not saying C/C++ is scary, but Python is easier to learn for beginners and in many cases faster to write and better to maintain (e.g. not having to deal with garbage collection). But in some cases you want or have to use C or C++ and I find it to be very powerful languages. Google actually developed “Go”, which is a compiled language too, solves many problems that people didn’t like about C but kept the mechanics to control a program’s behaviour in a way that is only possible in languages like C or C++. It becomes very popular (not so much for musical purposes unfortunately yet or maybe I don’t know about them) and in some areas it’s replacing what Python has been used before. Especially when it comes to performance and high concurrent operations. Try it out:


What’s this?


Kernighan and Ritchie book (1978)

You have to have gray hair to know this, so you are not qualified man. :rofl:

By the way – not a particularly good way to learn C, but it was the primer for years.


The next language I try to tackle is definitely going to be C++

Just after I work on that DSP Python to get a start

It’s either that or learning Supercollider- but I’m not getting a job with that


Has anyone done anything with vcv rack? Seems like a good/fun way to mess around with ideas. Wondering what the docs are like, how hard it is to get the project building stuff like that.


i had a look a while ago and it didn’t seem to be too complicated, one mostly needs to understand how everything fits together but it’s something that could be fun to work/play with :slight_smile:


Agreed on both counts. But now y’all know why I got so easily scared off. :scream_cat:

K&R is the holy scripture, that’s what it read like. I imagine there are some people who read it for pleasure. Maybe that’ll be me someday, once my powers increase.


Also, I think Zed A. Shaw is the Bob Ross of programming. I don’t know him, but I love him.


This question is applicable to synths on sooo many levels. :slightly_smiling_face:


I used to - regularly :slight_smile:


I have a soft spot for K&R but agree its pretty terse, just like C I guess. It’s a bit like reading a legal contract, in a lapse you gloss over something trivial like usage of “a” vs “the” and end up in a world of hurt. Unlike a legal contract it is a testament to brevity :slight_smile:


Worse than Kernighan and Ritchie by far though is Stroustroup (1985) the standard for years for learning C++. It’s obvious that English is not the authors mother language, and it’s so abstractly impractical as a learning text. I got my copy for free and believe me i overpaid.

Give me a text with a series of good representational examples and then some challenges to take those examples and embellish them hands on.

bradleyallen: You’d have no problem learning C once you got by the mental block – it’s really a simple language with pretty readable syntax – if properly formatted (or run through a good pretty printer). Plus you can leave a portion of it out and not miss it, like the question mark colon operator, which is just an invitation for obtuseness, and is so much simpler done as a simple if statement.

ADDED: Hardest thing about C is getting your head around pointers, and how to pass them etc. They’re also deadly which doesn’t help anything. (I really mean deadly, people have died from errant pointers.)


I learnt C++ with C++ Primer from Stanley B. Lippman. I found it helpful. Game (and general purpose) dev here.