Re: [linux-audio-dev] sound API libraries, servers, etc.

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

Subject: Re: [linux-audio-dev] sound API libraries, servers, etc.
From: Paul Davis (pbd_AT_Op.Net)
Date: Fri Apr 20 2001 - 17:18:46 EEST


In message <5.0.2.1.2.20010420074651.00a7d660_AT_pop.peakpeak.com>you write:
>At 08:47 4/20/2001 -0400, Paul Davis wrote:
>
>>this is why i wrote aes. i don't know enough about the internal
>>structure of aRts to know if it could be modified to support the kind
>>of functionality supported by aes.
>
>Could you provide a url for aes? I'd like to check it out. What's it all about
>?

there is no URL. currently, the source for 99% of the program is in
Quasimodo CVS, accessible via the download page at
http://quasimodo.org/. its the quasimodo/libs/audioengine module.

the program itself currently consists of a couple of source files that
are part of the ardour source tree, available via
http://ardour.sourceforge.net/. ardour itself is now really just
"aes"; when you start ardour, you're actually starting aes, and
telling it to load the gtk-ardour plugin.

aes is a low-latency, in-process "server" for audio applications. it
dynamically loads "plugins" (really more like an entire application),
and uses two callbacks (process() and set_block_size()) to drive the
"plugins" from the interrupt of the audio engine. the basic i/o model
is per-channel reads/writes. when process() is called, each "plugin"
should read and/or write that many frames of data. typically, the
thread that handles audio i/o runs with POSIX real-time scheduling.

aes provides 32 internal busses so that aes "plugins" can share audio
data with each other. the "plugins" don't have to concern themselves
with audio h/w at all; they use

        engine.add_channel_writer();
        engine.add_channel_reader();
        engine.write_to_channel();
        engine.read_from_channel();

and a couple of other functions to do their work. channels include
both physical i/o's on the audio h/w and the internal busses. they
differ only in the numeric ID used to refer to them.

the current implementation uses a GTK-based GUI, and hence the
"plugins" must also be using GTK as well. however, the part that uses
GTK is totally indepedent from the Audio Engine itself, which has no
GUI code at all. You can create a new AudioEngine server with the
following lines of C++:

    ALSA::MultiChannelDevice *mcd;
    AudioEngine *engine;
    AudioEngineServer *server;

    mcd = new ALSA::MultiChannelDevice
                ("alsa-pcm-name", frame_rate,
                  frames_per_interrupt,
                  run_real_time,
                  real_time_priority);

    engine = new AudioEngine (mcd);

    server = new AudioEngineServer (*engine);

thats it.

--p


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

This archive was generated by hypermail 2b28 : Fri Apr 20 2001 - 17:40:24 EEST