As a musician or producer, there are many reasons why you may want to make your own music software. Maybe you've got a new idea for a guitar amp modeling application that existing applications don't do. Perhaps you are looking for a way to uniquely control your MIDI software with games controllers. Or you may be making your own MIDI controller and you want to be able to edit it via a software editor. Well all of these ideas can be made a reality using a number of different applications and platforms that I'll be covering in this article.
Most people assume that to create your own software you need to be an expert coder. However most of the platforms discussed here are specifically designed for musicians, artists, and designers to create software quickly without needing to know too much about software development, with a couple of platforms that don't require you needing to write any code at all!
There are a number of criteria I will be covering here that will determine which platform is best for you:
- What you want your software to do
- Your willingness to learn how to write code
- The operating system you want your application to run on, e.g., OS X, Windows, Linux, iOS, Android, embedded platforms.
- The format of software you want to create, e.g., standalone application, audio plugin, web app.
- Whether your application is just for personal use or you want to release it
- Your budget
PolyFuzz by Keith McMillen Instruments, an FX processing application developed using Max
Max (and its audio counterpart, MSP), developed by Cycling '74, is a graphical programming language for the development of music and multimedia applications, and to many it is known as the best platform for making interactive music performance software. The Max environment comprises of a set of graphical 'objects' that each have a number of inputs and outputs for modifying and passing data and audio. Each object has its own particular function, and are connected together via patch cords, all graphically laid out on a canvas known as a 'patch', which can be configured in an infinite number of ways depending on what you want your program to do.
Max/MSP allows you to do almost anything with audio and MIDI—input/output, synthesis/generation, recording/sequencing, effects/modification, analysis, and VST-hosting, without needing to write any code. There is also a development kit that has allowed a large community of developers to create many external objects for the software. As well as being extremely popular in the music hacking community, it is also used in the development of commercial software, such as for the editor applications for many of the Livid Instruments and KMI hardware controllers. If you are an Ableton Live user, you may recognize Max in its Max for Live format, which allows custom Live devices to be created, though Max-built applications can easily be connected to other DAWs via ReWire.
An example of a simple Max patch
Max 7 is available for OS X and Windows, and can be bought for $399 or via a monthly subscriptions service from $8.25. Programs created with Max can be exported as a standalone application that can be freely shared or sold commercially. See the Cycling '74 website for more details.
Ponyomixer, an audio mixer application built with Pure Data
Pure Data (aka PD) is another graphical programming environment, and is based around the same patcher programing language as that of Max/MSP. Again, the environment comprises of objects on a graphical canvas that are connected together via patch cords, though while the features provided are extremely similar to that of Max, there are a number of differences between the two platforms.
PD is an open source platform and is mainly developed by a community of users rather than a commercial business. The advantage of this is that it is completely free to use, and the openness of it has allowed its functionality to be greatly extended by a large number of people, as well being customizable by yourself if needed. However the drawback of this is that it doesn't have the professional support and user base as that of Max/MSP, which means there's a steeper learning curve when approaching PD. Another shortcoming (that is sometimes found with open source software) is that the user interface isn't as slick and polished as that of Max, and you can't create interfaces as attractive.
An example of a Pure Data patch
PD is available for OS X, Windows, and Linux (including embedded Linux systems such as Raspberry Pi). On OS X you can easily export your PD program as a standalone application, however if you want to share your program on Windows or Linux the user must have PD installed for it to run. If you want to build your own music software via graphical programming but don't have the money for Max/MSP, and you don't need a really professional-looking application, PD would be a great option for you. See the Pure Data website for more info.
Sync/Lost by 3bits, an installation application developed using Processing
Processing is an open source textual programming language and development environment that was initially created to teach computer programming fundamentals within a visual context, however it has also since been adopted by professionals as an easy way to create multimedia applications. Being open source, it is partly developed by a small team of volunteers that have created many extensions to the software, however it is primarily developed by a group of individuals affiliated with various schools and universities. While Processing is mostly used to create graphics, image, and animation-based applications, it includes a number of libraries that makes it a great candidate for developing audio and MIDI software.
The Processing programming language was designed to be a 'first programming language'—a language of easy syntax that would be non-daunting to someone completely new to programming. There are many books and online tutorials that teach how to use Processing, however being a textual language may mean there is a steeper learning curve than that of Max/MSP or PD. However if you are serious about getting into software development, you will find that textual languages give you a lot more flexibility. Processing provides audio and MIDI input/output, effects, wave and noise generation, analysis, and envelope generation, though the capabilities aren't as strong as that of Max or PD. However Processing would be a better option if you want your application to have a completely custom user interface, as the Processing language gives you a lot more control over the way an application looks and the way a user can interact with it.
The Processing environment and example code
Processing 2.0 is available for OS X, Windows, and Linux (desktop and embedded), and is completely free to use. Processing programs can be exported to standalone applications on all platforms, and can be freely distributed. There are also tools available for embedding your programs on web pages, as well as running them on iOS or Android devices. See the Processing website for more details.
Cosmosƒ by sonicLAB, a software synthesiser built with openFrameworks
openFrameworks is an open source toolkit for developing interactive and multimedia applications. It is very similar to Processing, in that it is designed for artists and designers to create software in a simple way using a textual programming language, developed by a core team of individuals affiliated with universities and technology labs. However there are a number of differences between the two platforms.
openFrameworks uses the C++ programming language rather than being its own language. C++ is a very widely used, which makes it a useful language to master if you are serious about getting into software development, and allows openFrameworks code to be mixed with other C++ toolkits, if required. C++ isn't as beginner friendly as Processing, however openFrameworks uses the language in a way that makes it easy to use, and comes with many examples and demo projects.
Secondly, openFrameworks requires an Integrated Development Environment (IDE) for writing and building your programs, rather than having its own environment/application. openFrameworks can be used with the most commonly used IDE's for all of the supported OS's (e.g. Xcode on OS X, Visual Studio on Windows), and while these IDE's are more complex than the Processing environment, they are very useful applications to master for software development endeavors.
Finally, openFrameworks is faster, more flexible and more complex than Processing, and has much stronger audio capabilities (e.g., you are able to deal with audio streams on a per-sample basis), though that does mean that putting together an audio application may not be as quick and easy as using Processing.
An openFrameworks project within Apple's Xcode IDE
openFrameworks can be used to develop applications for OS X, Windows, Linux (desktop and embedded), iOS, and Android, and is free to use. Standalone applications can be built for each platform, and can be freely shared and sold, commercially or non-commercially. If you've got a fairly complex audio application in mind, but don't have the time to dig too deep into software development, this would be a good platform for you to use. See the openFrameworks website for more info.
AlphaLive by nu desine, a MIDI editor application developed using JUCE
JUCE is another C++ library, though while openFrameworks (and Processing) are primarily designed for artists and designers to create software easily without getting too involved in the complexities of code, JUCE is designed to be an all-in-one platform for developing rich, cross-platform applications and plugins, with a strong focus on audio and MIDI-based applications. While the previous two platforms are mainly used for art installations and interactive projects, JUCE has been used in the development of numerous commercial applications by companies such as Korg, M-Audio, PreSonus, Image Line, Arturia, and even for the development of Max/MSP!
JUCE is the most complex platform covered here, but it has a number of tools and features that makes it a great option even for new developers. Firstly, it has a tool called the Introjucer, which can act as a 'wizard' for generating and configuring your IDE projects and code in an easy way. It also contains a WYSIWYG user interface editor, allowing you to design interfaces without any coding. Secondly, it comes with many demo projects, giving examples of everything that can be done with JUCE, and how to do it. Next, up until recently, JUCE has been developed by a single individual, making the codebase highly consistent, literate and easy to use. The code is also very well documented. Finally, the library can handle just about everything in regards to building audio and MIDI applications. It can even be used to develop cross-platform audio plugins (AU, VST, RTAS, AXX) using a single project, which is one of the main reasons it is so popular among audio software companies.
A JUCE project within Apple's Xcode IDE
JUCE can be used to develop applications for OS X, Windows, Linux (desktop and embedded), iOS, and Android. It is free to use for open source projects, but if you want to release your application without releasing the code you need to buy a commercial license, which starts from $595. If you are serious about developing commercial applications or going into software development as a career, I highly recommend JUCE. It has the steepest learning curve amongst all the platforms covered here, but in regards to developing audio applications there is not a lot JUCE can't do. See the JUCE website for more details.
So whether you want to learn how to code or not, these five platforms mean that any of your music software ideas can easily be realized.