/ A Real-Time Audio Scheduler for Pentium PCs
A Real-Time Audio Scheduler for Pentium PCs Camille Goudeseune Michael Hamman Univ. of Illinois at Urbana-Champaign Univ. of Illinois at Urbana-Champaign 603 W. Nevada #1 705 W. Nevada #4 Urbana, IL 61801 Urbana, IL 61801 cog @uiuc.edu m-hamman @uiuc.edu Abstract The Audio Rendering Engine And Library (AREAL) offers a set of tools for developing realtime audio applications for Pentium computers running Windows 95/NT. It consists of a real-time scheduler and a framework for developing sound synthesis classes. AREAL lets composers and sound designers develop applications which address research into audio algorithms, their control in real time, and their correlation with non-audio processes. It emphasizes efficiency and low CPU overhead, coexisting well with other graphics and modeling computation possibly sharing its CPU. We briefly describe AREAL's design goals, architecture, and use. 1. Motivation AREAL does software synthesis of audio in C/C++. It is intended more as a programmer's tool than a user's tool. It assumes no special (costly) hardware beyond current desktop computers, distinguishing it from DSP- and other hardware-based synthesizers. It is similar in intent to Aura and Nyquist [Dannenberg 96] but uses a more universal language than Lisp, and instead of striving for portability it runs on a platform with enough users to ensure longevity. Again, Max and its successor Pd [Puckette 97] emphasize connecting pre-existing objects and a graphical programming environment more than working at the C/C++ level. The feature sets of real-time Music-N languages, even those that encourage C programming, still reflect batch-mode use; AREAL has no such backwardscompatible ties. Finally, AREAL is well suited for audio applications where the limited timbral control and limited data bandwidth of MIDI hardware (and more recent software emulators) present difficulties [Moore 88]. Areal is small enough to be easily integrated into existing applications. It can use applications' own interfaces to networks, file I/O, and GUI instead of requiring its own. AREAL's small set of compositional assumptions lends itself to a wide variety of compositional techniques. For data sonification applications, AREAL allows for a "model-based" [Bargar 94] approach to audio in which auditory events are generated in real time as a direct mapping of a dynamically evolving data set or process. 2. Description AREAL is a C-language API wrapped around a C++ library that handles real-time scheduling of audio samples to a standard sound card on a Pentium PC running Windows 95 or NT. AREAL incorporates (1) a real-time scheduler for managing uninterrupted playback of computed audio samples, and (2) an extendible sound synthesis library. AREAL is targeted for composers and sound designers who wish to take a "roll-your-own" approach to computer music. Using AREAL, composers and audio researchers can develop audio software applications for sound synthesis and music composition, by adding synthesis libraries to AREAL and writing application code for implementing control interfaces. Composers and audio researchers desiring modest synthesis methods can build applications using synthesis objects already built into AREAL. These objects are initialized and controlled via the C API, an interface to code in AREAL's dynamically linked library (DLL). For composers who have developed synthesis algorithms which they would like to execute in a real-time application environment, AREAL provides a robust though easy-to-understand framework for folding that synthesis code into AREAL's real-time scheduler. The builtin synthesis algorithms then serve as models for incorporating these other algorithms into AREAL. AREAL uses version 5.0 of Microsoft's Visual C++ compiler, which we chose over others for its good support tools, documentation, and speed of generated code. Even so, AREAL adds little overhead to the actual computation of audio data. Sample computation is done a block at a time ("vectorized", according to [Freed 92]); multi
Top of page Top of page