File: SoundSource.h

package info (click to toggle)
spring 0.81.2.1%2Bdfsg1-6
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 28,496 kB
  • ctags: 37,096
  • sloc: cpp: 238,659; ansic: 13,784; java: 12,175; awk: 3,428; python: 1,159; xml: 738; perl: 405; sh: 297; makefile: 267; pascal: 228; objc: 192
file content (68 lines) | stat: -rw-r--r-- 1,436 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#ifndef SOUNDSOURCE_H
#define SOUNDSOURCE_H

#include <string>

#include <al.h>
#include <boost/noncopyable.hpp>
#include <boost/thread/mutex.hpp>

class float3;
class SoundItem;
class COggStream;

/**
 * @brief One soundsource wich can play some sounds
 * 
 * Construct some of them, and they can play SoundItems positioned anywhere in 3D-space for you.
 */
class SoundSource : boost::noncopyable
{
public:
	/// is ready after this
	SoundSource();
	/// will stop during deletion
	~SoundSource();

	void Update();

	int GetCurrentPriority() const;
	bool IsPlaying() const;
	void Stop();

	/// will stop a currently playing sound, if any
	void Play(SoundItem* buffer, const float3& pos, float3 velocity, float volume, bool relative = false);
	void PlayStream(const std::string& stream, float volume, bool enqueue);
	void StreamStop();

	void StreamPause();
	float GetStreamTime();
	float GetStreamPlayTime();

	static void SetPitch(float newPitch);
	void SetVolume(float newVol);
	bool IsValid() const
	{
		return (id != 0);
	};

	static void SetHeightRolloffModifer(float mod)
	{
		heightAdjustedRolloffModifier = mod > 0.0f ? mod : 0.0f;
	};

private:
	/// pitch shared by all sources
	static float globalPitch;
	ALuint id;
	SoundItem* curPlaying;

	struct StreamControl;
	StreamControl* curStream;
	boost::mutex streamMutex;
	unsigned loopStop;
	static float heightAdjustedRolloffModifier;
	static float referenceDistance;
};

#endif