Doors is a multi-user multimedia performance framework which controls distributed multimedia devices. It addresses issues of resource management, portability of content, extensibility and ease-of-use for a non-technical user.
The architecture is composed of the following 3 components:
Devices
Doors Devices are programs which perform some sort of musical or multimedia function, eg. MIDI player, lights controller, graphics program. They use Corba, which means they can be remotely controlled by another program.
If a Device plays a piece of media, eg. a MIDI file, then it should play it at the same time, and at the same tempo, as all the other Devices. This is achieved by specifying the exact time and the exact tempo at which playback should begin. The Device knows what the exact current time is, because the host operating system's clock is synchronised with an NTP server.
Volunteers are invited to develop new devices. Candidate devices would be: WAV/MP3 player, MOD player, lighting controller, graphics program, digital video player, pyrotechnic controller, custom hardware controller etc.
Controller
When a Device starts up, it registers itself with the Controller. There is one Controller per domain, and the Controller knows exactly which Devices are available and what they can do.
The Controller can schedule some musical content for playback by parsing an XML file. It decides which Device is most suitable and instructs that Device to play the content. The Controller must also manage a Device booking schedule, so that a Device is never accidentally 'double-booked'.
Content
Content is encapsulated as Parts. Conceptually, a Part is a component of a musical structure, eg. vocals, a bassline, a percussion loop. Technically, a Part is an XML document with root element 'part' as specified in doors.dtd.
A Part specifies a device by name or by type, and parameters to be sent to that device. For Parts which schedule a media file for playback, these parameters will include the exact start time and the URL of the media file to play. PartXML files and associated media files usually live on a web server.
A Part may specify many devices. This is useful to eg. schedule a percussion part which is made up of several MIDI files each played by a different device. Another very exciting use of this design feature is that a single part may be expressed using multiple medias simultaneously (eg. sound, lights & graphics) to create 'synasthaetic' music.
User Interface
A user interface connects to the Controller and is the point of human interaction. Many GUIs may be connected to the Controller, and as such, many users may use the same Doors system simultaneously.
A simple GUI has been developed in Java/Swing (see screenshot below) and displays Parts as blocks. The blocks can be dragged and dropped into a timeline. Volunteers are invited to develop new user interfaces, eg. a GUI for a wireless device or a text-only console.
Standard GUI (Java/Swing)