freesci-develop
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freesci-develop] Clarification on the Glutton sound subsystem update


From: Christoph Reichenbach
Subject: [freesci-develop] Clarification on the Glutton sound subsystem update
Date: Thu, 25 Dec 2003 02:50:23 +0100
User-agent: Mutt/1.3.28i

Hi everyone,

just to clarify: The last commit completes the glutton sound subsystem
infrastructure, with the exception of its configuration scheme. The
system basically consists of the following units, some of which are
optional:

The polled sound event checker: This part merely serves to compute
sound events. It is separate from the part that plays sound, but
re-uses its /song iterators/, which are the internal representations
we use for songs and sound effects.

The /song player/: This can be almost anything that takes a song
iterator and plays it. Right now, the only implementation is a rather
internal one which makes use of a /sequencer/ and a /timer/.

/timer/s are things that allow certain callbacks to be invoked
semi-regularly. They are used by /song player/s and /mixer/s to handle
audio output.

/sequencer/s take individual MIDI commands and output them in some
fashion appropriate for the hardware they abstract. They may also use
certain lower-level /device/s. /software sequencers/ are a special
breed of /sequencer/s that do not require a /device/, but, instead,
are hooked into the global /mixer/.

The /mixer/ is a singleton object that accepts input data from several
/feed/s, converts it, mixes it, and converts it to the correct output
data. Then, the mixer computes how much data to output and feeds its
aggregated /pcm_device/. The mixer is one of the two entities invoked
by a /timer/.

A /feed/ is an abstract source of data for PCM mixing. It can be
finite in length. A mixer must be able to accept an arbitrary number
of feeds simultaneously.

A /pcm_device/ is an object that abstracts on an output device capable
of emitting PCM-based audio. It is aggregated and invoked by the
global /mixer/. /pcm_device/s may provide an associated /timer/, which
is preferrably chosen as the global /timer/ when deciding on which
timing mechanism to use globally.

An /audio buffer/ is a queue (FIFO) that handles "buffer underruns" by
copying the last 'sample' it received. It is commonly used by
/pcm_device/s, /mixer/s and certain /feed/s, such as those employed by
/software sequencers/.



I hope you're all sufficiently confused now. I'll write a better
description if I ever get hold of the partially LaTeXified revised
documentation.


-- Christoph




reply via email to

[Prev in Thread] Current Thread [Next in Thread]