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:
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.
@@ -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);
|
||||
|
||||
@@ -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.
@@ -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.
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user