| 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> |
| |