| page.title=Sample Rate Conversion | 
 | @jd:body | 
 |  | 
 | <!-- | 
 |     Copyright 2013 The Android Open Source Project | 
 |  | 
 |     Licensed under the Apache License, Version 2.0 (the "License"); | 
 |     you may not use this file except in compliance with the License. | 
 |     You may obtain a copy of the License at | 
 |  | 
 |         http://www.apache.org/licenses/LICENSE-2.0 | 
 |  | 
 |     Unless required by applicable law or agreed to in writing, software | 
 |     distributed under the License is distributed on an "AS IS" BASIS, | 
 |     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |     See the License for the specific language governing permissions and | 
 |     limitations under the License. | 
 | --> | 
 | <div id="qv-wrapper"> | 
 |   <div id="qv"> | 
 |     <h2>In this document</h2> | 
 |     <ol id="auto-toc"> | 
 |     </ol> | 
 |   </div> | 
 | </div> | 
 |  | 
 | <h2 id="srcIntro">Introduction</h2> | 
 |  | 
 | <p> | 
 | See the Wikipedia article | 
 | <a href="http://en.wikipedia.org/wiki/Resampling_(audio)">Resampling (audio)</a> | 
 | for a generic definition of sample rate conversion, also known as "resampling." | 
 | The remainder of this article describes resampling within Android. | 
 | See <a href="terminology.html#srcTerms">Sample Rate Conversion</a> for related terminology. | 
 | </p> | 
 |  | 
 | <p> | 
 | Sample rate conversion is the process of changing a | 
 | stream of discrete samples at one sample rate to another stream at | 
 | another sample rate.  A sample rate converter, or resampler, is a module | 
 | that implements sample rate conversion.  With respect to the resampler, | 
 | the original stream is called the source signal, and the resampled stream is | 
 | the sink signal. | 
 | </p> | 
 |  | 
 | <p> | 
 | Resamplers are used in several places in Android. | 
 | For example, an MP3 file may be encoded at 44.1 kHz sample rate and | 
 | needs to be played back on an Android device supporting 48 kHz audio | 
 | internally. In that case, a resampler would be used to upsample the MP3 | 
 | output audio from 44.1 kHz source sample rate to a 48 kHz sink sample rate | 
 | used within the Android device. | 
 | </p> | 
 |  | 
 | <p> | 
 | The characteristics of a resampler can be expressed using metrics, including: | 
 | </p> | 
 |  | 
 | <ul> | 
 | <li>degree of preservation of the overall amplitude of the signal</li> | 
 | <li>degree of preservation of the frequency bandwidth of the signal, | 
 |     subject to limitations of the sink sample rate</li> | 
 | <li>overall latency through the resampler</li> | 
 | <li>consistent phase and group delay with respect to frequency</li> | 
 | <li>computational complexity, expressed in CPU cycles or power draw</li> | 
 | <li>permitted ratios of source and sink sample rates</li> | 
 | <li>ability to dynamically change sample rate ratios</li> | 
 | <li>which digital audio sample formats are supported</li> | 
 | </ul> | 
 |  | 
 | <p> | 
 | The ideal resampler would exactly preserve the source signal's amplitude | 
 | and frequency bandwidth (subject to limitations of the sink | 
 | sample rate), have minimal and consistent delay, have minimal | 
 | computational complexity, permit arbitrary and dynamic conversion ratios, | 
 | and support all common digital audio sample formats. | 
 | In practice, ideal resamplers do not exist, and actual resamplers are | 
 | a compromise among these characteristics. | 
 | For example, the goals of ideal quality conflict with short delay and low complexity. | 
 | </p> | 
 |  | 
 | <p> | 
 | Android includes a variety of audio resamplers, so that appropriate | 
 | compromises can be made depending on the application use case and load. | 
 | Section <a href="#srcResamplers">Resampler implementations</a> | 
 | below lists the available resamplers, summarizes their characteristics, | 
 | and identifies where they should typically be used. | 
 | </p> | 
 |  | 
 | <h2 id="srcResamplers">Resampler implementations</h2> | 
 |  | 
 | <p> | 
 | Available resampler implementations change frequently, | 
 | and may be customized by OEMs. | 
 | As of Android 4.4, the default resamplers | 
 | in descending order of signal distortion, and ascending order of | 
 | computational complexity include: | 
 | </p> | 
 |  | 
 | <ul> | 
 | <li>linear</li> | 
 | <li>cubic</li> | 
 | <li>sinc with original coefficients</li> | 
 | <li>sinc with revised coefficients</li> | 
 | </ul> | 
 |  | 
 | <p> | 
 | In general, the sinc resamplers are more appropriate for higher-quality | 
 | music playback, and the other resamplers should be reserved for cases | 
 | where quality is less important (an example might be "key clicks" or similar). | 
 | </p> | 
 |  | 
 | <p> | 
 | The specific resampler implementation selected depends on | 
 | the use case, load, and the value of system property | 
 | <code>af.resampler.quality</code>.  For details, | 
 | consult the audio resampler source code in AudioFlinger. | 
 | </p> |