This is the written version of the talk given by Prof. Roger Dannenberg(the creator of Audacity) at the Git Commit Show 2020. In this, he talks about Soundcool and it's software design.
About the speaker
Roger Dannenberg is a professor at Carnegie Mellon University. He is a music composer and a computer scientist, and he has multiple projects like audacity and others. In this talk, he showcased one of his breakthrough project, and he tells us what it is about and how he built it.
What is "Soundcool"?
Soundcool is a collaborative computer music creation system. It is a modular software system for creating music and sounds and for manipulating sounds. The basic idea is that SoundCool comes with a bunch of ready-made modules like this signal generator and a mixer. You can hook them together and hook the output up to your speakers and control the sound. Another interesting thing about Soundcool is that there's a Wi-Fi interface for mobile devices and a Soundcool app that allows you to manipulate and control sounds via touchscreen.
Soundcool is designed for music education, and it allows many people to collaborate because of these mobile device interfaces, so working together in the classroom is a very musical thing to do and a very educational approach to electronics.
Roger was also co-writing this opera, The Mother of Fishes, with co-composer and soundcool leader Jorge Sauce Tree in recent years, and he played a small excerpt from it in the video. This is a scene from the opera where the hero is fighting a dragon with his sword, and you'll hear some whooshing sounds that are created with soundcool and also some big electronic sounds that complement or blend in with the orchestra. There is another piece that is played in the video called "Chocolate Race," which is for a wind ensemble, narrator, and live sound processing. So if you listen carefully, you'll hear that Soundcool is capturing some live sounds from the band and manipulating them.
Soundcool gives some software design lessons. There are some things that make Soundcool interesting, and that may have some relevance to other software projects, especially software that's made for end-users to do creative things. These are:-
- Having components with ready-made interfaces
- offering support for plugins.
- Providing interfaces for external control
The first one is components with ready-made interfaces, which means that when you build an application you also build the interface because in SoundCool each of these modules is bundled together with a graphical user interface. In programming, it is common to think of creating the program or functionality first, then creating an interface to control it. One of the neat things about Soundcool is that as you're building things and putting modules together, the interfaces are right in front of you. They're packaged together so that users may not even realize that there is any separation between the interface and the function. This is very good for prototyping and makes things simple.
The second idea is support for plugins. Roger has been building computer music systems for four decades, and one of the things that he tried to do in earlier projects was to build very comprehensive systems. You kind of have one environment or one working area where you can do everything. Users are happier to find off-the-shelf components that are just ready to go, and so the thing here is that if you can support plugins, maybe you can inherit lots of good stuff for free, and show you how that works. In Soundcool, we leverage a plug-in standard called VST, and if you want to add one of these plug-in components, you first instantiate a Soundcool VST host module. Then, with a load button, you can select which plug-in you want, and then, with the open button, you open up the interface that comes built into the VST plug-in.
For example, if someone is interested in an analog synthesizer, bringing in the plug-in and getting everything ready to go is quicker and easier. You can use it to create some cool things. So, Soundcool is a very nice tool kit for building things and putting things together.
The third idea is interfaces for external control. We've provided an interface using a technology called Open Sound Control that lets you control Soundcool with anything on the outside.
One of those things is the mobile devices, and the Soundcool app runs over a Wi-Fi. It also allows collaborative performances. The last one Roger did, in that the soundcool was running on a computer in Madrid, Spain, he was in Pittsburgh controlling some things, Jorge and others were in Valencia, and all others were working and controlling together. They distributed the sound through Zoom, and you can find that performance on the soundcool website.
The second is microcontrollers and sensors. For example, the sword that you might have heard about in the opera had one of these little sensors buried in it. It is a computer with Wi-Fi battery gyros and open sound control all in one little unit, and it allowed us to do real-time control from the stage.
The third thing is programming languages. You can generate the same kind of control that we control with these apps. The technology we used to build soundcool is max/msp, which is a visual programming language. If you'd like to get soundcool, go to soundcool.org and you can learn a lot more about the project and see what's going on for future work.
We are re-implementing soundcool in the browser using Web Audio technology. So it's Web Audio react and redux in the front-end and we're using NodeJS on the backend with the standalone version of SQLite and, for the server version, MySQL. We have this vision that someday anyone that wants to play with soundcool can just go to our website and immediately have all the software running in their browser and they can share what they do with other people and maybe even perform together online.
To get mastery, do what musicians do: practice, practice, and practice. There is no better example of mastery than a virtuoso playing a musical instrument. The second thing is, don't always take the easy way out. A lot of young programmers do what comes easy, throwing things together and maybe not actually doing what they want but just doing what they find easy.
If you're a musician, you don't get to play, you don't get to change the notes if they're hard, you just have to practice and learn it. The same goes for software; you should not always take the easy way out and pay careful attention to good design and good software when solving problems. That's how you get better.
For more such talks, attend Git Commit Show live. The next season is coming soon.