Audio Group

The audio group is charged with delivering cross-platform usable n-way voice communication support.

On Linux, sound support was very slow in coming but the ALSA standard appears to be leading the way.

Audio API Design

An audio stream is viewed as a binding of an audio source (microphone, network connection, file on disk, ...) to an audio destination (speaker, network connection, file on disk, ...). Multiple inputs might be bound to the same destination (mixing them), and a given audio source might be bound to several destinations. Conceptually, audio plays continuously until it is closed. The extension ".mp3" is used here as a representative example suggesting an audio file; the facilities might not handle .mp3 at all.

Operations on Bindings

Read the Icon graphics book and/or Unicon Technical Report #5 for additional discussion of the notion of bindings; the inputs are analogous to "contexts" and the outputs are analogous to "canvases".
f := open("foo.mp3","s") # default output: to local client speakers
f := open("foo.mp3","s", "out=dest.edu:8080") # play output at dest.edu
f := open("mic:", "s", "out=dest.edu:8080")   # talk to dest.edu
f := open("mic:", "s", "out=dest.edu:8080", "out=log.mp3") # multiple outputs
f2 := Clone(f, "out=log.mp3") # add an output for an existing stream
f3 := Couple(f1, f2)          # add f1's inputs to f2's outputs

Audio Attributes

Attrib(f, "volume=0.5") would set the output volume to half-strength. Several other audio attributes would be controlled through strings passed to this function. Attributes might also be specified in calls to open() or Clone().

Mixer Device

More generally, the audio API needs to support control of the mixer device. Under Windows there is a Mixer API, under Linux ALSA and OSS have API's for accessing the mixer.

Other Audio Features

What else do to the audio facilities need to be able to do? Sample/filter the data stream? Handle various kinds of errors; handle stream closures gracefully e.g. when a network connection closes.

Off the Shelf

The audio group has evaluated several existing libraries and tools for use in the project.

Candidate tools:
name portability license
OpenAL yes ??
GnomeMeeting linux only? GPL
PortAudio yes freeware
jvoiplib Linux+Windows GPL
We have been using jvoiplib-1.2.0, jrtp-2.8, jthread-1.0.0; need to look into jvoiplib-1.3.0, jrtp-3.x.x, jthread-1.1.0 at http://research.edm.luc.ac.be/jori/jvoiplib/jvoiplib.html

RTP Protocol Resources