package com.marverenic.music.player; import android.media.audiofx.Equalizer; import android.os.Parcel; import android.os.Parcelable; public class RemoteEqualizer implements Parcelable { private Band[] mBands; private Preset[] mPresets; private int mMinBandLevel; private int mMaxBandLevel; private int[] mBandLevels; private int mCurPreset; private static Band[] getEqualizerBands(Equalizer equalizer) { Band[] bands = new Band[equalizer.getNumberOfBands()]; for (short i = 0; i < bands.length; i++) { int[] range = equalizer.getBandFreqRange(i); int centerFrequency = equalizer.getCenterFreq(i); int lowFrequency = range[0]; int highFrequency = range[1]; bands[i] = new Band(lowFrequency, highFrequency, centerFrequency); } return bands; } private static Preset[] getEqualizerPresets(Equalizer equalizer) { Preset[] presets = new Preset[equalizer.getNumberOfPresets()]; for (short i = 0; i < presets.length; i++) { presets[i] = new Preset(equalizer.getPresetName(i)); } return presets; } public RemoteEqualizer(Equalizer eq) { this(getEqualizerBands(eq), getEqualizerPresets(eq), eq.getProperties(), eq.getBandLevelRange()); } public RemoteEqualizer(Band[] bands, Preset[] presets, Equalizer.Settings settings, short[] bandLevelRange) { mBands = bands; mPresets = presets; mMinBandLevel = bandLevelRange[0]; mMaxBandLevel = bandLevelRange[1]; setProperties(settings); } protected RemoteEqualizer(Parcel in) { mBands = in.createTypedArray(Band.CREATOR); mPresets = in.createTypedArray(Preset.CREATOR); mBandLevels = in.createIntArray(); mMinBandLevel = in.readInt(); mMaxBandLevel = in.readInt(); mCurPreset = in.readInt(); } public static final Creator<RemoteEqualizer> CREATOR = new Creator<RemoteEqualizer>() { @Override public RemoteEqualizer createFromParcel(Parcel in) { return new RemoteEqualizer(in); } @Override public RemoteEqualizer[] newArray(int size) { return new RemoteEqualizer[size]; } }; public int getNumberOfBands() { return mBands.length; } public int[] getBandLevelRange() { return new int[] {mMinBandLevel, mMaxBandLevel}; } public void setBandLevel(int band, int level) { mBandLevels[band] = level; } public int getBandLevel(int band) { return mBandLevels[band]; } public int getCenterFreq(int band) { return mBands[band].getCenterFrequency(); } public int getCurrentPreset() { return mCurPreset; } public void usePreset(int preset) { mCurPreset = preset; } public int getNumberOfPresets() { return mPresets.length; } public String getPresetName(short preset) { return mPresets[preset].getName(); } private short[] intArrayToShortArray(int[] in) { if (in == null) { return null; } short[] out = new short[in.length]; for (int i = 0; i < in.length; i++) { out[i] = (short) in[i]; } return out; } public Equalizer.Settings getProperties() { Equalizer.Settings settings = new Equalizer.Settings(); settings.bandLevels = intArrayToShortArray(mBandLevels); settings.curPreset = (short) mCurPreset; settings.numBands = (short) getNumberOfBands(); return settings; } private int[] shortArrayToIntArray(short[] in) { if (in == null) { return null; } int[] out = new int[in.length]; for (int i = 0; i < in.length; i++) { out[i] = in[i]; } return out; } public void setProperties(Equalizer.Settings settings) { mBandLevels = shortArrayToIntArray(settings.bandLevels); mCurPreset = settings.curPreset; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeTypedArray(mBands, i); parcel.writeTypedArray(mPresets, i); parcel.writeIntArray(mBandLevels); parcel.writeInt(mMinBandLevel); parcel.writeInt(mMaxBandLevel); parcel.writeInt(mCurPreset); } public static class Preset implements Parcelable { private String mName; public Preset(String name) { mName = name; } protected Preset(Parcel in) { mName = in.readString(); } public static final Creator<Preset> CREATOR = new Creator<Preset>() { @Override public Preset createFromParcel(Parcel in) { return new Preset(in); } @Override public Preset[] newArray(int size) { return new Preset[size]; } }; public String getName() { return mName; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeString(mName); } } public static class Band implements Parcelable { private int mLowFrequency; private int mCenterFrequency; private int mHighFrequency; public Band(int lowFrequency, int centerFrequency, int highFrequency) { mLowFrequency = lowFrequency; mCenterFrequency = centerFrequency; mHighFrequency = highFrequency; } protected Band(Parcel in) { mLowFrequency = in.readInt(); mCenterFrequency = in.readInt(); mHighFrequency = in.readInt(); } public static final Creator<Band> CREATOR = new Creator<Band>() { @Override public Band createFromParcel(Parcel in) { return new Band(in); } @Override public Band[] newArray(int size) { return new Band[size]; } }; public int getLowFrequency() { return mLowFrequency; } public int getCenterFrequency() { return mCenterFrequency; } public int getHighFrequency() { return mHighFrequency; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeInt(mLowFrequency); parcel.writeInt(mCenterFrequency); parcel.writeInt(mHighFrequency); } } }