Copyright (c) 2008,2010 by David Sugar and Tycho Softworks. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved. The current release of GNU ccAudio2 is used in conjunction with the GNU uCommon C++ library. 1.x versions of GNU ccAudio2 were completely stand-alone. Starting with release 1.0.0, GNU ccAudio2 is now licensed using the GNU Lesser General Public License 3.0 or later. Starting with 0.5.1, GNU ccAudio2 dependended on GNU Common C++ for common configuration. This allowed us to use GNU Common C++ macros for exporting win32 dll headers, and enables the use of GNU Common C++ services such as DSO loading and threads in GNU ccAudio. This is continued in GNU ccAudio2 2.0, which uses the newer GNU uCommon C++ library base. The GNU ccAudio library is a portable C++ class framework that I believe to be useful for developing applications that must process audio. This library provides a class framework for accessing audio segments from various audio file formats (.au, .wav, etc) and for creation of audio frame buffers that are then passed to audio devices and/or DSP processing systems such as telephony cards. This library was started out because I could not find any suitable free C++ based "sound file access" library. There are several very good C based GPL sound file access libraries, and in particular libsndfile and audiofile come to mind. There are also several good free C++ "audio frameworks", but all were concerned with driving a soundcard device or specific set of devices rather than offering usable stand-alone general purpose audio manipulation services. Rather than having the overhead of a "C++ wrapper" around an existing C based library, I choose to create a new one from scratch. This framework initially will provide a portable means to access sound files stored in various formats, and may well extend to supporting playback and recording through default audio devices such as "OSS" soundcard drivers and win32 sound api's in the future. While I am also the maintainer for GNU Common C++, ccaudio does not depend in any manner on GNU Common C++ and can be used fully stand-alone as well as with other class frameworks, including GNU Common C++. However, ccaudio does follow certain GNU Common C++ naming conventions, including the use of -lccaudio for the library name and the placement of a header file in "include/cc++". One important consideration to keep in mind when using this library is that most operations are performed on objects that are considered an array of "samples" that may be aligned in descreat groupings depending on the codec involved. Most ccaudio operations treat audio as essentially an array of "sample" sized objects rather than providing byte aligned operations. This sometimes leads to confusion in other byte oriented operation libraries, such as when manipulating things that are chunked in peculiar size arrangements. For example, ccaudio conceptually treats GSM encoded audio as 33 byte long collections of "160" samples. This has important implications and alignment of audio file positioning functions such as setPosition and getPosition, as well as what it means to "read" or "write" x samples through the getSamples and putSamples member functions of AudioFile. Another unique aspect of this library is that it deals with and supports frame aligned operations. This is based on the assumption that most "low level" sound resources and audio manipulations also will perform operations on discreat and aligned frames rather than samples of arbitrary size. A good example of this kind of audio processing is found in Linux "/dev/phone" based devices such as the Quicknet card which aligns all physical I/O operations into samples that represent 30ms frames. This means that ccaudio supports concepts for "joining" or concatinating multiple audio file sources when building a frame and the end of file has been reached early, and for automatically filling incomplete frames with "silent" data as needed to pad for something that is to be submitted to a frame oriented audio device or DSP processor. The GNU ccAudio library is designed to compile either on win32 (using either mingw32 or Visual C++) or most "Posix" systems including the GNU operating system itself, GNU/Linux systems, FreeBSD, etc, and it does so in a fairly simple manner. This framework is free software and is subject to the terms of the GNU Public License with explicit exceptions as noted in the source similar to the exclusions offered by Guile.