1 /*
2  * Copyright 2011-2012 Arx Libertatis Team (see the AUTHORS file)
3  *
4  * This file is part of Arx Libertatis.
5  *
6  * Arx Libertatis is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Arx Libertatis is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Arx Libertatis.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 /* Based on:
20 ===========================================================================
21 ARX FATALIS GPL Source Code
22 Copyright (C) 1999-2010 Arkane Studios SA, a ZeniMax Media company.
23 
24 This file is part of the Arx Fatalis GPL Source Code ('Arx Fatalis Source Code').
25 
26 Arx Fatalis Source Code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public
27 License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
28 
29 Arx Fatalis Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
30 warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
31 
32 You should have received a copy of the GNU General Public License along with Arx Fatalis Source Code.  If not, see
33 <http://www.gnu.org/licenses/>.
34 
35 In addition, the Arx Fatalis Source Code is also subject to certain additional terms. You should have received a copy of these
36 additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Arx
37 Fatalis Source Code. If not, please request a copy in writing from Arkane Studios at the address below.
38 
39 If you have questions concerning this license or the applicable additional terms, you may contact in writing Arkane Studios, c/o
40 ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
41 ===========================================================================
42 */
43 
44 #ifndef ARX_AUDIO_AUDIOGLOBAL_H
45 #define ARX_AUDIO_AUDIOGLOBAL_H
46 
47 #include <stddef.h>
48 #include <cmath>
49 #include <algorithm>
50 
51 #include "audio/AudioTypes.h"
52 #include "audio/AudioResource.h"
53 
54 namespace res { class path; }
55 
56 namespace audio {
57 
58 class Backend;
59 class Ambiance;
60 class Environment;
61 class Sample;
62 class Mixer;
63 
64 const ChannelFlags FLAG_ANY_3D_FX = FLAG_POSITION | FLAG_VELOCITY | FLAG_DIRECTION |
65                                     FLAG_CONE | FLAG_FALLOFF | FLAG_REVERBERATION;
66 
67 // Audio device interface
68 extern Backend * backend;
69 
70 // Global settings
71 extern res::path sample_path;
72 extern res::path ambiance_path;
73 extern res::path environment_path;
74 extern size_t stream_limit_bytes;
75 extern size_t session_time;
76 
77 // Resources
78 extern ResourceList<Mixer> _mixer;
79 extern ResourceList<Sample> _sample;
80 extern ResourceList<Ambiance> _amb;
81 extern ResourceList<Environment> _env;
82 
83 //! Convert a value from time units to bytes
84 size_t unitsToBytes(size_t v, const PCMFormat & format, TimeUnit unit = UNIT_MS);
85 
86 //! Convert a value from bytes to time units
87 size_t bytesToUnits(size_t v, const PCMFormat & format, TimeUnit unit = UNIT_MS);
88 
LinearToLogVolume(float volume)89 inline float LinearToLogVolume(float volume) {
90 	return 0.2F * (float)log10(volume) + 1.0F;
91 }
92 
93 // TODO move to global math header
clamp(float v,float min,float max)94 inline float clamp(float v, float min, float max) {
95 	return std::min(max, std::max(min, v));
96 }
97 
98 } // namespace audio
99 
100 #endif // ARX_AUDIO_AUDIOGLOBAL_H
101