移动开发

android.media.audiofx.LoudnessEnhance 介绍

android.media.audiofx.LoudnessEnhancer 是 Android 提供的音频后处理效果类之一,用于增强音频的响度(Loudness)。它继承自 android.media.audiofx.AudioEffect,可在 API 级别 19(Android 4.4)及以上使用。


✅ 一、基本用途

LoudnessEnhancer 的作用是通过提升音频信号的增益来增强响度,但并不一定等同于音量加大。它更像是一种「音频压缩+放大」的效果,适用于提升人声或背景音频的感知。


✅ 二、基本用法

1. 创建实例

你需要为某个播放会话创建 LoudnessEnhancer 实例,通常使用音频播放的 audioSessionId。

// 假设你已经有一个 MediaPlayer 或 AudioTrack 的 audioSessionId
val audioSessionId = mediaPlayer.audioSessionId

// 创建 LoudnessEnhancer 实例
val loudnessEnhancer = LoudnessEnhancer(audioSessionId)

2. 设置增益(Gain)

LoudnessEnhancer 使用的是毫贝(mB, milliBels),1000 mB = 1 dB。

// 设置目标增益,例如 1000 mB = 1 dB
loudnessEnhancer.setTargetGain(1000)

通常推荐的增益范围:

  • 合理范围:0 ~ 5000 mB(0 ~ 5 dB)
  • 不建议设置过高,避免音频失真

3. 启用或禁用

// 启用响度增强
loudnessEnhancer.enabled = true

// 禁用
loudnessEnhancer.enabled = false

4. 释放资源

loudnessEnhancer.release()

✅ 三、完整示例

val mediaPlayer = MediaPlayer.create(context, R.raw.sample_audio)
val loudnessEnhancer = LoudnessEnhancer(mediaPlayer.audioSessionId)

loudnessEnhancer.setTargetGain(1500) // 增加 1.5 dB
loudnessEnhancer.enabled = true

mediaPlayer.start()

// 记得释放资源
mediaPlayer.setOnCompletionListener {
    loudnessEnhancer.release()
    mediaPlayer.release()
}

⚠️ 四、注意事项

注意点说明
音频会话 IDLoudnessEnhancer 只能作用于有音频会话 ID 的音频轨道,如 MediaPlayer、AudioTrack 等。
播放前创建更安全最好在开始播放前就初始化并启用,以确保不丢失效果。
设备兼容性部分低端设备可能不支持此 AudioEffect,建议加 try-catch。
增益上限设置过高会导致破音、失真甚至引发耳机损坏,建议设置增益不超过 5000 mB。
不影响系统音量它增强的是播放流的响度,不会改变设备音量。
与其他 AudioEffect 冲突同时使用多个 AudioEffect(如 Equalizer、Virtualizer)时,可能会有冲突,取决于设备实现。

✅ 五、判断设备是否支持

val effects = AudioEffect.queryEffects()
val supported = effects.any {
    it.type == AudioEffect.EFFECT_TYPE_LOUDNESS_ENHANCER
}

✅ 六、与其他音频处理类对比

类名功能使用场景
Equalizer均衡器调整不同频段的音量
BassBoost低音增强提高低频效果
Virtualizer虚拟环绕声提高立体声空间感
LoudnessEnhancer响度增强增加整体响度和感知清晰度

如你需要结合 Media3 使用 LoudnessEnhancer,也可以通过自定义 AudioProcessor 或在 ExoPlayer 的音频会话 ID 获取后再创建增强器。如果你正在开发音频播放器(如你的光锥音乐项目),LoudnessEnhancer 是一个轻量但有效的增强听感的工具。

留言

您的邮箱地址不会被公开。 必填项已用 * 标注