| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SRC_MEDIA_AUDIO_AUDIO_CORE_USAGE_SETTINGS_H_ |
| #define SRC_MEDIA_AUDIO_AUDIO_CORE_USAGE_SETTINGS_H_ |
| |
| #include <fuchsia/media/cpp/fidl.h> |
| |
| namespace media::audio { |
| |
| // Usage loudness settings in gain dbfs units. |
| // This class is not thread safe. |
| class UsageGainSettings { |
| public: |
| UsageGainSettings() = default; |
| |
| // Gets the gain that should affect all audio elements of the given usage, taking into account |
| // the category gain and adjustment. |
| // |
| // Since this value includes adjustments, it should only be used for mixing and not reflected to |
| // users. |
| float GetAdjustedUsageGain(const fuchsia::media::Usage& usage) const; |
| |
| // Gets the gain of the usage, without accounting for transient adjustments. |
| float GetUnadjustedUsageGain(const fuchsia::media::Usage& usage) const; |
| |
| // Gets the gain adjustment included in the usage's total adjusted usage gain. |
| float GetUsageGainAdjustment(const fuchsia::media::Usage& usage) const; |
| |
| void SetUsageGain(fuchsia::media::Usage usage, float gain_db); |
| |
| void SetUsageGainAdjustment(fuchsia::media::Usage usage, float gain_db); |
| |
| private: |
| // TODO(fxbug.dev/36289): Determine whether mute must be tracked here |
| |
| std::array<float, fuchsia::media::RENDER_USAGE_COUNT> render_usage_gain_ = {}; |
| std::array<float, fuchsia::media::CAPTURE_USAGE_COUNT> capture_usage_gain_ = {}; |
| |
| std::array<float, fuchsia::media::RENDER_USAGE_COUNT> render_usage_gain_adjustment_ = {}; |
| std::array<float, fuchsia::media::CAPTURE_USAGE_COUNT> capture_usage_gain_adjustment_ = {}; |
| }; |
| |
| // Usage loudness settings in volume units. |
| class UsageVolumeSettings { |
| public: |
| UsageVolumeSettings(); |
| |
| // Gets the volume that should affect all audio elements of the given usage. |
| float GetUsageVolume(const fuchsia::media::Usage& usage) const; |
| |
| void SetUsageVolume(fuchsia::media::Usage usage, float volume); |
| |
| private: |
| std::array<float, fuchsia::media::RENDER_USAGE_COUNT> render_usage_volume_; |
| std::array<float, fuchsia::media::CAPTURE_USAGE_COUNT> capture_usage_volume_; |
| }; |
| |
| } // namespace media::audio |
| |
| #endif // SRC_MEDIA_AUDIO_AUDIO_CORE_USAGE_SETTINGS_H_ |