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