summaryrefslogtreecommitdiffstats
path: root/src/com/cyngn/audiofx/backends/EffectSetWithAndroidEq.java
blob: 81cd53c0286e7b58ea93f5a1a439022cee3599a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package com.cyngn.audiofx.backends;

import android.media.AudioDeviceInfo;
import android.media.audiofx.Equalizer;
import android.util.Log;

import com.cyngn.audiofx.eq.EqUtils;

/**
 * Created by roman on 3/1/16.
 */
public abstract class EffectSetWithAndroidEq extends EffectSet {
    /**
     * Session-specific equalizer
     */
    private Equalizer mEqualizer;

    private short mEqNumPresets = -1;
    private short mEqNumBands = -1;

    public EffectSetWithAndroidEq(int sessionId, AudioDeviceInfo deviceInfo) {
        super(sessionId, deviceInfo);
    }

    @Override
    protected void onCreate() {
        mEqualizer = new Equalizer(100, mSessionId);
        super.onCreate();

    }

    @Override
    public synchronized void release() {
        if (mEqualizer != null) {
            mEqualizer.release();
            mEqualizer = null;
        }
        super.release();
    }

    @Override
    public void setGlobalEnabled(boolean globalEnabled) {
        super.setGlobalEnabled(globalEnabled);

        enableEqualizer(globalEnabled);
    }

    @Override
    public void enableEqualizer(boolean enable) {
        try {
            mEqualizer.setEnabled(enable);
        } catch (Exception e) {
            Log.e(TAG, "enableEqualizer failed! enable=" + enable + " sessionId=" + mSessionId, e);
        }
    }

    @Override
    public void setEqualizerLevelsDecibels(float[] levels) {
        final short[] equalizerLevels = EqUtils.convertDecibelsToMillibelsInShorts(levels);
        for (short i = 0; i < equalizerLevels.length; i++) {
            setBandLevelSafe(i, equalizerLevels[i]);
        }
    }

    @Override
    public short getNumEqualizerBands() {
        if (mEqNumBands < 0) {
            mEqNumBands = mEqualizer.getNumberOfBands();
        }
        return mEqNumBands;
    }

    @Override
    public void setEqualizerBandLevel(short band, float level) {
        setBandLevelSafe(band, (short)level);
    }

    @Override
    public int getEqualizerBandLevel(short band) {
        return mEqualizer.getBandLevel(band);
    }

    @Override
    public String getEqualizerPresetName(short preset) {
        return mEqualizer.getPresetName(preset);
    }

    @Override
    public void useEqualizerPreset(short preset) {
        mEqualizer.usePreset(preset);
    }

    @Override
    public short getNumEqualizerPresets() {
        if (mEqNumPresets < 0) {
            mEqNumPresets = mEqualizer.getNumberOfPresets();
        }
        return mEqNumPresets;
    }

    @Override
    public short[] getEqualizerBandLevelRange() {
        return mEqualizer.getBandLevelRange();
    }

    @Override
    public int getCenterFrequency(short band) {
        return mEqualizer.getCenterFreq(band);
    }

    @Override
    public synchronized void setDevice(AudioDeviceInfo deviceInfo) {
        super.setDevice(deviceInfo);
    }

    private synchronized void setBandLevelSafe(short band, short level) {
        try {
            mEqualizer.setBandLevel(band, level);
        } catch (Exception e) {
            Log.e(TAG, "Unable to set eq band=" + band + " level=" + level, e);
        }
    }
}