/* * Copyright (C) 2014 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. */ package android.media; /** * The AudioGain describes a gain controller. Gain controllers are exposed by * audio ports when the gain is configurable at this port's input or output. * Gain values are expressed in millibels. * A gain controller has the following attributes: * - mode: defines modes of operation or features * MODE_JOINT: all channel gains are controlled simultaneously * MODE_CHANNELS: each channel gain is controlled individually * MODE_RAMP: ramps can be applied when gain changes * - channel mask: indicates for which channels the gain can be controlled * - min value: minimum gain value in millibel * - max value: maximum gain value in millibel * - default value: gain value after reset in millibel * - step value: granularity of gain control in millibel * - min ramp duration: minimum ramp duration in milliseconds * - max ramp duration: maximum ramp duration in milliseconds * * This object is always created by the framework and read only by applications. * Applications get a list of AudioGainDescriptors from AudioPortDescriptor.gains() and can build a * valid gain configuration from AudioGain.buildConfig() * @hide */ public class AudioGain { /** * Bit of AudioGain.mode() field indicating that * all channel gains are controlled simultaneously */ public static final int MODE_JOINT = 1; /** * Bit of AudioGain.mode() field indicating that * each channel gain is controlled individually */ public static final int MODE_CHANNELS = 2; /** * Bit of AudioGain.mode() field indicating that * ramps can be applied when gain changes. The type of ramp (linear, log etc...) is * implementation specific. */ public static final int MODE_RAMP = 4; private final int mIndex; private final int mMode; private final int mChannelMask; private final int mMinValue; private final int mMaxValue; private final int mDefaultValue; private final int mStepValue; private final int mRampDurationMinMs; private final int mRampDurationMaxMs; // The channel mask passed to the constructor is as specified in AudioFormat // (e.g. AudioFormat.CHANNEL_OUT_STEREO) AudioGain(int index, int mode, int channelMask, int minValue, int maxValue, int defaultValue, int stepValue, int rampDurationMinMs, int rampDurationMaxMs) { mIndex = index; mMode = mode; mChannelMask = channelMask; mMinValue = minValue; mMaxValue = maxValue; mDefaultValue = defaultValue; mStepValue = stepValue; mRampDurationMinMs = rampDurationMinMs; mRampDurationMaxMs = rampDurationMaxMs; } /** * Bit field indicating supported modes of operation */ public int mode() { return mMode; } /** * Indicates for which channels the gain can be controlled * (e.g. AudioFormat.CHANNEL_OUT_STEREO) */ public int channelMask() { return mChannelMask; } /** * Minimum gain value in millibel */ public int minValue() { return mMinValue; } /** * Maximum gain value in millibel */ public int maxValue() { return mMaxValue; } /** * Default gain value in millibel */ public int defaultValue() { return mDefaultValue; } /** * Granularity of gain control in millibel */ public int stepValue() { return mStepValue; } /** * Minimum ramp duration in milliseconds * 0 if MODE_RAMP not set */ public int rampDurationMinMs() { return mRampDurationMinMs; } /** * Maximum ramp duration in milliseconds * 0 if MODE_RAMP not set */ public int rampDurationMaxMs() { return mRampDurationMaxMs; } /** * Build a valid gain configuration for this gain controller for use by * AudioPortDescriptor.setGain() * @param mode: desired mode of operation * @param channelMask: channels of which the gain should be modified. * @param values: gain values for each channels. * @param rampDurationMs: ramp duration if mode MODE_RAMP is set. * ignored if MODE_JOINT. */ public AudioGainConfig buildConfig(int mode, int channelMask, int[] values, int rampDurationMs) { //TODO: check params here return new AudioGainConfig(mIndex, this, mode, channelMask, values, rampDurationMs); } }