好吧,我终于开始工作了。我重新阅读了文档,使用了代码,突然一切正常。这些是我的发现,以防将来对任何人有帮助。
对于PresetReverb
在预置混响文档中
PresetReverb是输出混合辅助效果, 应在音频会话0上创建 。
为了将MediaPlayer或AudioTrack馈入此效果,必须将它们明确地附加到该效果上,并且必须指定发送级别
。将其附加到MediaPlayer或AudioTrack时,请使用getId()方法返回的效果ID来指定此特定效果。
说的是
PresetReverb pReverb = new PresetReverb(0,player.getAudioSessionId()); <== error
不被允许。您只能使用全局音频会话0来构造PresetReverb。
PresetReverb pReverb = new PresetReverb(1,0); <== correct
现在,我们可以使用MediaPlayer或AudioTrack将其附加到
player.attachAuxEffect(pReverb.getId());player.setAuxEffectSendLevel(1.0f);
我完整的PresetReverb代码是
PresetReverb pReverb = new PresetReverb(1,0);player.attachAuxEffect(pReverb.getId());pReverb.setPreset(PresetReverb.PRESET_LARGEROOM);pReverb.setEnabled(true);player.setAuxEffectSendLevel(1.0f);
注意: 如果您正在寻找良好的混响效果或回声,最好使用EnvironmentalReverb。我对PresetReverb的表现有些失望。
在环境混响的情况下
从EnvironmentalReverb的文档中
EnvironmentalReverb是输出混合辅助效果,应在音频会话0上创建。为了将MediaPlayer或AudioTrack馈入该效果,必须将它们明确地附加到该效果上,并且必须指定发送级别
。将其附加到MediaPlayer或AudioTrack时,请使用getId()方法返回的效果ID来指定此特定效果。
就像PresetReverb一样,但是当我写的时候
Log.e("DEBUG","sessionId : " + player.getAudioSessionId()); <== printed "454"EnvironmentalReverb eReverb = new EnvironmentalReverb(0,player.getAudioSessionId()); //should be error as per documentation//player.attachAuxEffect(eReverb.getId()); <== Yes this one was commented没有错误,我得到了很好的混响效果和回声。因此,这似乎是文档中的错误。同样,当我们将播放器的会话ID传递给构造函数(player.getAudioSessionId())时,似乎不需要将播放器与EnvironmentalReverb实例相连接。奇怪..
为了完整起见,这也正如文档所述那样工作。
EnvironmentalReverb eReverb = new EnvironmentalReverb(0,0); player.attachAuxEffect(eReverb.getId()); <== No,not comment this one
对于其他AudioEffect儿童(均衡器,BassBoost,虚拟器)
这些不是我问题的一部分。但是对于将来看到这种情况的每个人来说..
注意:不建议使用会话0将插入效果(均衡器,低音增强,虚拟器)附加到全局音频输出混合。
请参阅文件
关于错误(-22,0)
好吧,可以说这不是信息错误消息。我不知道为什么当我们弄乱音频会话时会出现 无效的许可证错误
。无论如何,当我更正音频会话参数时,此错误就消失了。这是我知道的全部。



