164 lines
5.2 KiB
Java
164 lines
5.2 KiB
Java
![]() |
/*
|
||
|
* 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;
|
||
|
|
||
|
import android.compat.annotation.UnsupportedAppUsage;
|
||
|
import android.os.Build;
|
||
|
|
||
|
/**
|
||
|
* 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)
|
||
|
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
||
|
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);
|
||
|
}
|
||
|
}
|