1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #ifndef LOG_TAG
16 #define LOG_TAG "AudioEffectVolume"
17 #endif
18 
19 #include "audio_effect_volume.h"
20 #include "audio_effect_log.h"
21 
22 #include "audio_utils.h"
23 
24 namespace OHOS {
25 namespace AudioStandard {
AudioEffectVolume()26 AudioEffectVolume::AudioEffectVolume()
27 {
28     AUDIO_DEBUG_LOG("created!");
29     SceneTypeToVolumeMap_.clear();
30     SystemVolumeMap_.clear();
31     SystemVolumeMap_ = {
32         {STREAM_MUSIC, 1.0f},
33     };
34 }
35 
~AudioEffectVolume()36 AudioEffectVolume::~AudioEffectVolume()
37 {
38     AUDIO_DEBUG_LOG("destructor!");
39 }
40 
GetInstance()41 std::shared_ptr<AudioEffectVolume> AudioEffectVolume::GetInstance()
42 {
43     static std::shared_ptr<AudioEffectVolume> effectVolume = std::make_shared<AudioEffectVolume>();
44     return effectVolume;
45 }
46 
SetSystemVolume(const int32_t systemVolumeType,const float systemVolume)47 void AudioEffectVolume::SetSystemVolume(const int32_t systemVolumeType, const float systemVolume)
48 {
49     std::lock_guard<std::mutex> lock(volumeMutex_);
50     AUDIO_DEBUG_LOG("systemVolumeType: %{public}d, systemVolume: %{public}f", systemVolumeType, systemVolume);
51     SystemVolumeMap_[systemVolumeType] = systemVolume;
52 }
53 
GetSystemVolume(const int32_t systemVolumeType)54 float AudioEffectVolume::GetSystemVolume(const int32_t systemVolumeType)
55 {
56     std::lock_guard<std::mutex> lock(volumeMutex_);
57     auto it = SystemVolumeMap_.find(systemVolumeType);
58     if (it == SystemVolumeMap_.end()) {
59         return SystemVolumeMap_[STREAM_MUSIC];
60     } else {
61         return SystemVolumeMap_[systemVolumeType];
62     }
63 }
64 
SetStreamVolume(const std::string sessionID,const float streamVolume)65 void AudioEffectVolume::SetStreamVolume(const std::string sessionID, const float streamVolume)
66 {
67     std::lock_guard<std::mutex> lock(volumeMutex_);
68     AUDIO_DEBUG_LOG("SetStreamVolume: %{public}f", streamVolume);
69     SessionIDToVolumeMap_[sessionID] = streamVolume;
70 }
71 
GetStreamVolume(const std::string sessionID)72 float AudioEffectVolume::GetStreamVolume(const std::string sessionID)
73 {
74     std::lock_guard<std::mutex> lock(volumeMutex_);
75     if (!SessionIDToVolumeMap_.count(sessionID)) {
76         return 1.0;
77     } else {
78         return SessionIDToVolumeMap_[sessionID];
79     }
80 }
81 
StreamVolumeDelete(const std::string sessionID)82 int32_t AudioEffectVolume::StreamVolumeDelete(const std::string sessionID)
83 {
84     std::lock_guard<std::mutex> lock(volumeMutex_);
85     if (!SessionIDToVolumeMap_.count(sessionID)) {
86         return 0;
87     } else {
88         SessionIDToVolumeMap_.erase(sessionID);
89         return 0;
90     }
91 }
92 
SetDspVolume(const float volume)93 void AudioEffectVolume::SetDspVolume(const float volume)
94 {
95     AUDIO_DEBUG_LOG("setDspVolume: %{public}f", volume);
96     dspVolume_ = volume;
97 }
98 
GetDspVolume()99 float AudioEffectVolume::GetDspVolume()
100 {
101     return dspVolume_;
102 }
103 }  // namespace AudioStandard
104 }  // namespace OHOS