【Android Audio】音量曲线 【基于Android Q 】【不定期更新文章】

音量曲线加载code

路径:frameworks/av/services/audiopolicy/managerdefault/engine/common/src/EngineBase.cpp

engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig(){
...
    auto loadVolumeGroups = [](auto &volumeConfigs, auto &volumeGroups) {
        for (auto &volumeConfig : volumeConfigs) {
            sp<VolumeGroup> volumeGroup = new VolumeGroup(volumeConfig.name, volumeConfig.indexMin,
                                                          volumeConfig.indexMax);
            ALOGI("hippo id:%d, name:%s, min:%d, max:%d volumeConfig.volumeCurves:%d", volumeGroup->getId(), volumeConfig.name.c_str(), volumeConfig.indexMin,
                volumeConfig.indexMax, volumeConfig.volumeCurves.size()); /* 小编的打印 */
            volumeGroups[volumeGroup->getId()] = volumeGroup;

            for (auto &configCurve : volumeConfig.volumeCurves) {
                device_category deviceCat = DEVICE_CATEGORY_SPEAKER;
                 ALOGI("APM configCurve:%s", configCurve.deviceCategory.c_str()); /* 小编的打印 */
                if (!DeviceCategoryConverter::fromString(configCurve.deviceCategory, deviceCat)) {
                    ALOGE("%s: Invalid %s", __FUNCTION__, configCurve.deviceCategory.c_str());
                    continue;
                }
                sp<VolumeCurve> curve = new VolumeCurve(deviceCat);
                for (auto &point : configCurve.curvePoints) {
                    ALOGI("APM index:%d, attenuationInMb:%d", point.index, point.attenuationInMb); /* 小编的打印 */
                    curve->add({point.index, point.attenuationInMb});
                }
                volumeGroup->add(curve);
            }
        }
    };
    auto result = engineConfig::parse();
    if (result.parsedConfig == nullptr) {
        ALOGW("%s: No configuration found, using default matching phone experience.", __FUNCTION__);
        engineConfig::Config config = gDefaultEngineConfig;
        android::status_t ret = engineConfig::parseLegacyVolumes(config.volumeGroups);
        result = {std::make_unique<engineConfig::Config>(config),
                  static_cast<size_t>(ret == NO_ERROR ? 0 : 1)};
    }
    ALOGE_IF(result.nbSkippedElement != 0, "skipped %zu elements", result.nbSkippedElement);
    loadVolumeGroups(result.parsedConfig->volumeGroups, mVolumeGroups);/* 回调上面的loadVolumeGroups函数 */
...
}

共13个volume group:
AUDIO_STREAM_ACCESSIBILITY
AUDIO_STREAM_ALARM

AUDIO_STREAM_BLUETOOTH_SCO
AUDIO_STREAM_DTMF
AUDIO_STREAM_ENFORCED_AUDIBLE
AUDIO_STREAM_MUSIC
AUDIO_STREAM_NOTIFICATION
AUDIO_STREAM_PATCH
AUDIO_STREAM_REROUTING
AUDIO_STREAM_RING
AUDIO_STREAM_SYSTEM
AUDIO_STREAM_TTS
AUDIO_STREAM_VOICE_CALL

每个group有4个设备类型;

每个设备都有一条音量曲线;

参考音量曲线配置文件:
/vendor/etc/audio_policy_volumes.xml
/vendor/etc/default_volume_tables.xml

对应dumpsys media.audio_policy:
Volume Groups dump:字段

猜你喜欢

转载自blog.csdn.net/u013120422/article/details/107825749