1/*
2Copyright 2018 Google Inc. All Rights Reserved.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS-IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17#ifndef RESONANCE_AUDIO_GRAPH_SYSTEM_SETTINGS_H_
18#define RESONANCE_AUDIO_GRAPH_SYSTEM_SETTINGS_H_
19
20#include "api/resonance_audio_api.h"
21#include "base/constants_and_types.h"
22#include "base/misc_math.h"
23#include "graph/source_parameters_manager.h"
24
25namespace vraudio {
26
27// Contains system-wide settings and parameters. Note that this class is not
28// thread-safe. Updating system parameters must be avoided during the audio
29// graph processing.
30class SystemSettings {
31 public:
32 // Constructor initializes the system configuration.
33 //
34 // @param num_output_channels Number of output channels.
35 // @param frames_per_buffer Buffer size in frames.
36 // @param sample_rate_hz Sample rate.
37 SystemSettings(size_t num_output_channels, size_t frames_per_buffer,
38 int sample_rate_hz)
39 : sample_rate_hz_(sample_rate_hz),
40 frames_per_buffer_(frames_per_buffer),
41 num_channels_(num_output_channels),
42 head_rotation_(WorldRotation::Identity()),
43 head_position_(WorldPosition::Zero()),
44 master_gain_(1.0f),
45 stereo_speaker_mode_(false) {}
46
47 // Sets the listener head orientation.
48 //
49 // @param head_rotation Listener head orientation.
50 void SetHeadRotation(const WorldRotation& head_rotation) {
51 head_rotation_ = head_rotation;
52 }
53
54 // Sets the listener head position.
55 //
56 // @param head_position Listener head position.
57 void SetHeadPosition(const WorldPosition& head_position) {
58 head_position_ = head_position;
59 }
60
61 // Sets the global stereo speaker mode flag. This flag enforces stereo panning
62 // and disables HRTF-based binauralization. The stereo speaker mode is
63 // disabled by default.
64 //
65 // @param enabled Defines the stereo speaker mode state.
66 void SetStereoSpeakerMode(bool enabled) { stereo_speaker_mode_ = enabled; }
67
68 // Returns the source parameters manager.
69 //
70 // @return Mutable source parameters manager.
71 SourceParametersManager* GetSourceParametersManager() {
72 return &source_parameters_manager_;
73 }
74
75 // Returns the parameters of source with given |source_id|.
76 //
77 // @param source_id Source id.
78 // @return Pointer to source parameters, nullptr if |source_id| not found.
79 const SourceParameters* GetSourceParameters(SourceId source_id) const {
80 return source_parameters_manager_.GetParameters(source_id);
81 }
82
83 // Returns the sample rate.
84 //
85 // @return Sample rate in Hertz.
86 int GetSampleRateHz() const { return sample_rate_hz_; }
87
88 // Returns the frames per buffer.
89 //
90 // @return Buffer size in frames.
91 size_t GetFramesPerBuffer() const { return frames_per_buffer_; }
92
93 // Returns the number of output channels.
94 //
95 // @return Number of output channels.
96 size_t GetNumChannels() const { return num_channels_; }
97
98 // Returns the head rotation.
99 //
100 // @return Head orientation.
101 const WorldRotation& GetHeadRotation() const { return head_rotation_; }
102
103 // Returns the head position.
104 //
105 // @return Head position.
106 const WorldPosition& GetHeadPosition() const { return head_position_; }
107
108 // Returns the stereo speaker mode state.
109 //
110 // @return Current stereo speaker mode state.
111 bool IsStereoSpeakerModeEnabled() const { return stereo_speaker_mode_; }
112
113 // Sets the master gain.
114 //
115 // @param master_gain Master output gain.
116 void SetMasterGain(float master_gain) { master_gain_ = master_gain; }
117
118 // Sets current reflection properties.
119 //
120 // @param reflection_properties Reflection properties.
121 void SetReflectionProperties(
122 const ReflectionProperties& reflection_properties) {
123 reflection_properties_ = reflection_properties;
124 }
125
126 // Sets current reverb properties.
127 //
128 // @param reverb_properties Reflection properties.
129 void SetReverbProperties(const ReverbProperties& reverb_properties) {
130 reverb_properties_ = reverb_properties;
131 }
132
133 // Returns the master gain.
134 //
135 // @return Master output gain.
136 float GetMasterGain() const { return master_gain_; }
137
138 // Returns the current reflection properties of the environment.
139 //
140 // @return Current reflection properties.
141 const ReflectionProperties& GetReflectionProperties() const {
142 return reflection_properties_;
143 }
144
145 // Returns the current reverb properties of the environment.
146 //
147 // @return Current reverb properties.
148 const ReverbProperties& GetReverbProperties() const {
149 return reverb_properties_;
150 }
151
152 // Disable copy and assignment operator. Since |SystemSettings| serves as a
153 // global parameter storage, it should never be copied.
154 SystemSettings& operator=(const SystemSettings&) = delete;
155 SystemSettings(const SystemSettings&) = delete;
156
157 private:
158 // Sampling rate.
159 const int sample_rate_hz_;
160
161 // Frames per buffer.
162 const size_t frames_per_buffer_;
163
164 // Number of channels per buffer.
165 const size_t num_channels_;
166
167 // The most recently updated head rotation and position.
168 WorldRotation head_rotation_;
169 WorldPosition head_position_;
170
171 // Source parameters manager.
172 SourceParametersManager source_parameters_manager_;
173
174 // Master gain in amplitude.
175 float master_gain_;
176
177 // Current reflection properties of the environment.
178 ReflectionProperties reflection_properties_;
179
180 // Current reverb properties of the environment.
181 ReverbProperties reverb_properties_;
182
183 // Defines the state of the global speaker mode.
184 bool stereo_speaker_mode_;
185};
186
187} // namespace vraudio
188
189#endif // RESONANCE_AUDIO_GRAPH_SYSTEM_SETTINGS_H_
190

source code of qtmultimedia/src/3rdparty/resonance-audio/resonance_audio/graph/system_settings.h