Latest revision as of 17:57, 4 March 2008

Contents

Software Interfaces for Music

Using Python, a dynamic object-oriented programming language, with Mirra, a 2D OpenGL Python library developed by Ixi-Software, we can rapidly prototype graphical user interfaces that will send out Open Sound Control messages. These Open Sound Control messages can be received by a number of different synthesis engines including Pure Data and ChucK. Since both environments can be run concurrently, changes and design descisions can be made very quickly, almost on the fly.

How to Use It

Mirra has been installed on the Planet CCRMA systems under: /usr/share/doc/mirra-0.3.2/
There you'll find an /examples directory and a /documentation directory. To launch any of the examples, navigate your terminal window to the examples directory and type: python examplefilename.py into the terminal.

For instance, python pong.py would launch the pong example.

Playing with the examples and using them as a starting point is a great way to being experimenting with the Python language and seeing what Mirra can do.

Examples I've Made

Below is an example of a graphical interface I've begun to work on based on the pong.py code as a starting point. There are several blocks that can be dragged around the screen and a single ball that bounces off of the blocks and off of the walls. If a block is hit by the ball, it plays its sound. The sound the block makes is based on its position on the screen. For example, I've mapped that position using the x-axis for pitch and y-axis for gain. I've also tried a mapping using the y-axis for sample rate playback (pitch), and the x-axis for pan position. One of the things that is really great about using Mirra with something like ChucK is that you can alter your synthesis code without ever having to stop your Python code from running.

Here is another example of a graphical mixer that does not use faders or knobs. Instead, there are collection of blocks each tied to their own audio loop. When a block is placed inside the center square, or mixing pallette, the audio is heard. Once inside the mixing pallette, the blocks can be moved to affect their sound plaback. Left to right controls pan postion while the y-axis or up and down controls the playback rate of the audio loop. Moving up pitches the sample up and moving down pitches it down.

Be careful when working quickly between the two environments, Python and ChucK, to be sure to change your syntax between the two languages. Python uses no semi-colons or brackets. ChucK uses both of those things but cannot use an equal sign to define a variable. If you aren't careful, you'll find a lot of errors in one or both of the two programming environments.

Future Plans and Implementations

Exploring the use of color as a control parameter could be very interesting. Especially when dealing with multiple levels of transparency in obejects. For example, layering two objects on top of each other could produce a new hue of their colors, and that mixing could translate into additional harmonic overtones of the synthesized sound.

I would like to implement OSC feedback from ChucK into Python. That way, while the sound is being altered, the sound being created could be represented as a visualization to the music being made. For example, in the mixing pallette example, when a block is placed on the mixing area, it could begin making small movements to the rhythm of its audio loop. This would be visually engaging and would further enhance the user experience.

Making a more comprehensive application that had more features and changability than the one trick pony type of interface I'm creating now would be an exciting goal. To create an application that looked good, felt good, sounded good, and was most importantly fun to use.