Kotlin中AudioTrack无法连接audiofx.Equalizer问题求助
解决AudioEffect初始化失败(Error -3)的问题
错误含义解析
- Error -3 对应
AudioEffect.ERROR_INVALID_OPERATION,表示当前操作不符合系统音频框架的规则 - Status -22 是底层参数非法的错误提示
具体原因及修复方案
音频编码格式错误
你在AudioFormat.Builder中误用了MediaRecorder.AudioEncoder.AMR_NB作为编码类型,这是音频编码器的枚举值,而非AudioTrack所需的PCM原始音频编码格式。Equalizer仅能处理PCM格式的音频流,且低延迟模式下AudioTrack只支持PCM编码。- 修复:将编码类型替换为
AudioFormat.ENCODING_PCM_16BIT(或其他设备支持的PCM编码)
- 修复:将编码类型替换为
低延迟模式与音频效果冲突
PERFORMANCE_MODE_LOW_LATENCY启用了系统的低延迟音频路径,该路径为了最小化延迟会跳过音频效果处理模块,因此无法在该模式下创建Equalizer实例。- 修复:移除低延迟模式配置,或改用
PERFORMANCE_MODE_NORMAL
- 修复:移除低延迟模式配置,或改用
修正后的完整代码
Track = AudioTrack.Builder() .setAudioAttributes(AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build()) .setAudioFormat(AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(Fs) .setChannelMask(AudioFormat.CHANNEL_OUT_STEREO) .build()) .setPerformanceMode(AudioTrack.PERFORMANCE_MODE_NORMAL) .setTransferMode(AudioTrack.MODE_STREAM) .build() Track.play() val eq = Equalizer(100, Track.audioSessionId) eq.isEnabled = true
额外注意事项
- 确保采样率
Fs为设备支持的标准值(如44100Hz、48000Hz),非标准采样率可能导致音频效果初始化失败 - 若业务必须使用低延迟模式,只能放弃系统Equalizer,改用应用层自定义的均衡算法处理PCM数据
内容的提问来源于stack exchange,提问作者Sebastián Diez
相关产品推荐
相关产品推荐

