1 /*
2  Copyright (c) 2013 yvt
3 
4  This file is part of OpenSpades.
5 
6  OpenSpades 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  OpenSpades 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 OpenSpades.  If not, see <http://www.gnu.org/licenses/>.
18 
19  */
20 
21 #pragma once
22 
23 #include <Core/Math.h>
24 #include <Core/RefCountedObject.h>
25 
26 namespace spades {
27 	namespace client {
28 		class IAudioChunk;
29 		class GameMap;
30 
31 		struct AudioParam {
32 			float volume;
33 			float pitch;
34 			float referenceDistance;
35 
AudioParamAudioParam36 			AudioParam() {
37 				volume = 1.f;
38 				pitch = 1.f;
39 				referenceDistance = 1.f;
40 			}
41 		};
42 
43 		class IAudioDevice : public RefCountedObject {
44 		public:
~IAudioDevice()45 			virtual ~IAudioDevice() {}
46 
47 			virtual IAudioChunk *RegisterSound(const char *name) = 0;
48 
49 			virtual void SetGameMap(GameMap *) = 0;
50 
51 			virtual void Play(IAudioChunk *, const Vector3 &origin, const AudioParam &) = 0;
52 			virtual void PlayLocal(IAudioChunk *, const Vector3 &origin, const AudioParam &) = 0;
53 			virtual void PlayLocal(IAudioChunk *, const AudioParam &) = 0;
54 
55 			virtual void Respatialize(const Vector3 &eye, const Vector3 &front,
56 			                          const Vector3 &up) = 0;
57 		};
58 	}
59 }
60