/* * telephone_audio_initializer.cpp * * Created on: 2022年6月27日 * Author: pengzc */ #include "telephone_audio_initializer.h" #include #include #include #include #include "zkaudio.h" static int GetInt(Json::Value& json_object, const std::string& key, int def) { if (json_object.isObject() && json_object.isMember(key) && json_object[key].isInt()) { return json_object[key].asInt(); } return def; } #define LOG_TAG "TelephoneAudioInitializer" int TelephoneAudioInitializer::Setup(voip::Telephone* telephone, const std::string& filename) { if (telephone == NULL) { LOGE("telephone must not be null"); return -1; } std::string str; { std::ifstream ifs(filename, std::ios::in | std::ios::binary); if (!ifs.is_open()) { LOGE("can not open file, %s", filename.c_str()); return -1; } std::stringstream ss; ss << ifs.rdbuf(); str = ss.str(); ifs.close(); } Json::Value obj; { Json::Reader reader; if (!reader.parse(str.c_str(), str.c_str() + str.length(), obj, false)) { LOGE("invalid json string"); return -1; } } if(obj.isMember("input_volume")) { auto input = obj["input_volume"]; int ch_0_vol = GetInt(input, "channel_0", 0); int ch_1_vol = GetInt(input, "channel_1", 0); zk_audio_input_set_volume_native(0, ch_0_vol); zk_audio_input_set_volume_native(1, ch_1_vol); LOGD("input volume [%d,%d]", ch_0_vol, ch_1_vol); } else { LOGE("not found input_volume"); } int out_vol = GetInt(obj, "output_volume", 0); zk_audio_output_set_volume_native(out_vol); LOGD("output volume %d", out_vol); const char* AEC_KEY = "acoustic_echo_cancellater"; base::AcousticEchoCancellater::Configuration aec_conf; if (obj.isMember(AEC_KEY)) { aec_conf = aec_conf.FromString( obj[AEC_KEY].toStyledString()); } else { LOGE("not found acoustic_echo_cancellater"); } const char* APC_KEY = "audio_process_chain"; base::AudioProcessChain::Configuration apc_conf; if (obj.isMember(APC_KEY)) { apc_conf = apc_conf.FromString(obj[APC_KEY].toStyledString()); } else { LOGE("not found audio_process_chain"); } LOGD("aec configuration\n%s", aec_conf.ToString().c_str()); LOGD("apc configuration\n%s",apc_conf.ToString().c_str()); telephone->SetInputAecApcConfig(aec_conf, apc_conf); return 0; }