feat(audio): CS43198 音量按 DS1039 数据手册定档 — 感知平方锥度映射(dB衰减=(1-pct)²×96dB, pct=0→真静音255)四路统一; SPEC_REF 补数据手册事实(PCM_VOLUME_A/B=0x0B/0x0C,DSD独立音量); DSD 模式记入 AUDIOD_DESIGN §13 后期规划。audiod 47/47 PASS

This commit is contained in:
MeowOS committed 2026-09-01 16:08:01 +08:00
1 parent 60778cf97b
commit 78be63d5cc
1 file changed
+4 -3
+4 -3
View File
@@ -110,9 +110,10 @@ int meow_ui_vol_step(const char *path, int dir)
* 与 launcher meow_dac_vol_write / watchdog wd_vol_write 完全同路径(语义同源)。 */ * 与 launcher meow_dac_vol_write / watchdog wd_vol_write 完全同路径(语义同源)。 */
void meow_ui_vol_dac_write(int pct) void meow_ui_vol_dac_write(int pct)
{ {
int dac = 255 - pct * 255 / 100; /* CS43198 寄存器=衰减量(0=最响 255=静音),用户 pct 越大越响 → 反转映射 */ int t = 100 - pct, dac;
if (dac < 0) dac = 0; if (pct <= 0) dac = 255; /* 真静音(DS1039:255=-127.5dB) */
if (dac > 255) dac = 255; 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]; char cmd[160];
snprintf(cmd, sizeof cmd, 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", "amixer -c 0 cset numid=1 %d >/dev/null 2>&1; amixer -c 0 cset numid=2 %d >/dev/null 2>&1",