Modular Synth - Technology Choices

DSP, Plugin and Host development discussion.
RELATED
PRODUCTS

Post

Hello.

This is the first time I've posted in this section. I want to introduce myself a bit and talk about what I already do before I jump to my question.

I've been programming since I was a kid and I've been programming as a job for about 10 years. However, I've no experience with multimedia programming. So far, I've used Microsoft technologies throughout my career. I program for the .Net and Silverlight platforms in C#. I have dabbled in Java a bit. I do understand C++ but I hate the syntax. However, I'm willing to use it if that's what it takes to build what I want to build.

At home, I'm a Mac user, and all of my music production is done on Mac. So, I'm comfortable with MacOS. I use Ableton, MaxForLive, and Reaktor. I've made a couple of fairly popular MaxForLive patches already. I really like Reaktor's basic approach to digital modular synthesis. In many ways it's similar to how an modular analog synth works. However, the user interface is disgusting and the whole environment is clunky. If you want to make modules in Reaktor, you really need to invest time and effort in to understanding how it works. MaxForLive is a great platform for buildings tools for Live, but it seems like it would be really painful to build synths on that technology. I also like using u-He's Zebra. The user interface I plan on making will be quite different to Zebra, but I like the concept of being able to mix and match modules like Zebra.

I've decided to start writing my own modular synth. How it will hang together is quite clear in my head, but I have no idea what libraries, technologies or even languages I should be approaching. So, I would really appreciate some advice about the building blocks upon which I should get started. What I am hoping for is to find

a) A language (most likely c++ but open for suggestions)
b) An IDE which will allow me to develop in that language (preferably on Mac)
c) A set of libraries or technologies that will have out of the box, the kinds of things I will need (oscillators, filters, envelopes, sampling engines, and so on)

I'm happy to pay for this stuff if need be, but I need to be sure that I am headed in the right direction before I pay.

The technology choices will be based on the best fit for these preferences:

a) Good quality IDE
b) Clean programming model (at the language level, and at the library level)
c) Multi platform (Windows/MacOS)
d) Compile to VST
e) Have a decent UI model (preferably UI defined in a markup language)
f) Performance not the biggest issue (I'm not aiming to make a CPU intensive system. It won't need to be hugely optimised so I have room for a bit of CPU wastage at the language/library level)
g) Most of all, has all the stuff I need without having to build my own filters, oscillators etc.

Thanks!

Post

Well, I think that you are running away from clunky environments, so why chose to focus your efforts in solving problems that the 99% of the time won't have nothing to do with modular synthesis?

Basically you want a ready to go modular lib in a common programming language, I think that PureData can be one candidate, but why not SynthEdit or SynthMaker also...

I mean, for me it seems that it's not the wisest thing to go to the lowest level if what you like to do is to solve high-level like problems.

Just a warning, C++ is at least one order of magnitude more complicated (and thrilling) than managed languages, I'm not saying it to discourage you, but to warn you that at first you will spend more time than the intended understanding the language (not the syntax itself).

Post

Syncretia wrote:d) Compile to VST
That's going to rule out pretty much everything apart from Synthmaker, Synthedit and Roll-your-own.

I started down this path a while back (and keep thinking about it) but to be honest, it makes more sense to actually learn and have fun with things like Reaktor/Tassman/KarmaFX/VazModular/Scope than try to re-invent the wheel yet again.

If you want to sell things for others, sure you need to look at the first options, and C++/Juce is the way to roll-your-own, although SE/SM are easier starts (if a little different in mindset).

Do you want to make music, or write/sell code ?

:wink:

Post

koalaboy wrote:Do you want to make music, or write/sell code ?
Write code.

I didn't think it would be necessary to really outline my goal, but I will explain it a bit more clearly. Firstly, PureData, SynthEdit etc. are not programming libraries. They are modular synths. I don't want to use modular synths, I want to build my own one.

Basically, I've been programming my entire life so I'm not scared to get my hands dirty with C++ or whatever language I have to use. I already have a basic understanding of C++ and I have programmed in it before for basic stuff. But, I'm not in to maths and I'm currently not interested in learning how to build an oscillator or a filter. I'd like to leave that stuff to someone else for now. I just need some basic building blocks to work with.

The aim is not to write the best possible sounding synth. My goal is to reinvent the wheel and make yet another modular synth. Really, it's partly because I enjoy programming and enjoy the challenge, partly it's because I'm interesting in opening up avenues to get out of the business programming world that I've been stuck in for 10 years, partly it's because I have a very clear idea in my mind of how I want my particular synth to work, and it's nothing like the other modular synths that are out there.

I have some ideas for some fundamentally different features that other modular synths either don't do - or don't make easy. So, I feel this will be a worthwhile endeavour.

I have a knack for making things simple. This synth is not as ambitious as it sounds. I really just want to tie together a bunch of things that are done time and time again in a slightly different way with a user interface that works they way I see it working.[/u]

Post

I'm thinking I might prototype this in Silverlight. This library here looks like it's got everything I need except for the DAW integration:

http://silversynth.codeplex.com/

Might port it to C++ later.

This might be a good idea because I'd be able to get it up on the web quick and then get some feedback.

Post

I didn't mean to sound intrusive, but it's often useful to know the main goal in order to better help.

I'm actually in a very similar mindset to you *except* I really don't want to get caught up writing code any more - it's what I do all day, and in the evening I'm loathe to start again - even though I also need other avenues in the future.

I'd therefore say go for the whole C++/JUCE/Cinder/OpenFrameworks route. While it's a bit more work up front, you're going to end up in C/C++/Pascal at the end anyway, and there's plenty of 'building block' code out there. I suspect there's also much to be gained in writing those blocks, as you'll have a better feel for them as you glue them together.

I do understand the need though - I would like to write my own host, as I know exactly what I want. I just can't be arsed ;)

Best of luck on the project 8)

Post

You could find something useful here:

https://ccrma.stanford.edu/software/stk/

It's a library of audio-related stuff - filters, voice management, sampling, etc.

Post

Syncretia wrote: a) A language (most likely c++ but open for suggestions)
b) An IDE which will allow me to develop in that language (preferably on Mac)
c) A set of libraries or technologies that will have out of the box, the kinds of things I will need (oscillators, filters, envelopes, sampling engines, and so on)
Two options immediately come to mind:
* Synthmaker has the components out of the box, and a visual interface for linking them. If you need additional components, it offers a C-like language for developing new ones. It's a very good place to start with VST development. The major drawback for you is that it's Windows-only.

* Juce is a general-purpose cross-platform programming framework that includes support for building VST, AudioUnit, RTAS, and other formats all from a single source. It works with XCode on the Mac and Visual Studio on Windows. This path is harder to get started with, but if you want to do professional-level cross-platform plugins it's probably your best bet. It doesn't come with any synthesis building blocks, but some determined research and the resources at musicdsp.org can overcome that.

Synthedit is similar in approach to Synthmaker but IMO it's less polished.
Image
Don't do it my way.

Post

Sounds like me - work in Windows, a lot of C#, but mostly music on the Mac. I use Live and Reaktor, and have been thinking of rolling my own just for fun, but more along the lines of a something dedicated to a single task (like a mono bass synth, etc).

I'm thinking of starting in Reaktor (and creating my own skin - the Photoshop work, etc., is the same regardless), but even then, you're right - it is a clunky interface, both to use and to develop in. I keep hoping for 6.0... :lol:

Being a novice myself, my only advice would be to stick with C++. I drifted away towards C#, Java, expecting support for C++ to wane, but I think in many ways the language is stronger than ever - both in terms of support and optimization.

Good luck! Will be following this thread :D

Post

Pure Data is a programming language. Of course it lacks at the GUI side and you won't get any VSTs out of it.

Juce is a good way to get going without bothering about VST internals. It also has the advantage of a good documentation and support and is free as long as you don't want to release closed source binaries.

One other alternative might be the Delphi Asio & VST Packages. As far as I understand it comes with a lot of DSP stuff as well. I'm not sure how ready it is for OS X, though. I tried it with Lazarus (on Windows) but I wasn't able to get it to compile (well I gave up quite quickly, so this doesn't say that much).


Chris

Post

I think anything but C / C++ for the audio processing is crazy ;)
However the GUI is another matter. GUIs are SO time consuming to write, pick the easiest most convenient solution for that, even if it isn't C++ ( you can interface almost any other language to C or C++ anyhow). If I was starting out I might try a HTML5 frontend (GUI) with a c++ backend (audio).

Post

a modular synthesizer requires several elements, all of which are explained in detail in any c++ methods book.

http://en.wikipedia.org/wiki/Software_design_pattern

a combination of interfaces, factories and a basic mod-matrix will solve all your problems.

except for one - processing power requirements.

now you're looking at just-in-time compilation and honestly stuff that is a nightmare to deal with.

unless you really want to punish yourself and re-invent something like what exists already in these modular systems, you'll get better results by using the simple factory + matrix methods and assembling things by hand.

that way you can trim and optimize yourself rather than relying on a dumb algorithm to do so. even the best performing algorithms are still dumb, otherwise we'd have already reached the singularity.

i've worked on such a system for about ten months and i made it about 1/3rd of the way through the process. i hadn't even started on audio routing. modulation routing was nearly complete.

i want to implement the same system again (unfortunately i don't have the already-written code) i just haven't bothered with it yet. it's fairly trivial once you have all the components in place. if you don't you'll find yourself spending 99% of the time on writing those components.
Free plug-ins for Windows, MacOS and Linux. Xhip Synthesizer v8.0 and Xhip Effects Bundle v6.7.
The coder's credo: We believe our work is neither clever nor difficult; it is done because we thought it would be easy.
Work less; get more done.

Post

mahaya wrote:Pure Data is a programming language. Of course it lacks at the GUI side and you won't get any VSTs out of it.
http://crca.ucsd.edu/~jsarlo/pdvst/
An idiot on Set Theory:
"In some cases there is an object called red that contains everything that is red. In much the same way a pot is a plate."

Post

Thanks everyone!

All this stuff has given me a great starting point. I think it's clear that C++ is the way to go. It also looks like Juce will be a great GUI TOOL, musicdsp.org will be a great resource for finding different algorithms to achieve various tasks. If I can program in Juce from Visual Studio, it makes it very attractive because I use VS on a daily basis so at least I wouldn't have to overcome the IDE.

PureData keeps coming up but I guess I don't really understand this one. People say it's a programming language but I don't quite follow. I'm about to build a modular synth from the ground up in some language like C++. Can PureData be referenced from C++? The same question goes for SynthEdit etc. I understood that these things were modular synths, not programming platforms.

Big +1 on this:
https://ccrma.stanford.edu/software/stk/
This is exactly what I've been looking for. Are there any similar libraries around that compete with this set of tools?

Still, I think I'm going to do some simple prototypes in Silverlight or .Net because that will be easy for me to get started. Then, I'll port to C++.
I really don't want to get caught up writing code any more - it's what I do all day, and in the evening I'm loathe to start again
I spend nearly all my day in front of the computer. There's no place I'd rather be than in front of the computer. Coding and music are my life. I've been coding my entire life. I can code all day quite comfortably so I just figure I might as well combine the two. For me, the only passion greater than music is code. Most people don't get it. I don't expect them to.

Post

Syncretia wrote:Big +1 on this:
https://ccrma.stanford.edu/software/stk/
This is exactly what I've been looking for. Are there any similar libraries around that compete with this set of tools?
I don't know of anything similar. There's good stuff in STK but I seem to recall, many years ago, trying to copy some of the algorithms using my own coding style & idioms, and finding some surprisingly glaring bugs -- don't ask me what they were, though.
Image
Don't do it my way.

Post Reply

Return to “DSP and Plugin Development”