Sound Thinking Platforms
Below is the list of possible platforms for Sound Thinking in the Spring 2009 semester. Each is accompanied by a short description and a URL to the platform's homepage. Text in
monospace is a direct quote from a linked site.
Platforms Being Considered
Processing (with Minim plugin)
First off, here is a quote from the site:
"Processing is an open source programming language and environment for people who want to program images, animation, and interactions. It is used by students, artists, designers, researchers, and hobbyists for learning, prototyping, and production. It is created to teach fundamentals of computer programming within a visual context and to serve as a software sketchbook and professional production tool. Processing is an alternative to proprietary software tools in the same domain."
The program itself is easy enough to use. It uses the notion of a Sketch as a project. Each Sketch may have one or more files which are executed by a run command. The language is based off of Java. The default download package has many examples available; including examples of how to use Minim.
- Daniel: I put together a simple scale program in Processing. I used some of Processing's basic functions and I also imported Java Sound. It plays a C-Major scale when you click the mouse in the main screen. To run it, you must install Processing and then unzip the Sketch that I have attached below. From there, simply open the Sketch in Processing and hit run. Click the mouse and hear the scale!
Scratch has a graphical interface that allows the user to snap together blocks to create code. It is based around making use of media and being accessible to new programmers.
- Daniel: I put together a sample scale in a very short amount of time. The blocks snapped together and I hit the Share! button and it was up. My concern is that scratch may not have the power or expression that we are looking for in the Sound Thinking class.
PureData is an extremely powerful audio program. It can be a little tricky to navigate at first, but once you know what kind of objects to create, it is fairly simple to use. The program uses a object model where the objects interact by lines connecting input and output. There is a wealth of online resources for this platform as well.
- Daniel: I put together a sample scale program on this platform as well. I have attached it below like the others. To play the scale, simply click the bang button in the upper left-hand side of the screen. To stop, click the stop message. The program has two modes: run mode and edit mode. Make sure you run in run mode. Also, the program itself will simply output to your speakers if you do not turn the sound off, this can get to be quite annoying.
- Jesse: When I first ran PureData, File->New wouldn't work. I also couldn't kill the program. I had to go into the Windows Task Manager and kill it multiple times to get it to go away. When I ran it the second time, things worked OK.
I tried to follow the videos at:
The tutorials are poor, but I was able to get through them. Here are some of the things I learned along the way.
- DAC stands for Digital Audio Controller. The name must be followed by a tilde (~) to ensure that it's an "audio rate" rather than a "control rate" object.
- Oscillators make noise.
- Ctrl+/ turns audio on, Ctrl+. turns audio off. These are keyboard accelerators from the Media menu.
- pitch 440 = A
- Ctrl+E toggles between edit and run mode, but does not properly update the Edit mode item on the Edit menu. That is, when I first started PD, there was a light gray check mark next to the Edit->Edit mode menu entry when in edit mode. But after typing Ctrl+E, that check mark never appeared again, regardless of the mode and regardless of whether the mode was changed using Ctrl+E or selecting the item from the menu. In this state, the only way to tell what mode you're in is by the cursor. In edit mode, the cursor is a hand. In run mode, the cursor is a pointer.
- MTOF = MIDI To Frequency (?)
- To delete a connection, click on it (the cursor will be an X) and then press Del or Backspace.
- MIDI 69 is A in this mode.
- When creating a message box, you must begin by typing a semi-colon (;) followed by the pressing the Enter key so that your actual code begins on the second line.
- Arrays start at 0.
- Minor 12-tone scale: 0 2 3 5 7 8 10 12
- Note the difference between left and right inputs in a variable object. Left = "constantly reevaluated" = infinite loop. Right = only reevaluated when an input (bang) is received.
- To delete a bad object, highlight it by dragging a selection rectangle around it and then press the Del or Backspace key.
FL Studio (FruityLoops)
"Pencil is not intended to mimick web-oriented vector-based animation software such as Flash. Its main purpose is to make traditional animation. Neither does it try to rival commercial software targetting the professional animation sector. Pencil is intended to be a simple program enabling anyone to make 2D animation."
- Jesse: I don't see that there's any music component to this software.
- Daniel: I think this is primarily an animation program, for creating short animations and the like.
This is a command-line driven platform that seems to be very powerful. The main page talks about Dracula and explosions. However, there is also a graphical front end called miniAudicle. The code itself looks like some kind of mash between Python and Basic.
- Daniel: ChucK actually has a bug regarding midi devices. It does not handle the devices properly and will hang/crash when you try to do anything with them. I do not think this would be a good platform for Sound Thinking.
"jMusic is a project designed to provide composers and software developers with a library of compositional and audio processing tools. It provides a solid framework for computer-assisted composition in Java™, and is also used for generative music, instrument building, interactive performance, and music analysis. jMusic supports musicians with its familiar music data structure based upon note/sound events, and provides methods for organising, manipulating and analysing that musical data. jMusic scores can be rendered as MIDI or audio files for storage and later processing or playback in real-time. jMusic can read and write MIDI files, audio files, XML files, and its own .jm files; there is real-time support for JavaSound, QuickTime and MIDIShare. jMusic is designed to be extendible, encouraging you to build upon its functionality by programming in Java to create your own musical compositions, tools, and instruments. In a spirit of mutual collaboration, jMusic is provided free and is an open source project. jMusic is 100% Java and works on Windows, Mac OS, Linux, BSD, Solaris, or any other platform with Java support."
JMusic is a Java library that has a lot of features. Of course, using this as the Sound Thinking platform means developing in Java. This may not appeal to the newer programmers or students with no programming experience.
JFugue is another Java library that is used for developing musical applications. It will likely have the same set of strengths and weaknesses that JMusic will have with the new programmers.
This is a Java-like language that is not very intuitive to use. The project itself is over 10 years old and the software has not been updated in over two years. They still have a build available for Mac OS 9.
I would describe it more as a tone synthesis and combining language. It does use Java-like syntax, but you are not writing loops and control statements, you are instead composing tone and noise synths. See the examples page for code + clickable audio samples: http://supercollider.sourceforge.net/audiocode-examples/
- Alex:Check this out... is this relevant?
- Jesse: Yes, very. I downloaded and simply unzipped their application and it ran the first time with no problem. You can now run their demos at:
As we discussed today, I see us talking about and demonstrating advanced tools, while having students do things with simple tools that demonstrate the same concepts. Thus, I could see us teaching students to develop a simple application like the one I developed this afternoon and then showing them SoundManager2 which extends the same concepts. If the students want more and can handle it, we can even teach them to use the API provided by SoundManager2. It's not hard, but it's not trivial, either, and learning how to use an API is essential to any type of programming today.
At first glance there appears to be good documentation and there are numerous well-documented examples, making this an excellent tool for use in a class. The documentation is at:
and the demos are linked off of the project homepage. All kinds of cool demos are at:
Thank you for finding this and telling us about it, Alex.
Gena and Daniel:
I'm very interested in whether you think novice programmers can be taught to understand the type of code that I developed. I'd also be very interested to see what type of things you might build with this technology.
Gena: I think a reasonable next step might be to try to outline assignments to be given in the course. I'll see if I can get started on that within the next couple of weeks. It would be terrific to have an outline of all assignments to be given before we break for Christmas. We could then focus on what and how we're going to teach the concepts needed to do those assignments. Do you think that this is a reasonable approach?