Music production has been my hobby for a year now. It's the main reason why I wasn't so active in blogging last year. Now I am used to it. I've developed some new habits and balanced my life. And I think it's high time to bring some programming into it.
I'm going to program a couple of audio plugins or standalone applications. I have several ideas to implement. And I'm going to write a series of articles about audio programming.
This post is an overview of the current state of audio programming frameworks. What options developers have to start with and my choice. It is quite short because I haven't found many popular frameworks.
You can start a new audio processing project without any framework. I doubt it is a wise decision. There are too many boring things to do before you can start processing audio. To name a few:
- you have to have GUI with knobs and sliders
- you have to implement a lot of OS or plugin-specific functions (file handling, getting audio buffers and so on)
- you have to implement a lot of utility functions.
This approach is OK only if you want to make everything by yourself. It is a quite risky strategy. There is a good chance that you can lose focus and end up without enough energy to finish a project.
On some degree, audio plugins are similar to games. GUI isn't required to be native for any platform. I can say it hardly ever has native widgets or controls. Sometimes audio plugins have weird interfaces that work only because they inspire their users. Of course, some amazingly sounding plugins are completely unusable because of UX errors.
Depending on the idea of the project it can be possible to even use a game development framework like Unity or Unreal engine. They both have strong audio subsystems. They both have a good library to build a decent cross-platform GUI. And you can easily ship your project to plenty of platforms.
There are some experiments in this area. There is a software synthesizer for Unity: Helm. It is a fully functional digital software instrument. It worth checking it out. I'm not sure about licensing issues of using it in commercial software, but you definitely can experiment with it. I think it is a good starting point for music learning software with elements of gamification for example.
If your goal is to develop a plugin, you should take into account that nowadays any audio plugin should be cross-platform. The market demands it. Many producers use Windows laptops. Others use Mac. Both markets are big enough. However, the plugin only for one platform looks a bit amateurish...
As a producer, I don't want to use Mac only third-party plugins. I can't use Windows only plugins. I'm quite OK with Mac only DAW (Logic pro from Apple) but only because I have a backup plan and it costs only $200.
And if a plugin exists only for one platform, it looks like it is a hobby project. There is no reason for that, but many producers just avoid using such plugins unconsciously.
There is only one exception. In the case of iOS plugin, it's OK to be for that mobile platform only. Because iOS is the only mobile platform with plugins.
Here is my shortlist of specialized frameworks for audio programming. Of course, bare C++ is an option, but as I have already mentioned, it requires a lot of boring work.
At the moment there are only two frameworks in the list. And one matches all my requirements. Let's start with it.
The first option is a popular C++ framework for audio applications called JUCE. Its selling point is cross-platform. It's possible to use it for desktop and mobile development.
It has a GUI library (based on OpenGL) and the possibility to make both standalone applications and plugins. There is a lot of audio-related stuff like DSP (digital signal processor) classes.
As examples of applications that are build using this framework are BeatWalk and Spacecraft. JUCE is free for small projects (in terms of money).
Another framework for audio programming is Audio Kit. It's for the Apple ecosystem only. Despite this limitation, it looks interesting.
You can use Swift. You can use native controls. And the DSP library is more interesting than JUCE's.
It can be OK for some projects. For example, if you want to make a plugin for mobile. The only iOS has such thing as audio plugins. So you don't have to care about cross-platform.
Not much. I hope there are more frameworks. Anyway, two actively developed frameworks with the active community are better than 10 less popular options.
For my experiments, I go for JUCE. Mainly because of C++. Many examples and sample implementations of algorithms are in C++. It's much easier to copy-paste things and then find a creative way to make something sounding great combining them.