You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中AudioTrack无法连接audiofx.Equalizer问题求助

解决AudioEffect初始化失败(Error -3)的问题

错误含义解析

  • Error -3 对应 AudioEffect.ERROR_INVALID_OPERATION,表示当前操作不符合系统音频框架的规则
  • Status -22 是底层参数非法的错误提示

具体原因及修复方案

  1. 音频编码格式错误
    你在AudioFormat.Builder中误用了MediaRecorder.AudioEncoder.AMR_NB作为编码类型,这是音频编码器的枚举值,而非AudioTrack所需的PCM原始音频编码格式。Equalizer仅能处理PCM格式的音频流,且低延迟模式下AudioTrack只支持PCM编码。

    • 修复:将编码类型替换为AudioFormat.ENCODING_PCM_16BIT(或其他设备支持的PCM编码)
  2. 低延迟模式与音频效果冲突
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 21:20:28