阅读:3415回复:0
音量相关的两个问题
972的音量有两个问题:
1. 声音曲线不合理,音量调到50%左右就几乎听不到声音了, 修改audio_policy_volumes.xml里对应通道的曲线,通常按0-1-33-66-100来设置。如果数学基础好,可以自己设计一个SPEAKER_CURVE,默认的好像是自然对数x常量,没验证过。 2. 最大音量很小:音量初始化有两个地方:ini文件里有个source_gain和post_gain,SoundEffectManager.java里有个AUDIO_PRESCALE_DEFAULT_ARRAY,前者在驱动加载时初始化,能调节总的最大音量或者某个输出设备(speaker/HP/SPDIF),后者在service启动时初始化,只能调节系统总最大音量。看代码才知道,两者对应着10倍的关系,如果两边参数不一致,会导致开机进launcher前后几秒钟内声音有差异。 嗯,ini的source_gain还有个bug,不能配置media的音量,只有AV/atv/hdmi/dtv这4个,不知道是他是不是故意的,还是故意的 if (pdata->s_gain.enable) { pdata->s_gain.atv = DbToAmpl(pdata->s_gain.atv); pdata->s_gain.dtv = DbToAmpl(pdata->s_gain.dtv); pdata->s_gain.hdmi = DbToAmpl(pdata->s_gain.hdmi); pdata->s_gain.av = DbToAmpl(pdata->s_gain.av); pdata->s_gain.media = DbToAmpl(pdata->s_gain.media); } static int parse_audio_source_gain_data(dictionary *pIniParser, struct eq_drc_data *p_attr) { p_attr->s_gain.enable = iniparser_getboolean(pIniParser, "source_gain:sg_enable", 0); if (!p_attr->s_gain.enable) { ITEM_LOGD("%s, Section -> [source_gain] is disable!\n", __FUNCTION__); return 0; } p_attr->s_gain.atv = iniparser_getdouble(pIniParser, "source_gain:atv", 0); ITEM_LOGD("%s, atv is (%f)\n", __FUNCTION__, p_attr->s_gain.atv); p_attr->s_gain.dtv = iniparser_getdouble(pIniParser, "source_gain:dtv", 0); ITEM_LOGD("%s, dtv is (%f)\n", __FUNCTION__, p_attr->s_gain.dtv); p_attr->s_gain.hdmi = iniparser_getdouble(pIniParser, "source_gain:hdmi", 0); ITEM_LOGD("%s, hdmi is (%f)\n", __FUNCTION__, p_attr->s_gain.hdmi); p_attr->s_gain.av = iniparser_getdouble(pIniParser, "source_gain:av", 0); ITEM_LOGD("%s, av is ((%f)\n", __FUNCTION__, p_attr->s_gain.av); return 0; } |
|