q3osc

an interactive musical performance environment

Project Abstract


q3osc is a heavily modified version of the open-sourced ioquake3 gaming engine featuring an integrated Oscpack implementation of Open Sound Control for bi-directional communication between a game server and one or more external audio servers. By combining ioquake3's internal physics engine and robust multiplayer network code with a full-featured OSC packet manipulation library, the virtual actions and motions of game clients and previously one-dimensional in-game weapon projectiles can be re-purposed as independent and behavior-driven OSC emitting sound-objects for real-time networked performance and spatialization within a multi-channel audio environment.

from "q3osc: or How I Learned to Stop Worrying and Love the Game", In Proceedings of the International Computer Music Association Conference, Belfast, Ireland, 2008. download...

Quick Links


v1.1 - Windows Binary (1.20.2009) [1 MB]: q3osc_v1.1_win.zip
v1.1 - Linux/OSX Source (6.19.2008) [541 MB]*: q3osc_v1.1_6.19.08+.tar.gz
v1.1 - Linux/OSX Source (6.19.2008) [13.9 MB]: q3osc_v1.1_6.19.08.zip
SVN repository (private/read-only)
svn+ssh://gate-ccrma.stanford.edu/user/r/rob/svn/q3osc/

[ Sourceforge.net repository coming soon... ]

q3osc: an introduction

q3osc combines the fast-paced virtual playgrounds of FPS video games with the limitless possibilities afforded by dynamic interactive music programming languages. By exporting a variety of parameters from within the modified ioquake3 game engine over a data protocol called Open Sound Control, player movements and fired projectiles can be used to control sound synthesis and playback in a variety of computer music software. In short, this turns quake3-style levels into musical playgrounds, where hoardes of networked performers can play with sound and music in a communal experience.

While q3osc can be run in many different configurations, the basic configuration has a game server running the q3osc game server with game-clients using "vanilla" or unmodified ioquake3 clients (like OpenArena), and a sound-server, either on the same computer or on a separate computer, running an audio synthesis or performance language like ChucK, Max/MSP, Pure Data or Supercollider.

As clients move through a game map (a virtual environment created by a user or downloaded from the web), their positions and the positions of all projectiles they fire are sent over the network to the sound-server. There, the audio software reads in the data sent from the game and turns that information into sound using a variety of user-created methods.

Source and Binary Downloads:

(1.26.09) Current released code-base is v1.2, which has been compiled and tested against Linux (Fedora) and OS X (10.5.3) with Windows testing ongoing.

v1.2 - Linux/OSX Source (1.26.2009) [6.4 MB]: q3osc_v1.2_1.26.09.zip

(6.19.08) Current released code-base is v1.1, which has been compiled and tested against Linux (Fedora) and OS X (10.5.3)

v1.1 - Linux/OSX Source (6.19.2008) w/OA .pk3s [541 MB]*: q3osc_v1.1_6.19.08+.tar.gz
v1.1 - Linux/OSX Source (6.19.2008) [13.9 MB]: q3osc_v1.1_6.19.08.zip
v1.1 - OSX Binaries w/OA .pk3s (6.19.2008) [270.8 MB]*: q3osc_v1.1_bin+.zip
v1.1 - OSX Binaries (6.19.2008) [9.2 MB]: q3osc_v1.1_bin.zip
v1.0.1a - OS X Source (6.16.2008) [559 MB]*: q3osc-OSX_6.16.08.zip
v1.0.1 - Linux Source (4.06.2008) [291 MB]*: q3osc_4.6.08.tar.bz2
Open Arena .pk3 files: [261.5 MB]: baseoa.zip
*(also includes OpenArena .pk3 files)
Special thanks to Dave Kerr for his help with OS X linking issues and to Matt McChesney for his most excellent Windows compilation!

In-game Setup

Here's a quick run-down of the basic in-game console flags and values that need to be set to stream OSC from the q3osc game server to one or more client sound-servers:

To access the in-game console, press the ~ key. All variable assignments done in the console must be prefaced by a "/". Server-side variables can only be set from the server itself or by a client using rcon.

/osc_hostname# [ip-address]

Up to 20 OSC output streams can be configured using the /osc_hostname# variables, where # is set 1-20, e.g. "/osc_hostname3 192.168.0.3" will stream OSC to the specified address.

/osc_projectile_port [port-number]

The portnumbers for projectile and client data can be addressed independently. This value should be set to the port number on which the targeted sound-server is listening: "/osc_projectile_port 6662" will target port 6662 on each sound server being addresed.

/osc_client_port [port-number]

Same idea as osc_projectile_port...

/osc_send_client [0/1]

To enable OSC output from each individual client (X,Y,Z coordinates), set this flag to 1.

/osc_send_projectile [0/1]

To enable OSC output from moving projectiles, set this flag to 1.

/slork_send [number-of-osc-outputs]

This rather inelegantly-named variable sets the number of osc_hostname# vars which will be used for OSC output, e.g. if slork_send is set to "5", then OSC output will be sent to clients listed in slots osc_hostname1, osc_hostname2, osc_hostname3, osc_hostname4, and osc_hostname5. slork_send can be set from 1-20. NOTE: "slork_send" will be renamed in a future release to a more generic name.

If all these variables are set, the connection between game server and sound server should be active.

q3osc/Open Sound Control formatting

OSC-enabled sound-servers should be configured to receive OSC messages formatted either as OSC messages or as OSC bundles.


OSC messages are currently formatted in the following manner:

/projectile "plasma" 0 87 894.454651 184.281860 -8038.076172 -1079107888 0 0

OSC projectile bundles are currently formatted in the following manner:

[ 000000001
/classname "plasma"
/projectilenum 84
/origin 102.030594 2550.875000 -2333.863281
/ownernum 0
/targetnum 55
/bounce 1
/explode 0
]