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:
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