home        music        shows        about        shop        contact        links        etcetera        donate

Note: This competition has ended and this document is being provided for historical reference only. The prizes and entrant information have been removed, since they are no longer relevant.

SEEK300 Coding Competition 2006

Welcome to the SEEK300 Coding Competition 2006!
This contest is being sponsored and hosted by oblyvaeon.com
for a performance art project in the spirit of The Burning Man

The Burning Man


The idea is to communicate remotely by transmitting a defined modem audio signal through the air. This will be used in a performance situation where the stage transmits the signal over loudspeakers out to the audience, who may receive via cell phone, PDA, laptop, shoulder-mounted nitrogen-cooled mainframe server, or anything else connected with a modem or microphone. Encoded in this signal may be any manner of things including: audience participation suggestions and invitations, information about what is happening on the stage metaphorically, rants, insults, sing-along lyrics, ASCII art of your naked mother, ASCII art of YOU naked, etcetera. The statement being made here is: how technology is increasingly more present in, and influencing the creation of, art. Not only this, but how technology can expand and enhance the human race's conception of art by bringing about a feeling of community, artistic expression and accomplishment in someone who was expecting only to view or acquire the art being presented to them. This awareness of a universal connection is paramount and prerequisite to human evolution, and even survival, in an age where violence and indifference are destroying not only ourselves, but also the environment that sustains us.


REQUIRED: The objective of this contest is to code a Bell 103/ITU-T v.21 300 baud modem emulator which will operate on a Win32 platform. The user interface must be English language. Entries will be tested on Windows 98(SE) and Windows XP, and though only XP compatibility is required, you are encouraged to make the program as portable as possible. The program must operate properly according to the two given modems' specifications, and will be also tested with hardware modems. The emulator should be a stand-alone application (redistributable library dependencies are allowed) able to reproduce the operation of both types of modem, selectable by the user, and operate in Answer and Originate modes, also selectable by the user. Unlike a hardware modem used in conjunction with a terminal emulator, since there is no need for speed negotiation, this program should be ready and able to Modulate or Demodulate a signal according the current user-selected operating mode (Bell/ITU-T and Answer/Originate) at any time, not just when synchronized with another modem via a detected carrier signal. In other words, comparing the program analogically to a hardware modem, it will always operate as if a carrier signal has been detected and speed has been negotiated at 300 bits per second. The program may implement its Modulation and Demodulation routines separately, as a user selectable mode, or operate fully in simultaneous standard modem mode. (See the MODEM section below).

OPTIONAL: The program could have a user-specified Carrier frequency and Mark/Space separation for Answer and Originate signals, using presets for Bell 103 and ITU-T v.21.

OPTIONAL: As mentioned above, the program could be coded on, or ported to, a variety of platforms like Java (multiple platforms), .NET Compact Framework (Pocket PC), PalmOS, etcetera, in order to provide maximum audience accessibility on cell phones, PDA's, or other devices. This is a highly desirable option. (hint, hint; wink)

REQUIRED: The Modulation's method of audio output will be selectable by the user, and must be able to 1. Write WAVE format RIFF files of at least 16-bit 44,100 Hz Mono (other formats, bitrates, sample rates, and number of channels are optional), and 2. Use the computer's sound card audio out. The output signal's amplitude (volume) should be adjustable from -60 dB to 0 dB. Data for the modulation signal will be obtained from 8-bit ASCII text files.

OPTIONAL: Allow the user to select the left, right, or both channels of a stereo sound card for output (since the output signal is Mono).

OPTIONAL: The program could be able to use both types of output (WAVE and sound card) simultaneously.

OPTIONAL: In addition to reading text files, when operating in sound card mode (or the optional simultaneous mode listed in the previous optional function), text could also be typed by the user and transmitted in real-time, for example: to be received by another instance of the program running on another computer.

OPTIONAL: The program could act as a simple terminal emulator as well (i.e. act like a hardware modem utilizing terminal emulator software), synchronizing through sound card audio with another instance of the program running on another computer, for example: operate in ANSI terminal mode and utilize X/Y/Zmodem protocols for data mode binary file transfers.

REQUIRED: The Demodulation's method of input will be selectable by the user, and must be able to 1. Read the same formats of WAVE files that the program outputs, and 2. Sample the computer's sound card Microphone (or Line-in, user selectable) input. Data received will be displayed on the screen and will be savable as 8-bit ASCII text files. In the case of sound card input, the data should be displayed, in real- or near real-time, as it is received, and in the case of WAVE files can be displayed from a buffer during or after reading the file.

OPTIONAL: If the program incorporates any optional Modulation functions, it should obviously be able to Demodulate those functions, where appropriate, as well. (i.e. select left/right channels; Modulation Line-out, Demodulation Line-in), receive and display real-time typed text, or terminal emulator mode would have corresponding functions, while the simultaneous WAVE/sound card output example would not be applicable unless the instances were running on the same computer and sharing the same WAVE file; even though this is possible, it is not really practical for this application, so in this case, a complimentary function is not necessarily desirable. Note that implementing optional Modulation functions does NOT require you to implement a corresponding Demodulation function, this is merely a suggestion.

OPTIONAL: When using the sound card for input/output, the user could select a Half-duplex mode (Modulate or Demodulate only) or a Full-duplex mode (Modulate and Demodulate simultaneously, just like a hardware modem operates).

REQUIRED: Your code should be commented. This is usually a given (and just good coding practice), but sometimes people forget.

OPTIONAL: Provide a user manual/documentation on any functionality or limitations of the program.

So, to recap, the required functions are:
1. English Win32 application emulating Bell 103/ITU-T v.21 standard modems (user selectable).
2. Operate in Answer/Originate modes (user selectable).
3. Read ASCII text files as data for Modulation.
4. Output the Modulation signal (audio) to a WAVE file/sound card (user selectable).
5. Demodulate from a WAVE file/sound card Microphone/Line-in (user selectable) and display text, savable to ASCII text file.
6. Commented code.

Remember, any of the optional functions you implement will give you a better chance of winning. Also, if you think of something not listed above that might make this program even more useful, you may also be awarded points based on how well these additions are executed. If you are somehow able to implement ALL of the optional functions listed above, we will award you a valuable bonus (sur)prize in addition to any other prizes you may win!


The following information is provided for your reference. These modems use AFSK (Audio Frequency Shift Keying) modulation operating at both 300 baud and 300 bps, at the following frequencies (in Hertz):

Bell 103
1170 = Carrier
1070 = Space (Carrier - 100 Hz)
1270 = Mark (Carrier + 100 Hz)
2125 = Carrier
2025 = Space (Carrier - 100 Hz)
2225 = Mark (Carrier + 100 Hz)

ITU-T v.21
1080 = Carrier
1180 = Space (Carrier + 100 Hz)
980 = Mark (Carrier - 100 Hz)
1750 = Carrier
1850 = Space (Carrier + 100 Hz)
1650 = Mark (Carrier - 100 Hz)

You may also download the PDF document Implementation of an FSK Modem Using the TMS320C17, APPLICATION REPORT: SPRA080 (1.65 Megabytes), Copyright (c) 1997, Texas Instruments Incorporated. Although it does contain extraneous information and pertains to a specific Texas Instruments DSP chip, it also contains a good deal of relevant information for this project, and is a good read if you're into technical manuals about ancient technology :)

Copyright 1996-Present (c) oblyvaeon, All rights reserved.