This document provides an overview of the Audio Component Framework (ACF) API.
In the Advanced Audio Adaptation Framework (A3F) architecture, the client defines the required audio functionality by grouping several audio processing units together. Audio processing units are logical entities, not directly related to any specific audio hardware, that represent basic audio functions. Examples of audio processing units include:
Source - a source of multimedia data.
CODEC - an encoder or decoder of multimedia data.
Sink - a consumer of multimedia data.
ACF provides a collective notion for the audio processing units being grouped together so that they can be considered as a single entity. Audio processing units are grouped into audio streams. An audio stream consists of at least a source, a codec and a sink. The audio stream allows control of the audio processing units connected to the stream, for example, starting or pausing, and also provides information about the state of the audio processing units connected to it, for example, uninitialized or active.
Furthermore, one or more audio streams can be grouped into a logical unit called a context. The following diagram shows a context which contains two audio streams:
Using a context means that, for the purposes of pre-emption, all audio streams in the context can be controlled as a single unit. For example, if an audio stream needs to be stopped because it uses a resource that is required by another higher priority audio stream, then all the other audio streams in the context can be stopped at the same time.
The DLL that provides the functionality and the library to which your code must link is identified below.
This API is part of the Advanced Audio Adaptation Framework (A3F). A3F provides a new standardised implementation of DevSound which is configured by default from Symbian OS v9.5 onwards. A3F interacts with a specially customised DevSound (configured as optional) through the Audio Component Library (ACL) API and the ACF API.
ACF is responsible for delivering transactional behaviour. This means ensuring that when a change is applied to one audio processing unit in a context, the same change is applied to all the audio processing units in the context and if any fail then no change is made.
In order to apply changes to the audio processing units in a context, the client must call the asynchronous Commit() method. On success, event callbacks are sent to the client to state that the Commit() was properly received and processed. If the Commit() fails, then the implementation is "rolled-back". Alternatively, the client may receive an event callback stating that audio resources were lost due to pre-emption by a higher priority audio client.
ACF comprises the following key classes:
MAudioSource - generic interface for different types of audio sources.
MAudioCodec - the generic abstract interface for codecs.
MAudioSink - generic interface for different types of audio sinks.
MAudioStream - the main control interface for the state of an audio stream.
MAudioContext - the interface to an audio context. The client can use MAudioContext to manage the audio streams and audio processing units contained in a context.
ACF can be used to:
Apply changes made to the audio processing units in a context.
Pending changes are applied using the asynchronous Commit() call. When a Commit() has been completed, the client is informed by the appropriate ContextEvent() callback of MAudioContextObserver.