Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46a92d90 authored by rago's avatar rago Committed by Ricardo Garcia
Browse files

Dynamics Processing Effect

Adding Dynamics Processing Effect api and configuration helpers.

Bug: 64161702
Bug: 38266419

Test: manual testing and CTS test ag/3662965
Change-Id: I993e1621011a16596aa00ea049fa8681463e8551
parent 17df7fe1
Loading
Loading
Loading
Loading
+196 −0
Original line number Diff line number Diff line
@@ -25064,6 +25064,7 @@ package android.media.audiofx {
    field public static final java.util.UUID EFFECT_TYPE_AEC;
    field public static final java.util.UUID EFFECT_TYPE_AGC;
    field public static final java.util.UUID EFFECT_TYPE_BASS_BOOST;
    field public static final java.util.UUID EFFECT_TYPE_DYNAMICS_PROCESSING;
    field public static final java.util.UUID EFFECT_TYPE_ENV_REVERB;
    field public static final java.util.UUID EFFECT_TYPE_EQUALIZER;
    field public static final java.util.UUID EFFECT_TYPE_LOUDNESS_ENHANCER;
@@ -25127,6 +25128,201 @@ package android.media.audiofx {
    field public short strength;
  }
  public final class DynamicsProcessing extends android.media.audiofx.AudioEffect {
    ctor public DynamicsProcessing(int);
    ctor public DynamicsProcessing(int, int, android.media.audiofx.DynamicsProcessing.Config);
    method public android.media.audiofx.DynamicsProcessing.Channel getChannelByChannelIndex(int);
    method public int getChannelCount();
    method public android.media.audiofx.DynamicsProcessing.Config getConfig();
    method public float getInputGainByChannelIndex(int);
    method public android.media.audiofx.DynamicsProcessing.Limiter getLimiterByChannelIndex(int);
    method public android.media.audiofx.DynamicsProcessing.MbcBand getMbcBandByChannelIndex(int, int);
    method public android.media.audiofx.DynamicsProcessing.Mbc getMbcByChannelIndex(int);
    method public android.media.audiofx.DynamicsProcessing.EqBand getPostEqBandByChannelIndex(int, int);
    method public android.media.audiofx.DynamicsProcessing.Eq getPostEqByChannelIndex(int);
    method public android.media.audiofx.DynamicsProcessing.EqBand getPreEqBandByChannelIndex(int, int);
    method public android.media.audiofx.DynamicsProcessing.Eq getPreEqByChannelIndex(int);
    method public void setAllChannelsTo(android.media.audiofx.DynamicsProcessing.Channel);
    method public void setChannelTo(int, android.media.audiofx.DynamicsProcessing.Channel);
    method public void setInputGainAllChannelsTo(float);
    method public void setInputGainbyChannel(int, float);
    method public void setLimiterAllChannelsTo(android.media.audiofx.DynamicsProcessing.Limiter);
    method public void setLimiterByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Limiter);
    method public void setMbcAllChannelsTo(android.media.audiofx.DynamicsProcessing.Mbc);
    method public void setMbcBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.MbcBand);
    method public void setMbcBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.MbcBand);
    method public void setMbcByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Mbc);
    method public void setPostEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
    method public void setPostEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
    method public void setPostEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
    method public void setPostEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
    method public void setPreEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
    method public void setPreEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
    method public void setPreEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
    method public void setPreEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
    field public static final int VARIANT_FAVOR_FREQUENCY_RESOLUTION = 0; // 0x0
    field public static final int VARIANT_FAVOR_TIME_RESOLUTION = 1; // 0x1
  }
  public static class DynamicsProcessing.BandBase {
    ctor public DynamicsProcessing.BandBase(boolean, float);
    method public float getCutoffFrequency();
    method public boolean isEnabled();
    method public void setCutoffFrequency(float);
    method public void setEnabled(boolean);
  }
  public static class DynamicsProcessing.BandStage extends android.media.audiofx.DynamicsProcessing.Stage {
    ctor public DynamicsProcessing.BandStage(boolean, boolean, int);
    method public int getBandCount();
  }
  public static final class DynamicsProcessing.Channel {
    ctor public DynamicsProcessing.Channel(float, boolean, int, boolean, int, boolean, int, boolean);
    ctor public DynamicsProcessing.Channel(android.media.audiofx.DynamicsProcessing.Channel);
    method public float getInputGain();
    method public android.media.audiofx.DynamicsProcessing.Limiter getLimiter();
    method public android.media.audiofx.DynamicsProcessing.Mbc getMbc();
    method public android.media.audiofx.DynamicsProcessing.MbcBand getMbcBand(int);
    method public android.media.audiofx.DynamicsProcessing.Eq getPostEq();
    method public android.media.audiofx.DynamicsProcessing.EqBand getPostEqBand(int);
    method public android.media.audiofx.DynamicsProcessing.Eq getPreEq();
    method public android.media.audiofx.DynamicsProcessing.EqBand getPreEqBand(int);
    method public void setInputGain(float);
    method public void setLimiter(android.media.audiofx.DynamicsProcessing.Limiter);
    method public void setMbc(android.media.audiofx.DynamicsProcessing.Mbc);
    method public void setMbcBand(int, android.media.audiofx.DynamicsProcessing.MbcBand);
    method public void setPostEq(android.media.audiofx.DynamicsProcessing.Eq);
    method public void setPostEqBand(int, android.media.audiofx.DynamicsProcessing.EqBand);
    method public void setPreEq(android.media.audiofx.DynamicsProcessing.Eq);
    method public void setPreEqBand(int, android.media.audiofx.DynamicsProcessing.EqBand);
  }
  public static final class DynamicsProcessing.Config {
    method public android.media.audiofx.DynamicsProcessing.Channel getChannelByChannelIndex(int);
    method public float getInputGainByChannelIndex(int);
    method public android.media.audiofx.DynamicsProcessing.Limiter getLimiterByChannelIndex(int);
    method public android.media.audiofx.DynamicsProcessing.MbcBand getMbcBandByChannelIndex(int, int);
    method public int getMbcBandCount();
    method public android.media.audiofx.DynamicsProcessing.Mbc getMbcByChannelIndex(int);
    method public android.media.audiofx.DynamicsProcessing.EqBand getPostEqBandByChannelIndex(int, int);
    method public int getPostEqBandCount();
    method public android.media.audiofx.DynamicsProcessing.Eq getPostEqByChannelIndex(int);
    method public android.media.audiofx.DynamicsProcessing.EqBand getPreEqBandByChannelIndex(int, int);
    method public int getPreEqBandCount();
    method public android.media.audiofx.DynamicsProcessing.Eq getPreEqByChannelIndex(int);
    method public float getPreferredFrameDuration();
    method public int getVariant();
    method public boolean isLimiterInUse();
    method public boolean isMbcInUse();
    method public boolean isPostEqInUse();
    method public boolean isPreEqInUse();
    method public void setAllChannelsTo(android.media.audiofx.DynamicsProcessing.Channel);
    method public void setChannelTo(int, android.media.audiofx.DynamicsProcessing.Channel);
    method public void setInputGainAllChannelsTo(float);
    method public void setInputGainByChannelIndex(int, float);
    method public void setLimiterAllChannelsTo(android.media.audiofx.DynamicsProcessing.Limiter);
    method public void setLimiterByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Limiter);
    method public void setMbcAllChannelsTo(android.media.audiofx.DynamicsProcessing.Mbc);
    method public void setMbcBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.MbcBand);
    method public void setMbcBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.MbcBand);
    method public void setMbcByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Mbc);
    method public void setPostEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
    method public void setPostEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
    method public void setPostEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
    method public void setPostEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
    method public void setPreEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
    method public void setPreEqBandAllChannelsTo(int, android.media.audiofx.DynamicsProcessing.EqBand);
    method public void setPreEqBandByChannelIndex(int, int, android.media.audiofx.DynamicsProcessing.EqBand);
    method public void setPreEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
  }
  public static final class DynamicsProcessing.Config.Builder {
    ctor public DynamicsProcessing.Config.Builder(int, int, boolean, int, boolean, int, boolean, int, boolean);
    method public android.media.audiofx.DynamicsProcessing.Config build();
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setAllChannelsTo(android.media.audiofx.DynamicsProcessing.Channel);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setChannelTo(int, android.media.audiofx.DynamicsProcessing.Channel);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setInputGainAllChannelsTo(float);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setInputGainByChannelIndex(int, float);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setLimiterAllChannelsTo(android.media.audiofx.DynamicsProcessing.Limiter);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setLimiterByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Limiter);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setMbcAllChannelsTo(android.media.audiofx.DynamicsProcessing.Mbc);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setMbcByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Mbc);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPostEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPostEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPreEqAllChannelsTo(android.media.audiofx.DynamicsProcessing.Eq);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPreEqByChannelIndex(int, android.media.audiofx.DynamicsProcessing.Eq);
    method public android.media.audiofx.DynamicsProcessing.Config.Builder setPreferredFrameDuration(float);
  }
  public static final class DynamicsProcessing.Eq extends android.media.audiofx.DynamicsProcessing.BandStage {
    ctor public DynamicsProcessing.Eq(boolean, boolean, int);
    ctor public DynamicsProcessing.Eq(android.media.audiofx.DynamicsProcessing.Eq);
    method public android.media.audiofx.DynamicsProcessing.EqBand getBand(int);
    method public void setBand(int, android.media.audiofx.DynamicsProcessing.EqBand);
  }
  public static final class DynamicsProcessing.EqBand extends android.media.audiofx.DynamicsProcessing.BandBase {
    ctor public DynamicsProcessing.EqBand(boolean, float, float);
    ctor public DynamicsProcessing.EqBand(android.media.audiofx.DynamicsProcessing.EqBand);
    method public float getGain();
    method public void setGain(float);
  }
  public static final class DynamicsProcessing.Limiter extends android.media.audiofx.DynamicsProcessing.Stage {
    ctor public DynamicsProcessing.Limiter(boolean, boolean, int, float, float, float, float, float);
    ctor public DynamicsProcessing.Limiter(android.media.audiofx.DynamicsProcessing.Limiter);
    method public float getAttackTime();
    method public int getLinkGroup();
    method public float getPostGain();
    method public float getRatio();
    method public float getReleaseTime();
    method public float getThreshold();
    method public void setAttackTime(float);
    method public void setLinkGroup(int);
    method public void setPostGain(float);
    method public void setRatio(float);
    method public void setReleaseTime(float);
    method public void setThreshold(float);
  }
  public static final class DynamicsProcessing.Mbc extends android.media.audiofx.DynamicsProcessing.BandStage {
    ctor public DynamicsProcessing.Mbc(boolean, boolean, int);
    ctor public DynamicsProcessing.Mbc(android.media.audiofx.DynamicsProcessing.Mbc);
    method public android.media.audiofx.DynamicsProcessing.MbcBand getBand(int);
    method public void setBand(int, android.media.audiofx.DynamicsProcessing.MbcBand);
  }
  public static final class DynamicsProcessing.MbcBand extends android.media.audiofx.DynamicsProcessing.BandBase {
    ctor public DynamicsProcessing.MbcBand(boolean, float, float, float, float, float, float, float, float, float, float);
    ctor public DynamicsProcessing.MbcBand(android.media.audiofx.DynamicsProcessing.MbcBand);
    method public float getAttackTime();
    method public float getExpanderRatio();
    method public float getKneeWidth();
    method public float getNoiseGateThreshold();
    method public float getPostGain();
    method public float getPreGain();
    method public float getRatio();
    method public float getReleaseTime();
    method public float getThreshold();
    method public void setAttackTime(float);
    method public void setExpanderRatio(float);
    method public void setKneeWidth(float);
    method public void setNoiseGateThreshold(float);
    method public void setPostGain(float);
    method public void setPreGain(float);
    method public void setRatio(float);
    method public void setReleaseTime(float);
    method public void setThreshold(float);
  }
  public static class DynamicsProcessing.Stage {
    ctor public DynamicsProcessing.Stage(boolean, boolean);
    method public boolean isEnabled();
    method public boolean isInUse();
    method public void setEnabled(boolean);
  }
  public class EnvironmentalReverb extends android.media.audiofx.AudioEffect {
    ctor public EnvironmentalReverb(int, int) throws java.lang.IllegalArgumentException, java.lang.RuntimeException, java.lang.UnsupportedOperationException;
    method public short getDecayHFRatio() throws java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.UnsupportedOperationException;
+41 −3
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import java.util.UUID;
 *   <li> {@link android.media.audiofx.BassBoost}</li>
 *   <li> {@link android.media.audiofx.PresetReverb}</li>
 *   <li> {@link android.media.audiofx.EnvironmentalReverb}</li>
 *   <li> {@link android.media.audiofx.DynamicsProcessing}</li>
 * </ul>
 * <p>To apply the audio effect to a specific AudioTrack or MediaPlayer instance,
 * the application must specify the audio session ID of that instance when creating the AudioEffect.
@@ -125,6 +126,12 @@ public class AudioEffect {
    public static final UUID EFFECT_TYPE_LOUDNESS_ENHANCER = UUID
              .fromString("fe3199be-aed0-413f-87bb-11260eb63cf1");

    /**
     * UUID for Dynamics Processing
     */
    public static final UUID EFFECT_TYPE_DYNAMICS_PROCESSING = UUID
              .fromString("7261676f-6d75-7369-6364-28e2fd3ac39e");

    /**
     * Null effect UUID. Used when the UUID for effect type of
     * @hide
@@ -203,7 +210,8 @@ public class AudioEffect {
     * {@link AudioEffect#EFFECT_TYPE_AEC}, {@link AudioEffect#EFFECT_TYPE_AGC},
     * {@link AudioEffect#EFFECT_TYPE_BASS_BOOST}, {@link AudioEffect#EFFECT_TYPE_ENV_REVERB},
     * {@link AudioEffect#EFFECT_TYPE_EQUALIZER}, {@link AudioEffect#EFFECT_TYPE_NS},
     * {@link AudioEffect#EFFECT_TYPE_PRESET_REVERB}, {@link AudioEffect#EFFECT_TYPE_VIRTUALIZER}.
     * {@link AudioEffect#EFFECT_TYPE_PRESET_REVERB}, {@link AudioEffect#EFFECT_TYPE_VIRTUALIZER},
     * {@link AudioEffect#EFFECT_TYPE_DYNAMICS_PROCESSING}.
     *  </li>
     *  <li>uuid: UUID for this particular implementation</li>
     *  <li>connectMode: {@link #EFFECT_INSERT} or {@link #EFFECT_AUXILIARY}</li>
@@ -224,7 +232,8 @@ public class AudioEffect {
         * {@link AudioEffect#EFFECT_TYPE_BASS_BOOST}, {@link AudioEffect#EFFECT_TYPE_ENV_REVERB},
         * {@link AudioEffect#EFFECT_TYPE_EQUALIZER}, {@link AudioEffect#EFFECT_TYPE_NS},
         * {@link AudioEffect#EFFECT_TYPE_PRESET_REVERB},
         * {@link AudioEffect#EFFECT_TYPE_VIRTUALIZER}.
         * {@link AudioEffect#EFFECT_TYPE_VIRTUALIZER},
         * {@link AudioEffect#EFFECT_TYPE_DYNAMICS_PROCESSING}.
         * @param uuid         UUID for this particular implementation
         * @param connectMode  {@link #EFFECT_INSERT} or {@link #EFFECT_AUXILIARY}
         * @param name         human readable effect name
@@ -246,7 +255,8 @@ public class AudioEffect {
         *  {@link AudioEffect#EFFECT_TYPE_AGC}, {@link AudioEffect#EFFECT_TYPE_BASS_BOOST},
         *  {@link AudioEffect#EFFECT_TYPE_ENV_REVERB}, {@link AudioEffect#EFFECT_TYPE_EQUALIZER},
         *  {@link AudioEffect#EFFECT_TYPE_NS}, {@link AudioEffect#EFFECT_TYPE_PRESET_REVERB}
         *   or {@link AudioEffect#EFFECT_TYPE_VIRTUALIZER}.<br>
         *  {@link AudioEffect#EFFECT_TYPE_VIRTUALIZER}
         *   or {@link AudioEffect#EFFECT_TYPE_DYNAMICS_PROCESSING}.<br>
         *  For reverberation, bass boost, EQ and virtualizer, the UUID
         *  corresponds to the OpenSL ES Interface ID.
         */
@@ -1341,6 +1351,34 @@ public class AudioEffect {
        return converter.array();
    }

    /**
     * @hide
     */
    public static float byteArrayToFloat(byte[] valueBuf) {
        return byteArrayToFloat(valueBuf, 0);

    }

    /**
     * @hide
     */
    public static float byteArrayToFloat(byte[] valueBuf, int offset) {
        ByteBuffer converter = ByteBuffer.wrap(valueBuf);
        converter.order(ByteOrder.nativeOrder());
        return converter.getFloat(offset);

    }

    /**
     * @hide
     */
    public static byte[] floatToByteArray(float value) {
        ByteBuffer converter = ByteBuffer.allocate(4);
        converter.order(ByteOrder.nativeOrder());
        converter.putFloat(value);
        return converter.array();
    }

    /**
     * @hide
     */
+2257 −0

File added.

Preview size limit exceeded, changes collapsed.