Graphical Audio Programming Environment (GAPE) is a set of C++ classes designed to provide a flexible and useful environment to create programs that perform audio signal processing in software. It provides built-in functionality for realtime sound I/O, PCM wavefile reading and writing, time and frequency domain displays, simple function generation, and other basic tasks, freeing developers for more interesting work. It also provides an easy way to create GUI's for such programs, by using a powerful and easy to learn GUI designer, or coding them by hand to a clear and simple template. GAPE currently runs under Linux and Windows 9x/Millenium/2000. It's open source code. Whenever I get around to reading the various licenses, I'll post which license it uses.
GAPE is NOT an audio editing tool or fancy sound program, although there are useful and interesting example programs included.
GAPE has been designed with the aim of simplifying the user's task whenever possible, without losing any of the power and flexibility afforded by C++ and the Qt library. Hopefully, musicians, students and others who want to create audio applications but don't want to learn GUI programming or perfect their C++ skills will find this library a great help. The built in graphical elements, filters, control structures and tutorials/documentation should make their task as painless and successful as possible. Likewise, programmers who aren't afraid of issues like multithreading, complex OOP design, and efficiency will be spared mundane but significant tasks like dealing with native audio API's (ie DirectSound, ALSA, OSS) and GUI event handling but still not be constrained by GAPE's design.
Click here to see a screenshot of an app made with GAPE...
GAPE is built using two other libraries, Qt and STK. Qt is a very solid C++ GUI library that has alot of other functionality as well. STK is a C++ audio library which provides cross platform sound I/O, midi support, some basic sound synthesis, and more. Both were chosen because of their flexibility, reliability and cross platform support. GAPE also uses QWT, which is an independant Qt library with scientific graphing capability. For things like frequency displays, GAPE uses MIT's FFTW library . (Wow that's alot of acronyms! MIT = Massachusetts Institute of Technology, FFTW = Fastest Fourier Transform in the West.)
Where do I start?
Try the "Getting Started" page. Useful classes to look at are GapeUnit and GapeController. You can email me.
Who wrote this stuff?
Feel free to contact me, Dave Chisholm, with any questions, problems, etc. I'm developing GAPE as part of my work at Stanford's Center for Computer Research in Music and Acoustics (CCRMA). Others who have contributed are Randal Leistikow and Scott Wilson, also CCRMA students. If you would like to use (or help develop) GAPE, please let me know.