summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/resonance-audio/platforms/common/room_effects_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/resonance-audio/platforms/common/room_effects_utils.h')
-rw-r--r--src/3rdparty/resonance-audio/platforms/common/room_effects_utils.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/3rdparty/resonance-audio/platforms/common/room_effects_utils.h b/src/3rdparty/resonance-audio/platforms/common/room_effects_utils.h
new file mode 100644
index 000000000..edaf7849d
--- /dev/null
+++ b/src/3rdparty/resonance-audio/platforms/common/room_effects_utils.h
@@ -0,0 +1,83 @@
+/*
+Copyright 2018 Google Inc. All Rights Reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS-IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+#ifndef RESONANCE_AUDIO_PLATFORM_COMMON_ROOM_EFFECTS_UTILS_H_
+#define RESONANCE_AUDIO_PLATFORM_COMMON_ROOM_EFFECTS_UTILS_H_
+
+#include <vector>
+
+#include "api/resonance_audio_api.h"
+#include "base/constants_and_types.h"
+#include "base/misc_math.h"
+#include "platforms/common/room_properties.h"
+
+namespace vraudio {
+
+// Room material properties.
+struct RoomMaterial {
+ // Material surface integer identifier.
+ MaterialName name;
+
+ // An array of absorption coefficients defined in octave bands.
+ float absorption_coefficients[kNumReverbOctaveBands];
+};
+
+// Generates |ReflectionProperties| based on given |room_properties|.
+//
+// @param room_properties Room properties.
+ReflectionProperties ComputeReflectionProperties(
+ const RoomProperties& room_properties);
+
+// Generates |ReverbProperties| based on given |room_properties|.
+//
+// @param room_properties Room properties.
+ReverbProperties ComputeReverbProperties(const RoomProperties& room_properties);
+
+// Generates |ReverbProperties| by directly setting the RT60 values, subject
+// to modifications by |brightness_modifier| and |time_scaler|.
+//
+// @param rt60_values RT60 values.
+// @param brightness_modifier Modifier adjusting the brightness of reverb.
+// @param time_scalar Modifier scaling the reverb time.
+// @param gain_multiplier Modifier scaling the reverb gain.
+ReverbProperties ComputeReverbPropertiesFromRT60s(const float* rt60_values,
+ float brightness_modifier,
+ float time_scalar,
+ float gain_multiplier);
+
+// Calculates the gain value for |source_position| with respect to the given
+// room properties. The sound level for the room effects will remain the same
+// inside the room, otherwise, it will decrease with a linear ramp from the
+// closest point on the room.
+//
+// @param source_position World position of the source.
+// @param room_position Center position of the room.
+// @param room_rotation Orientation of the room.
+// @param room_dimensions Dimensions of the room..
+// @return Attenuation (gain) value in range [0.0f, 1.0f].
+float ComputeRoomEffectsGain(const WorldPosition& source_position,
+ const WorldPosition& room_position,
+ const WorldRotation& room_rotation,
+ const WorldPosition& room_dimensions);
+
+// Gets the room material properties from a material index.
+//
+// @param material_index Index of the material.
+RoomMaterial GetRoomMaterial(size_t material_index);
+
+} // namespace vraudio
+
+#endif // RESONANCE_AUDIO_PLATFORM_COMMON_ROOM_EFFECTS_UTILS_H_