7

我在这行代码的均衡器上收到UnsupportedOperationException错误。bassBoost.setStrength((short) bassBoostPos);

这是代码

equalizer = new Equalizer(0, 0);
if (equalizer != null) {
equalizer.setEnabled (isEqualizer);
numBands = equalizer.getNumberOfBands();
short r[] = equalizer.getBandLevelRange();
minLevel = r[0];
maxLevel = r[1];
bassBoost = new BassBoost (0, 0);

if(bassBoost != null) {
    bassBoost.setEnabled(bassBoostPos > 0 ? true : false);
    bassBoost.setStrength((short) bassBoostPos); 
}

这是例外

java.lang.UnsupportedOperationException: AudioEffect: invalid parameter    
operation
at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1271)
at android.media.audiofx.BassBoost.setStrength(BassBoost.java:127)

如何解决此问题,以使应用程序不会崩溃。我的意思是如何检查设备是否支持此操作,如果不支持,我将跳过此行。谢谢。

4

2 回答 2

4

在 AudioEffect 中,会发生 3 种类型的错误。

  1. AudioEffect.ERROR_BAD_VALUE
  2. AudioEffect.ERROR_INVALID_OPERATION --> this occurs for your case
  3. 运行时异常

为什么会出现 AudioEffect.ERROR_BAD_VALUE?

由于参数值错误,操作失败。它会导致IllegalArgumentException并给出错误"AudioEffect: bad parameter value"

为什么会出现 AudioEffect.ERROR_INVALID_OPERATION?

操作失败,因为它在错误的状态下被请求。它会导致UnsupportedOperationException并给出错误"AudioEffect: invalid parameter operation"

运行时异常

它发生在运行时。它给出了错误"AudioEffect: set/get parameter error"

错误状态主要发生在什么时候?如何制定解决方案?

Ans:均衡器处理完后,如果不调用该release()方法,就会出现错误状态。所以释放均衡器对象后使其等于null。

如果您使用 api 级别 25,请更改它。此错误主要发生在此级别。所以,如果可能的话,改变它。

有时本机库不允许实例化新的 AudioEffect。因为那里已经存在太多的对象。它也会导致错误的状态。

资源链接:

  1. https://stackoverflow.com/a/10885407/2293534
  2. https://stackoverflow.com/a/40968149/2293534
  3. BassBoost.java类分析
于 2017-04-29T17:45:25.153 回答
0
  1. 在设置强度之前,需要检查它是否支持。为此,需要添加以下条件。

    if(bassBoost.getStrengthSupported()) { bassBoost.setStrength((short) bassBoostPos)); }

  2. 另外需要注意的是,BassBoost 强度的值应该在 0 到 1000 的范围内,表明效果最温和到最强。

于 2017-05-06T04:47:35.917 回答