1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * telephone_audio_initializer.cpp
- *
- * Created on: 2022年6月27日
- * Author: pengzc
- */
- #include "telephone_audio_initializer.h"
- #include <sstream>
- #include <fstream>
- #include <utils/Log.h>
- #include <json/json.h>
- #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;
- }
|