无需任何高级权限的强力音频处理App
兼容Android 12及以上系统
具体发布时间详见 BiliBili(同名)
YouTube将在两个月内同步发布,详见 youtube.com/@ameikarewa2116
HSX理论上是全局音频处理,但如下场景可能无效:
HxCore是在DynamicsProcessing API的基础上进行Eq和频响曲线计算,同时借助多声道逻辑计算每个声道独立的Eq,模拟不同的声音相位等
如下是示例(前级预渲染):
private void initializeEqBands(float[] freq, float[] freq_t, float[] gain_on, float[] gain_on_t) {
eqBands = new DynamicsProcessing.EqBand[HxControlCore.maxBandCount_Pre];
eqBands_T = new DynamicsProcessing.EqBand[HxControlCore.maxBandCount_Pre];
if (freq == null) {
freq = HxControlCore.frequencies_jbl_flip;
}
if (freq_t == null) {
freq_t = HxControlCore.frequencies_jbl_flip;
}
if (gain_on_t == null) {
gain_on_t = Default;
}
for (int i = 0; i < HxControlCore.maxBandCount_Pre; i++) {
eqBands[i] = new DynamicsProcessing.EqBand(true, freq[i], gain_on[i]);
eqBands_T[i] = new DynamicsProcessing.EqBand(true, freq_t[i], gain_on_t[i]);
}
}
private void initializeEqBands(float[] gain_on) {
initializeEqBands(null, null, gain_on, null);
}
/* 频响曲线 */
public static float[] HxCore_Surround_L = {0, 6f, 3, 0, 5, 2, 5, 3, 0, 0, 0};
public static float[] HxCore_Surround_R = {0, 5, 0, 0, 2.5f, 0, 3, 3, 0, 0, 0};
public static float[] JBL_Flip = {0, 0, 10, 7, 1.2f, 0, -2, -2.5f, 0, 0, 0};
public static float[] JBL_PartyBox = {0, 9, 3.6f, 0, 0, 0, 0, 0, 0, 0, 0};
public static float[] Origin_Voice = {4f, 1.5f, -0.44f, 0.7f, 2f, -4.5f, 0.2f, 1.7f, 3f, 0.8f, 0};
public static float[] N12T_Origin = {9, -1, -6.6f, -4, 8.5f, -7.7f, -2.35f, -6, 1, 1, 1};
public static float[] JBL_PS3300 = {1.5f, 5f, 3.7f, 1.9f, -3.6f, 1.5f, 3f, 1.9f, 1.75f, 1f, 0.6f};
public static float[] Default = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
Mbc多频段压缩同样经过HxCore算法进行了传参优化: ```java /* HXCORE LIMITER */ public static float[] JBL_PartyBox_Mbc = {6, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0}; public static float[] N12T_Origin_Mbc = {1, 8, 7, 7, 10, 0, 10, -6, 6, 0, 4};
private static final float LIMITER_DEFAULT_ATTACK_TIME = 1; private static final float LIMITER_DEFAULT_RELEASE_TIME = 60; private static final float LIMITER_DEFAULT_RATIO = 10; private static final float LIMITER_DEFAULT_THRESHOLD = -2; private static float LIMITER_DEFAULT_POST_GAIN = 0; public static DynamicsProcessing.Limiter HxCore_LIMITER; private void initializeMbcBands(float[] freq, float[] gain_on) { eqBands_Mbc = new DynamicsProcessing.MbcBand[HxControlCore.maxBandCount_Pre]; if (freq == null) { freq = HxControlCore.frequencies_jbl_flip; } for (int i = 0; i < HxControlCore.maxBandCount_Pre; i++) { eqBands_Mbc[i] = new DynamicsProcessing.MbcBand(true, freq[i], LIMITER_DEFAULT_ATTACK_TIME, LIMITER_DEFAULT_RELEASE_TIME, LIMITER_DEFAULT_RATIO, LIMITER_DEFAULT_THRESHOLD, 3.5f, 2f, 1.1f, 2, gain_on[i]); } } private void initializeMbcBands(float[] gain_on) { initializeEqBands(null, null, gain_on, null); } ``` 并与DynamicsProcessing.LIMITER协同工作,尽可能防止过高的低频电流声,同时防止音频爆音现象