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);
}
}
}
|