tmp
[blender.git] / extern / audaspace / include / fx / HRTFLoader.h
1 /*******************************************************************************
2 * Copyright 2015-2016 Juan Francisco Crespo Gal├ín
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *   http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 ******************************************************************************/
16
17 #pragma once
18
19 /**
20 * @file HRTFLoader.h
21 * @ingroup fx
22 * The HRTFLoader class.
23 */
24
25 #include "Audaspace.h"
26 #include "fx/HRTF.h"
27 #include "util/FFTPlan.h"
28
29 #include <string>
30 #include <memory>
31
32 AUD_NAMESPACE_BEGIN
33
34 /**
35 * This loader provides a method to load all the HRTFs in one directory, provided they follow the following naming scheme:
36 * Example: L-10e210a.wav
37 * The first character refers to the ear from which the HRTF was recorded: 'L' for a left ear and 'R' for a right ear.
38 * Next is the elevation angle followed by the 'e' character. [-90, 90]
39 * Then is the azimuth angle followed by the 'a' character. [0, 360)
40 * For a sound source situated at the left of the listener the azimuth angle regarding the left ear is 90 while the angle regarding the right ear is 270.
41 * KEMAR HRTFs use this naming scheme.
42 */
43 class AUD_API HRTFLoader
44 {
45 private:
46         // delete normal constructor, copy constructor and operator=
47         HRTFLoader(const HRTFLoader&) = delete;
48         HRTFLoader& operator=(const HRTFLoader&) = delete;
49         HRTFLoader() = delete;
50
51 public:
52         /**
53         * Loads all the left ear HRTFs in the directory.Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
54         * \param plan The plan that will be used to create the HRTF object.
55         * \param fileExtension The extension of the HRTF files.
56         * \param path The path to the folder containing the HRTFs.
57         * \return A shared pointer to a loaded HRTF object.
58         */
59         static std::shared_ptr<HRTF> loadLeftHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path = "");
60
61         /**
62         * Loads all the right ear HRTFs in the directory. Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
63         * \param plan The plan that will be used to create the HRTF object.
64         * \param fileExtension The extension of the HRTF files.
65         * \param path The path to the folder containing the HRTFs.
66         * \return A shared pointer to a loaded HRTF object.
67         */
68         static std::shared_ptr<HRTF> loadRightHRTFs(std::shared_ptr<FFTPlan> plan, const std::string& fileExtension, const std::string& path = "");
69
70         /**
71         * Loads all the left ear HRTFs in the directory.Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
72         * \param fileExtension The extension of the HRTF files.
73         * \param path The path to the folder containing the HRTFs.
74         * \return A shared pointer to a loaded HRTF object.
75         */
76         static std::shared_ptr<HRTF> loadLeftHRTFs(const std::string& fileExtension, const std::string& path = "");
77
78         /**
79         * Loads all the right ear HRTFs in the directory. Onle one ear HRTFs for all azimuths [0,360) are needed for binaural sound.
80         * \param fileExtension The extension of the HRTF files.
81         * \param path The path to the folder containing the HRTFs.
82         * \return A shared pointer to a loaded HRTF object.
83         */
84         static std::shared_ptr<HRTF> loadRightHRTFs(const std::string& fileExtension, const std::string& path = "");
85
86
87 private:
88
89         /**
90         * Loads all the HRTFs in the directory and subdirectories.
91         * \param hrtfs An HRTF object in which to load the HRTFs.
92         * \param ear 'L' to load left ear HRTFs, 'R' to load right ear HRTFs.
93         * \param fileExtension The extension of the HRTF files.
94         * \param path The path to the folder containing the HRTFs.
95         */
96         static void loadHRTFs(std::shared_ptr<HRTF>hrtfs, char ear, const std::string& fileExtension, const std::string& path = "");
97 };
98
99 AUD_NAMESPACE_END