diff --git a/meow_ui_vol.c b/meow_ui_vol.c index 6269bad..b10cf35 100644 --- a/meow_ui_vol.c +++ b/meow_ui_vol.c @@ -110,9 +110,10 @@ int meow_ui_vol_step(const char *path, int dir) * 与 launcher meow_dac_vol_write / watchdog wd_vol_write 完全同路径(语义同源)。 */ void meow_ui_vol_dac_write(int pct) { - int dac = 255 - pct * 255 / 100; /* CS43198 寄存器=衰减量(0=最响 255=静音),用户 pct 越大越响 → 反转映射 */ - if (dac < 0) dac = 0; - if (dac > 255) dac = 255; + int t = 100 - pct, dac; + if (pct <= 0) dac = 255; /* 真静音(DS1039:255=-127.5dB) */ + else dac = t * t * 192 / 10000; /* 感知平方锥度:dB 衰减=(1-pct)^2×96dB */ + if (dac > 255) dac = 255; if (dac < 0) dac = 0; /* CS43198=衰减量(0最响255静音)+平方锥度(听感线性) */ char cmd[160]; snprintf(cmd, sizeof cmd, "amixer -c 0 cset numid=1 %d >/dev/null 2>&1; amixer -c 0 cset numid=2 %d >/dev/null 2>&1",