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 bdd9e898f4
commit 6a4d330a26
12 files changed
+20 -16

No files matched your search

Binary file not shown.
Binary file not shown.
Binary file not shown.
+4 -3
View File
@@ -553,9 +553,10 @@ static int amixer_get(int numid, int card)
static void dac_vol_set(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静音)+平方锥度(听感线性) */
amixer_set(1, dac, 1);
amixer_set(2, dac, 1);
logmsg("DAC vol -> %d%% (L/R=%d)", pct, dac);
+4 -3
View File
@@ -102,9 +102,10 @@ int settings_cache_registered = 0; /* M2.24:监听只注册一次 */
* settings_volume(写入 DAC 的映射值)为权威跟踪值。 */
void meow_dac_vol_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",
Binary file not shown.
Binary file not shown.
+4 -3
View File
@@ -356,9 +356,10 @@ static void wd_vol_load(void)
/* 写真实 DAC(CS43198, numid 1/2, 0-255),与 launcher meow_dac_vol_write 同路径。 */
static void wd_vol_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",
Binary file not shown.
+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 完全同路径(语义同源)。 */
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",