SSSim

This page is information for the developers. If you are interested in the SSSim project, sorry, but we haven't started development yet.

The SSSim project aims to create an expandable sound system simulator. If you've ever played Sierra's The Incredible Machine, you'll have the basic idea already. If not, let me fill you in.

Here is the basic layout of the screen:

Menu bar





Playing field





Parts bin

The parts bin contains all of the pieces (mixers, amps, microphones, etc.). Inside of the parts bin, the pieces are separate components. Selecting a piece and dropping it on the playing field creates a copy of the object. On the playing field, objects can be manipulated and connected to other objects.

On the whole, there are a few classes of components that will need to be created:

Note that a mixer could be considered an input and output device, but I've narrowed down input devices to things that produce sound input, and output devices to things that produce sound output or that store the audio signal for later use. A mixer does not produce sound input (it takes input), neither does it produce sound output (it sends that to the amps or headphones). If a mixer contained embedded speakers, then it could be considered an output device.

For the purposes of the object design, there are two distinct classes of objects:

Cords will likely be the most challenging of the objects. They are not square, so they will have no window to themselves. The host software (SSSim) will need to draw them manually. Also, cords can be double-ended (XLR to 1/4in mono, for example). The only properties of the cord ends are style and gender. To connect a cord to another cord or a connector on a device, the style and gender will need to match exactly. To start, let's not worry about double-ended cords. Those can be created manually on the playing field by using three cords and a splitter object.

Some objects will not be available in the parts bin, for example. A slider will not be available to drag onto the playing field, but it will be part of a mixer object. This would be most easily conveyed to SSSim via an object property.

Some objects have a very obvious design. An 8-channel mixer, for example, would contain one slider for "master output level," eight "channel" objects (each consisting of one "input" connector, one "gain" knob, a couple "aux send" knobs, and an "output level" slider), and a few more things, like I/O connectors. Most of the sub-objects would not be available in the parts bin.

Because of the OO approach, some devices can be created by grouping together other objects. For example, the "boom box" object could instantiate a CD player, tape deck, a radio receiver object, an input signal switcher (for choosing which object will send to the output), and cords to connect all the objects, and then provide a new interface to access all of the objects.

Now that I've got the basic idea out there, feel free to improvise with object design! I suggest using C++ to model the objects, mostly because it supports inheritance. Also note that we won't have superclasses for most of the objects -- no InputDevice or OutputDevice. As far as SSSim is concerned, there are only cords and non-cords to worry about. The only thing that makes an input object an input object is that it has one or more input connectors on it.

Also, down the road (very, very far down the road) the program should be able to realistically produce sound. For now, I just want it to be able to verify connections and point out trouble spots (like amperage and impedance problems). Eventually it'd be nice to let objects be bound to physical devices on the host computer (I.E. virtual speakers to the computer's physical speakers, CD player to a physical CD player). And (even further down the road) have a realistic sound model that takes into account room size, wall type, and will be able to emulate such problems as feedback, somewhat similar to ray-tracing for sound. (Note that the host computer would need to be very, very fast to get good quality from the setup.)