Re: [linux-audio-dev] a new application underway

New Message Reply About this list Date view Thread view Subject view Author view Other groups

Subject: Re: [linux-audio-dev] a new application underway
From: Paul Barton-Davis (pbd_AT_Op.Net)
Date: su loka   10 1999 - 13:11:11 EDT


>In hardware we can always add new knobs and sliders, but PCs rarely
>have more than one controller device (=mouse). Keyboard isn't a very
>good (realtime) controller.

right. its exactly because of this that the user interface must be
distinct from the rest of the program - if you don't have a good
controller, you want a different kind of interface than if you do. i
don't want to force you to deal with 16 on-screen faders if that makes
no sense, but i don't want you to force me to use a model in which i
can only alter one thing at a time.

but i think we agree on this :)

>Well, for instance in ecasound, I chose to concentrate all processing
>around chains. All chain operators (=effects), controllers, etc are
>connected to chains. Inputs and outputs are separate objects.
>For simplicity (=performance), a chain can only have one input and
>output, although one input/output can be connected to many chains.

how will you ever handle a stereo mixer strip ? it has one input, and
gets routed to two outputs. for surround sound, you take one input,
and output it to some variable number of outputs.

hdr has low level input devices, output devices, and four higher-level
abstractions called sources, destinations, strips and buses.

the engine does this:

       while (1) {

              for each input device {
                  tell input device to read N frames
              }

              for each bus {
                  for each strip using bus {
                       buf = strip->return_buffer (bus->id);
                       mix buf into bus's output buffer;
                       send to output destination
                  }
              }

              foreach output device {
                  write N frames to output device
              }
       }

in this scheme, the buses "pull" data from the strips. the strips in
turn "pull" data from the sources, which are just front-ends for the
current N frames of data that was read from the input device.

likewise, the buses "push" data into the destinations, which are just
front ends for a staging buffer used by the output devices.

this system allows a strip to be connected to a single input, but any
number of buses, and thus any number of outputs, permitting surround
sound as well as other interesting stuff.

--p


New Message Reply About this list Date view Thread view Subject view Author view Other groups

This archive was generated by hypermail 2b28 : pe maalis 10 2000 - 07:27:13 EST