blob: f625850289a1793ebbebab9dfa2092c9ecf20700 [file] [log] [blame]
page.title=Audio Terminology
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>In this document</h2>
<ol id="auto-toc">
</ol>
</div>
</div>
<p>
This document provides a glossary of audio-related terminology, including
a list of widely used, generic terms and a list of terms that are specific
to Android.
</p>
<h2 id="genericTerm">Generic Terms</h2>
<p>
These are audio terms that are widely used, with their conventional meanings.
</p>
<dl>
<dt>bits per sample or bit depth</dt>
<dd>
Number of bits of information per sample.
</dd>
<dt>channel</dt>
<dd>
A single stream of audio information, usually corresponding to one
location of recording or playback.
</dd>
<dt>frame</dt>
<dd>
A set of samples, one per channel, at a point in time.
</dd>
<dt>frames per buffer</dt>
<dd>
The number of frames handed from one module to the next at once;
for example the audio HAL interface uses this concept.
</dd>
<dt>mono</dt>
<dd>
One channel.
</dd>
<dt>sample</dt>
<dd>
A number representing the audio value for a single channel at a point in time.
</dd>
<dt>sample rate or frame rate</dt>
<dd>
Number of frames per second;
note that "frame rate" is thus more accurate,
but "sample rate" is conventionally used to mean "frame rate".
</dd>
<dt>stereo</dt>
<dd>
Two channels.
</dd>
</dl>
<h2 id="androidSpecificTerms">Android-Specific Terms</h2>
<p>
These are terms that are specific to Android audio framework, or that
may have a special meaning within Android beyond their general meaning.
</p>
<dl>
<dt>ALSA</dt>
<dd>
Advanced Linux Sound Architecture. As the name suggests, it is an audio
framework primarily for Linux, but it has influenced other systems.
See Wikipedia article
<a class="external-link" href="http://en.wikipedia.org/wiki/Advanced_Linux_Sound_Architecture" target="_android">ALSA</a>
for the general definition. As used within Android, it refers primarily
to the kernel audio framework and drivers, not to the user-mode API. See
tinyalsa.
</dd>
<dt>AudioFlinger</dt>
<dd>
The sound server implementation for Android. AudioFlinger
runs within the mediaserver process. See Wikipedia article
<a class="external-link" href="http://en.wikipedia.org/wiki/Sound_server" target="_android">Sound server</a>
for the generic definition.
</dd>
<dt>AudioMixer</dt>
<dd>
The module within AudioFlinger responsible for
combining multiple tracks and applying attenuation
(volume) and certain effects. The Wikipedia article
<a class="external-link" href="http://en.wikipedia.org/wiki/Audio_mixing_(recorded_music)" target="_android">Audio mixing (recorded music)</a>
may be useful for understanding the generic
concept. But that article describes a mixer more as a hardware device
or a software application, rather than a software module within a system.
</dd>
<dt>AudioRecord</dt>
<dd>
The primary low-level client API for receiving data from an audio
input device such as microphone. The data is usually in PCM format.
</dd>
<dt>AudioResampler</dt>
<dd>
The module within AudioFlinger responsible for sample-rate conversion. See Wikipedia article
<a class="external-link" href="http://en.wikipedia.org/wiki/Resampling_(audio)" target="_android">Resampling (audio)</a>
for the generic definition.
</dd>
<dt>audio policy</dt>
<dd>
Service responsible for all actions that require a policy decision
to be made first, such as opening a new I/O stream, re-routing after a
change and stream volume management.
</dd>
<dt>AudioTrack</dt>
<dd>
The primary low-level client API for sending data to an audio output
device such as a speaker. The data is usually in PCM format.
</dd>
<dt>client</dt>
<dd>
Usually same as application or app, but sometimes the "client" of
AudioFlinger is actually a thread running within the mediaserver system
process. An example of that is when playing media that is decoded by a
MediaPlayer object.
</dd>
<dt>HAL</dt>
<dd>
Hardware Abstraction Layer. HAL is a generic term in Android. With
respect to audio, it is a layer between AudioFlinger and the kernel
device driver with a C API, which replaces the earlier C++ libaudio.
</dd>
<dt>FastMixer</dt>
<dd>
A thread within AudioFlinger that services lower latency "fast tracks"
and drives the primary output device.
</dd>
<dt>fast track</dt>
<dd>
An AudioTrack client with lower latency but fewer features, on some devices.
</dd>
<dt>MediaPlayer</dt>
<dd>
A higher-level client API than AudioTrack, for playing either encoded
content, or content which includes multi-media audio and video tracks.
</dd>
<dt>mediaserver</dt>
<dd>
An Android system process that contains a number of media-related
services, including AudioFlinger.
</dd>
<dt>NBAIO</dt>
<dd>
An abstraction for "non-blocking" audio input/output ports used within
AudioFlinger. The name can be misleading, as some implementations of
the NBAIO API actually do support blocking. The key implementations of
NBAIO are for pipes of various kinds.
</dd>
<dt>normal mixer</dt>
<dd>
A thread within AudioFlinger that services most full-featured
AudioTrack clients, and either directly drives an output device or feeds
it's sub-mix into FastMixer via a pipe.
</dd>
<dt>OpenSL ES</dt>
<dd>
An audio API standard by The Khronos Group. Android versions since
API level 9 support a native audio API which is based on a subset of
OpenSL ES 1.0.1.
</dd>
<dt>StateQueue</dt>
<dd>
A module within AudioFlinger responsible for synchronizing state
among threads. Whereas NBAIO is used to pass data, StateQueue is used
to pass control information.
</dd>
<dt>tinyalsa</dt>
<dd>
A small user-mode API above ALSA kernel with BSD license, recommended
for use by HAL implementations.
</dd>
<dt>track</dt>
<dd>
An audio stream, controlled by the AudioTrack API.
</dd>
</dl>
</p>