26

The history of music and sound synthesis languages can be traced back to the Music N languages starting in the 1950s. You can trace the threads from there to a variety of languages that were developed in the 90s, including CSound, ChucK and SuperCollider. CSound could be seen as the last of the "traditional" Music N languages, which focus mainly on sound synthesis, whereas ChucK and SuperCollider add flexible tools for composition as well. (There are also a variety of graphical point-and-click languages such as Max MSP and PureData that also descend from the Music N paradigm, but I'm interested only in text-based languages for the sake of this question.)

SuperCollider was always my tool of choice. It provides a great variety of opcodes (low-level signal processing modules) and many ways to patch them together on the fly, trigger events algorithmically, and respond interactively to external signals.

However, SuperCollider is now kind of old technology. The first version came out in 1996 and version 3 was open-sourced in 2002. While there are new features since then, the core of the language and synthesis system is unchanged and remains optimised for an early 00s machine. In particular, it's distinctly set in a single-processor paradigm and can't take advantage of the parallelism provided by modern GPUs, alhough support for multiple CPU cores has been added. There are also some features of its architecture that would probably be re-thought if it was being re-designed now. (An example is the need to run the synthesis server as a separate application from the language itself, which makes sample-accurate timing very difficult to achieve, among other things.)

So I'm wondering whether there are any successors to SuperCollider and its cousins from that era, either in existence already or on the horizon, that go beyond what can be achieved with the tools listed above. The possibilities for GPU parallelism seem immense, and there have also been advances in programming language design since 2002 that could result in an even more awesome and flexible tool. In particular, virtual machines can now be almost as efficient as bare C code, which means that DSP code could be just-in-time compiled, removing the limitation of sticking to a pre-programmed set of opcodes.

Is anyone aware of any development or research in this direction? I'm starting to get back into music composition and DSP programming after a long period of being busy with other things, and it would be really awesome to have a new and exciting tool to learn, with features that go beyond what I've used before. As mentioned above, I'm talking about text-based languages for DSP programming and algorithmic composition, rather than visual patch-based systems.

To summarise, my main interest is in finding out whether there are projects that focus on cutting edge synthesis techniques, using new technology that wasn't available in the early 2000s. (But the answers that list other types of package are useful too.)

  • 2
    Supernova is the multi-CPU synthesis server, and it is incorporated into the main code base. – PeterT Aug 7 '16 at 8:38
  • 1
    @PeterT s it? That isn't at all obvious from the web site, even by looking at the change log. Where is it documented and how does one use it? – Nathaniel Aug 7 '16 at 11:50
  • 2
    On the home page, bullet point under features of scsynth: ` Multi-processor support using the Supernova server implementation`. I still haven't really used it, not sure if it's the default server or maybe need to adjust config. Then it's a matter of arranging nodes into p-groups. – PeterT Aug 7 '16 at 11:57
  • 1
    Also worth pointing out sc 3.7 is fairly recent and should be well optimised for modern CPU architectures. I agree gpu could be interesting, there may be some issues with latency. I'm not aware of any SuperCollider like environment that makes extensive use of gpu. Maybe I should add that to my answer. – PeterT Aug 7 '16 at 12:01
  • 2
    @PeterT the JIT-compilation of DSP code would be a game-changer as well, if it existed in a SuperCollider-like language. Currently, we're limited to a finite set of UGens, but that would allow new ones to be generated on the fly. It would be a bit like having Faust seamlessly integrated into the language. It would also allow things like single sample feedback to be done really efficiently. That wouldn't have been feasible in 2002, but virtual machines now are much more efficient and I think it would be possible now. – Nathaniel Aug 7 '16 at 12:31
16

There are indeed new languages, as well as libraries within other languages. I'm going to list a few that spring to mind off the top of my head, and maybe come back and expand my answer later.

edit 03/17: I have slightly revised the answer. Notable that to a great extent, SuperCollider is often used as a back-end for systems based in a range of languages & paradigms; in some cases, systems that a few months ago when I originally wrote this used their own audio engines now use scsynth.

  • Sonic Pi - uses its own server, but seems more focused on ease of use (particularly for use in education) than advanced synthesis features. (edit: uses SuperCollider in the back-end; a recurrent theme in this list).
  • ChucK - not very actively developed, but a very approachable language with some interesting features for reasoning about time that go beyond syntactic sugar.
  • Tidal Cycles - Haskell-based system primarily for generative composition rather than designing synths. Uses OSC to control other apps (originally this was primarily the custom synth Dirt, now SuperDirt in SuperCollider, but also able to work with others).
  • Overtone (Clojure library) - A SuperCollider front-end in Clojure.
  • Gibber - a Javascript-based frontend to Web-Audio, which is a ugen based synthesis API part of HTML5 running in all modern browsers.
  • Faust - a lower-level language for DSP that compiles into plugins for other programs, of a similar vintage to SuperCollider.
  • 1
    I've suggested an edit that add links and short descriptions to your list. Some of these projects are new to me, so please correct my edit if any of my descriptions are incorrect or incomplete. None of the listed projects really address the main issues I identified, but it's very useful to have the list. – Nathaniel Aug 7 '16 at 12:24
  • 1
    Did you mean Overtone for bullet 4? overtone.github.io – Dave Aug 7 '16 at 18:51
6

I would still recommend Csound as the best tool for text-based audio programming. It is actively under development and has kept pace with recent advances. One other worthy mention is a library called pyo which can be used with Python 2.7 and Python 3.5+. The developers for that have a lot of other nice tools which you might want to check out. If you want to get an in-depth look into audio programming, "The Audio Programming Book" is pretty outstanding, even though it was released in 2010.

4

There are some interesting algorithmic composition frameworks based on the LISP programming language:

Nyquist https://www.cs.cmu.edu/~music/nyquist/
Open Music http://repmus.ircam.fr/openmusic/home

There is a book on Nyquist written by computer scientists/composers who developed the language - algocompbook.com.
Open Music was built by people at IRCAM - en.wikipedia.org/wiki/IRCAM -, a french institute for sound research and electro-acoustical music composition - their work is worth checking out.

  • 1
    For a modern LISP-ish (perhaps not for the LISP purist) algorithmic composition and synthesis environment, Overtone is a good bet. – PeterT Mar 14 '17 at 23:25
  • Yes, Overtone is another interesting option, probably being developed more actively as well - compared to the older academic projects I mentioned. – polymechanos Apr 4 '17 at 14:34
2

I know a fellow that has written a synth system, in Java, that can be edited live. It is called Praxis LIVE, and is of a recent origin, taking advantage of Java's multithreading capabilities. The author is pretty accomplished, having also written JAudioLibs, which includes a Java audio binding to JACK Audio Connection Kit.

Java can do a lot more with audio than it is generally given credit for. It is much closer to C++ in terms of performance than Python or JavaScript. I have been hacking around with 3D audio and an FM synth built from scratch in Java, also a real-time theremin as an example of what Java can do. I like being able to roll my own, play around with ideas rather than be limited by synth systems. There is a bit of a hurdle getting a good grip on the Java Sound primitives (e.g., SourceDataLine), but once you get past that, there is all sorts of stuff that can be built from scratch if you are so inclined.

1

There is a book by Will Pirkle called Designing Audio Effect Plug-Ins in C++: With Digital Audio Signal Processing Theory. It will introduce you to the RackAFX system that is used with Microsoft Visual C++ 2008-2010. You may use RackAFX with other C++ compilers other than MSVBC++. You use RackAFX to help design the GUI while C++ is used to write the DSP code portion. RackAFX will automatically update the code as you add Sliders, Knobs and buttons. There are many of examples from Delay, Filters, etc.

  • He's got two books, they're both awesome. So is the Eric Lyon book on writing Max externals in C. I think that's really the way things are going now, people are doing their audio in libraries in C/C++ and embedding it in host envs like SuperCollider, Max, PD, etc. – Iain Duncan Feb 14 '18 at 20:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.