page.title=Audio
@jd:body

<!--
    Copyright 2010 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>

<p>
  Android's audio HAL connects the higher level, audio-specific
  framework APIs in <a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a>
  to the underlying audio driver and hardware. 
</p>

<p>
  The following figure and list describe how audio functionality is implemented and the relevant
  source code that is involved in the implementation:
</p>
<p>
  <img src="images/audio_hal.png">
</p>
<dl>
  <dt>
    Application framework
  </dt>
  <dd>
    At the application framework level is the app code, which utilizes the
    <a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a>
    APIs to interact with the audio hardware. Internally, this code calls corresponding JNI glue
    classes to access the native code that interacts with the auido hardware.
  </dd>
  <dt>
    JNI
  </dt>
  <dd>
    The JNI code associated with <a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a> is located in the
    <code>frameworks/base/core/jni/</code> and <code>frameworks/base/media/jni</code> directories.
    This code calls the lower level native code to obtain access to the audio hardware.
  </dd>
  <dt>
    Native framework
  </dt>
  <dd>
    The native framework is defined in <code>frameworks/av/media/libmedia</code> and provides a
    native equivalent to the <a href="http://developer.android.com/reference/android/media/package-summary.html">android.media</a> package. The native framework calls the Binder
    IPC proxies to obtain access to audio-specific services of the media server.
  </dd>
  <dt>
    Binder IPC
  </dt>
  <dd>
    The Binder IPC proxies facilitate communication over process boundaries. They are located in
    the <code>frameworks/av/media/libmedia</code> directory and begin with the letter "I".
  </dd>
  <dt>
    Media Server
  </dt>
  <dd>
    The audio services in the media server, located in
    <code>frameworks/av/services/audioflinger</code>, is the actual code that interacts with your
    HAL implementations.
  </dd>
  <dt>
    HAL
  </dt>
  <dd>
    The hardware abstraction layer defines the standard interface that audio services calls into
    and that you must implement to have your audio hardware function correctly. The audio HAL
    interfaces are located in <code>hardware/libhardware/include/hardware</code>.
  </dd>
  <dt>
    Kernel Driver
  </dt>
  <dd>
    The audio driver interacts with the hardware and your implementation of the HAL. You can choose
    to use ALSA, OSS, or a custom driver of your own at this level. The HAL is driver-agnostic.
    <p>
  <strong>Note:</strong> If you do choose ALSA, we recommend using <code>external/tinyalsa</code>
  for the user portion of the driver because of its compatible licensing (The standard user-mode
  library is GPL licensed).
</p>
  </dd>
</dl>
<h2 id="implementing">
  Implementing the HAL
</h2>
<p>
  The audio HAL is composed of three different interfaces that you must implement:
</p>
<ul>
  <li>
    <code>hardware/libhardware/include/hardware/audio.h</code> - represents the main functions of
    an audio device.
  </li>
  <li>
    <code>hardware/libhardware/include/hardware/audio_policy.h</code> - represents the audio policy
    manager, which handles things like audio routing and volume control policies.
  </li>
  <li>
    <code>hardware/libhardware/include/hardware/audio_effect.h</code> - represents effects that can
    be applied to audio such as downmixing, echo, or noise suppression.
  </li>
</ul>
<p>See the implementation for the Galaxy Nexus at <code>device/samsung/tuna/audio</code> for an example.</p>

<p>In addition to implementing the HAL, you need to create a
  <code>device/&lt;company_name&gt;/&lt;device_name&gt;/audio/audio_policy.conf</code> file
  that declares the audio devices present on your product. For an example, see the file for
  the Galaxy Nexus audio hardware in <code>device/samsung/tuna/audio/audio_policy.conf</code>. 
Also, see
  the <code>system/core/include/system/audio.h</code> and <code>system/core/include/system/audio_policy.h</code>
   header files for a reference of the properties that you can define.
</p>
<h3 id="multichannel">Multi-channel support</h3>
<p>If your hardware and driver supports multi-channel audio via HDMI, you can output the audio stream
  directly to the audio hardware. This bypasses the AudioFlinger mixer so it doesn't get downmixed to two channels. 
  
  <p>
  The audio HAL must expose whether an output stream profile supports multi-channel audio capabilities.
  If the HAL exposes its capabilities, the default policy manager allows multichannel playback over 
  HDMI.</p>
 <p>For more implementation details, see the <code>device/samsung/tuna/audio/audio_hw.c</code> in the Jellybean release.</p>

  <p>
  To specify that your product contains a multichannel audio output, edit the <code>audio_policy.conf</code> file to describe the multichannel
  output for your product. The following is an example from the Galaxy Nexus that shows a "dynamic" channel mask, which means the audio policy manager
  queries the actual channel masks supported by the HDMI sink after connection. You can also specify a static channel mask like <code>AUDIO_CHANNEL_OUT_5POINT1</code>
  </p>
<pre>
audio_hw_modules {
  primary {
    outputs {
        ...
        hdmi {  
          sampling_rates 44100|48000
          channel_masks dynamic
          formats AUDIO_FORMAT_PCM_16_BIT
          devices AUDIO_DEVICE_OUT_AUX_DIGITAL
          flags AUDIO_OUTPUT_FLAG_DIRECT
        }
        ...
    }
    ...
  }
  ...
}
</pre>


  <p>If your product does not support multichannel audio, AudioFlinger's mixer downmixes the content to stereo
    automatically when sent to an audio device that does not support multichannel audio.</p>
</p>

<h3 id="codecs">Media Codecs</h3>

<p>Ensure that the audio codecs that your hardware and drivers support are properly declared for your product. See
  <a href="media.html#expose"> Exposing Codecs to the Framework</a> for information on how to do this.
</p>

<h2 id="configuring">
  Configuring the Shared Library
</h2>
<p>
  You need to package the HAL implementation into a shared library and copy it to the
  appropriate location by creating an <code>Android.mk</code> file:
</p>
<ol>
  <li>Create a <code>device/&lt;company_name&gt;/&lt;device_name&gt;/audio</code> directory
  to contain your library's source files.
  </li>
  <li>Create an <code>Android.mk</code> file to build the shared library. Ensure that the
  Makefile contains the following line:
<pre>
LOCAL_MODULE := audio.primary.&lt;device_name&gt;
</pre>
    <p>
      Notice that your library must be named <code>audio_primary.&lt;device_name&gt;.so</code> so
      that Android can correctly load the library. The "<code>primary</code>" portion of this
      filename indicates that this shared library is for the primary audio hardware located on the
      device. The module names <code>audio.a2dp.&lt;device_name&gt;</code> and
      <code>audio.usb.&lt;device_name&gt;</code> are also available for bluetooth and USB audio
      interfaces. Here is an example of an <code>Android.mk</code> from the Galaxy
      Nexus audio hardware:
    </p>
    <pre>
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := audio.primary.tuna
LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
LOCAL_SRC_FILES := audio_hw.c ril_interface.c
LOCAL_C_INCLUDES += \
        external/tinyalsa/include \
        $(call include-path-for, audio-utils) \
        $(call include-path-for, audio-effects)
LOCAL_SHARED_LIBRARIES := liblog libcutils libtinyalsa libaudioutils libdl
LOCAL_MODULE_TAGS := optional

include $(BUILD_SHARED_LIBRARY)
</pre>
  </li>
  <li>If your product supports low latency audio as specified by the Android CDD, copy the
  corresponding XML feature file into your product. For example, in your product's
   <code>device/&lt;company_name&gt;/&lt;device_name&gt;/device.mk</code> 
  Makefile:
    <pre>
PRODUCT_COPY_FILES := ...

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.android.hardware.audio.low_latency.xml:system/etc/permissions/android.hardware.audio.low_latency.xml \
</pre>
  </li>
 
  <li>Copy the <code>audio_policy.conf</code> file that you created earlier to the <code>system/etc/</code> directory
  in your product's <code>device/&lt;company_name&gt;/&lt;device_name&gt;/device.mk</code> 
  Makefile. For example:
    <pre>
PRODUCT_COPY_FILES += \
        device/samsung/tuna/audio/audio_policy.conf:system/etc/audio_policy.conf
</pre>
  </li>
  <li>Declare the shared modules of your audio HAL that are required by your product in the product's
    <code>device/&lt;company_name&gt;/&lt;device_name&gt;/device.mk</code> Makefile. For example, the
  Galaxy Nexus requires the primary and bluetooth audio HAL modules:
<pre>
PRODUCT_PACKAGES += \
        audio.primary.tuna \
        audio.a2dp.default
</pre>
  </li>
</ol>

<h2 id="preprocessing">Audio preprocessing effects</h2>
<p>
The Android platform supports audio effects on supported devices in the
<a href="http://developer.android.com/reference/android/media/audiofx/package-summary.html">audiofx</a>
package, which is available for developers to access. For example, on the Nexus 10, the following pre-processing effects are supported: </p>
<ul>
  <li><a href="http://developer.android.com/reference/android/media/AcousticEchoCanceller">Acoustic Echo 
  Cancellation</a></li>
  <li><a href="http://developer.android.com/reference/android/media/AutomaticGainControl">Automatic Gain 
  Control</a></li>
  <li><a href="http://developer.android.com/reference/android/media/NoiseSuppressor">Noise 
  Suppression</a></li>
</ul>
</p>


<p>Pre-processing effects are always paired with the use case mode in which the pre-processing is requested. In Android
app development, a use case is referred to as an <code>AudioSource</code>, and app developers
request to use the <code>AudioSource</code> abstraction instead of the actual audio hardware device to use.
The Android Audio Policy Manager maps an <code>AudioSource</code> to the actual hardware with <code>AudioPolicyManagerBase::getDeviceForInputSource(int 
inputSource)</code>. In Android 4.2, the following sources are exposed to developers:
</p>
<ul>
<code><li>android.media.MediaRecorder.AudioSource.CAMCORDER</li></code>
<code><li>android.media.MediaRecorder.AudioSource.VOICE_COMMUNICATION</li></code>
<code><li>android.media.MediaRecorder.AudioSource.VOICE_CALL</li></code>
<code><li>android.media.MediaRecorder.AudioSource.VOICE_DOWNLINK</li></code>
<code><li>android.media.MediaRecorder.AudioSource.VOICE_UPLINK</li></code>
<code><li>android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION</li></code>
<code><li>android.media.MediaRecorder.AudioSource.MIC</li></code>
<code><li>android.media.MediaRecorder.AudioSource.DEFAULT</li></code>
</ul>

<p>The default pre-processing effects that are applied for each <code>AudioSource</code> are
specified in the <code>/system/etc/audio_effects.conf</code> file. To specify
your own default effects for every <code>AudioSource</code>, create a <code>/system/vendor/etc/audio_effects.conf</code> file
and specify any pre-processing effects that you need to turn on. For an example, 
see the implementation for the Nexus 10 in <code>device/samsung/manta/audio_effects.conf</code></p>

<p class="warning"><strong>Warning:</strong> For the <code>VOICE_RECOGNITION</code> use case, do not enable
the noise suppression pre-processing effect. It should not be turned on by default when recording from this audio source,
and you should not enable it in your own audio_effects.conf file. Turning on the effect by default will cause the device to fail
the <a href="http://static.googleusercontent.com/external_content/untrusted_dlcp/source.android.com/en/us/compatibility/4.2/android-4.2-cdd.pdf"> compatibility requirement </a>
regardless of whether is was on by default due to configuration file, or the audio HAL implementation's default behavior.</p>

<p>The following example enables pre-processing for the VoIP <code>AudioSource</code> and Camcorder <code>AudioSource</code>.
By declaring the <code>AudioSource</code> configuration in this manner, the framework will automatically request from the audio HAL the use of those effects</p>

<pre>
pre_processing {
   voice_communication {
       aec {}
       ns {}
   }
   camcorder {
       agc {}
   }
}
</pre>

<h3 id="tuning">Source tuning</h3>
<p>For <code>AudioSource</code> tuning, there are no explicit requirements on audio gain or audio processing
with the exception of voice recognition (<code>VOICE_RECOGNITION</code>).</p>

<p>The following are the requirements for voice recognition:</p>

<ul>
<li>"flat" frequency response (+/- 3dB) from 100Hz to 4kHz</li>
<li>close-talk config: 90dB SPL reads RMS of 2500 (16bit samples)</li>
<li>level tracks linearly from -18dB to +12dB relative to 90dB SPL</li>
<li>THD < 1% (90dB SPL in 100 to 4000Hz range)</li>
<li>8kHz sampling rate (anti-aliasing)</li>
<li>Effects / pre-processing must be disabled by default</li>
</ul>

<p>Examples of tuning different effects for different sources are:</p>

<ul>
  <li>Noise Suppressor
    <ul>
      <li>Tuned for wind noise suppressor for <code>CAMCORDER</code></li>
      <li>Tuned for stationary noise suppressor for <code>VOICE_COMMUNICATION</code></li>
    </ul>
  </li>
  <li>Automatic Gain Control
    <ul>
      <li>Tuned for close-talk for <code>VOICE_COMMUNICATION</code> and main phone mic</li>
      <li>Tuned for far-talk for <code>CAMCORDER</code></li>
    </ul>
  </li>
</ul>

<h3 id="more">More information</h3>
<p>For more information, see:</p>
<ul>
<li>Android documentation for <a href="http://developer.android.com/reference/android/media/audiofx/package-summary.html">audiofx 
package</a>

<li>Android documentation for <a href="http://developer.android.com/reference/android/media/audiofx/NoiseSuppressor.html">Noise Suppression audio effect</a></li>
<li><code>device/samsung/manta/audio_effects.conf</code> file for the Nexus 10</li>
</ul>
