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