android - 如何在 android 中设置混响效果的值?

标签 android ffmpeg android-ffmpeg audioeffect

我正在开发一个具有混响功能的应用程序。我知道我们可以通过 PresetReverb 和 EnvironmentalReverb 类来实现这个功能。
对于自定义,我们有 EnvironmentalReverb 类,我正在使用这个类,效果可以在视频中看到:

val eReverb = EnvironmentalReverb(1, simpleExoplayer?.audioSessionId!!)
            eReverb.reverbDelay = 5 // [0, 100] done
            eReverb.roomLevel = -1000 // [-9000, 0]
            eReverb.reverbLevel = 2000 // [-9000, 2000]
            eReverb.decayHFRatio = 1000.toShort()
            eReverb.decayTime = 10000
            eReverb.density = 1000.toShort()
            eReverb.diffusion = 1000.toShort()
            eReverb.enabled = true
            val auxEffectInfo = AuxEffectInfo(eReverb.id, 1.0F)
            simpleExoplayer?.setAuxEffectInfo(auxEffectInfo)
问题:如果我们想根据 PresetReverb 类效果(LARGE_ROOM、LARGE_HALL、MEDIUM_ROOM 等)应用 EnvironmentalReverb 值,那么 reverbDelay、diffusion、density 等的值应该是多少?

最佳答案

EnvironmentalReverb source codeOpenSL ES 1.0.1 specification .
该规范中的第 451-452 页列出了以下预设定义:

#define SL_I3DL2_ENVIRONMENT_PRESET_SMALLROOM \
 { -1000,-600, 1100, 830, -400, 5, 500, 10, 1000, 1000 }
#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM \
 { -1000,-600, 1300, 830, -1000, 20, -200, 20, 1000, 1000 }
#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEROOM \
 { -1000,-600, 1500, 830, -1600, 5, -1000, 40, 1000, 1000 }
#define SL_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL \
 { -1000,-600, 1800, 700, -1300, 15, -800, 30, 1000, 1000 }
#define SL_I3DL2_ENVIRONMENT_PRESET_LARGEHALL \
 { -1000,-600, 1800, 700, -2000, 30, -1400, 60, 1000, 1000 }
#define SL_I3DL2_ENVIRONMENT_PRESET_PLATE \
 { -1000,-200, 1300, 900, 0, 2, 0, 10, 1000, 750 } 
为每个预设列出的 10 个值应对应于 EnvironmentalReverb参数按以下顺序排列:PARAM_ROOM_LEVEL , PARAM_ROOM_HF_LEVEL , PARAM_DECAY_TIME , PARAM_DECAY_HF_RATIO , PARAM_REFLECTIONS_LEVEL , PARAM_REFLECTIONS_DELAY , PARAM_REVERB_LEVEL , PARAM_REVERB_DELAY , PARAM_DIFFUSION , PARAM_DENSITY .

关于android - 如何在 android 中设置混响效果的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71405202/

相关文章:

java - FFMPEG 使用字符串设置 -ss 和 -to

python - 将单个视频拆分为多个等间隔的视频

javascript - 如何将数据从一个组件实时传递到另一个组件?

android - 当我通过gmail或shareIt共享apk而没有启动时,android应用程序崩溃

android - 检索私钥时链为空

php - 用图像替换帧中检测到的对象。(图像处理)

java - android库中的依赖项,但不存在

ffmpeg - 在 Windows 32 上构建 ffmpeg dll 的问题

ffmpeg - ffmper 与 vlc - 屏幕抓取太重,导致文件跳跃,帧丢失

android - 如何使用FFMPEG保存rtsp流不丢包