Welcome to mirror list, hosted at ThFree Co, Russian Federation.

SND_SoundObject.h « SoundSystem « intern - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 4c47cdc27b564ac120bbeaf609d824043077f45e (plain)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/*
 * SND_SoundObject.h
 *
 * Implementation of the abstract sound object
 *
 * $Id$
 *
 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version. The Blender
 * Foundation also sells licenses for use in proprietary software under
 * the Blender License.  See http://www.blender.org/BL/ for information
 * about this.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
 * All rights reserved.
 *
 * The Original Code is: all of this file.
 *
 * Contributor(s): none yet.
 *
 * ***** END GPL/BL DUAL LICENSE BLOCK *****
 */

#ifndef __SND_SOUNDOBJECT_H
#define __SND_SOUNDOBJECT_H

#include "SND_Object.h"
#include "STR_String.h"


/**
 *  SND_SoundObject is a class for api independent sounddata storage conected to an actuator
 */

class SND_SoundObject : public SND_Object
{
private:
	STR_String			m_samplename;		/* name of the sample */
	STR_String			m_objectname;		/* name of the object */
	unsigned int		m_buffer;
	
	bool				m_active;			/* is the object active or not? */
	int					m_id;
	MT_Scalar			m_lifespan;			/* the lifespan of the sound seconds */
	MT_Scalar			m_timestamp;

	MT_Scalar			m_length;			/* length of the sample in seconds */

	MT_Scalar			m_gain;				/* the gain of the object */
	MT_Scalar			m_rollofffactor;	/* the scaling factor to increase or decrease the range
												of a source by decreasing or increasing the
												attenuation, respectively */
	MT_Scalar			m_referencedistance;/* the distance at which the listener will experience
												gain */
	MT_Scalar			m_mingain;			/* indicates the minimal gain which is always guaranteed
												for this source */
	MT_Scalar			m_maxgain;			/* indicates the maximal gain which is always guaranteed
												for this source */

	MT_Scalar			m_pitch;			/* the pitch of the object */
	MT_Vector3			m_position;			/* position; left/right, up/down, in/out */
	MT_Vector3			m_velocity;			/* velocity of the object */
	MT_Matrix3x3		m_orientation;		/* orientation of the object */
	unsigned int		m_loopmode;			/* loop normal or bidirectional? */
	unsigned int		m_loopstart;		/* start of looppoint in samples! */
	unsigned int		m_loopend;			/* end of looppoint in samples! */
	bool				m_is3d;				/* is the object 3D or 2D? */
	int					m_playstate;		/* flag for current state of object */
	bool				m_modified;
	unsigned int		m_running;
	bool				m_highpriority;		/* may the sound be ditched when we run out of voices? */

public:

	SND_SoundObject();
	~SND_SoundObject();

	void SetBuffer(unsigned int buffer);
	void SetActive(bool active);
	
	void StartSound();
	void StopSound();
	void PauseSound();
	void DeleteWhenFinished();

	void SetObjectName(STR_String objectname);
	void SetSampleName(STR_String samplename);
	void SetLength(MT_Scalar length);
	
	void SetPitch(MT_Scalar pitch);
	void SetGain(MT_Scalar gain);
	void SetMinGain(MT_Scalar mingain);
	void SetMaxGain(MT_Scalar maxgain);
	void SetRollOffFactor(MT_Scalar rollofffactor);
	void SetReferenceDistance(MT_Scalar distance);
	void SetPosition(const MT_Vector3& pos);
	void SetVelocity(const MT_Vector3& vel);
	void SetOrientation(const MT_Matrix3x3& orient);
	void SetLoopMode(unsigned int loopmode);
	void SetLoopStart(unsigned int loopstart);
	void SetLoopEnd(unsigned int loopend);
	void Set3D(bool threedee);
	void SetPlaystate(int playstate);
	void SetHighPriority(bool priority);

	void SetId(int id);
	void SetLifeSpan();
	void SetTimeStamp(MT_Scalar timestamp);

	void SetModified(bool modified);

	bool IsLifeSpanOver(MT_Scalar curtime) const;
	bool IsActive() const;
	bool IsModified() const;
	bool IsHighPriority() const;

	void InitRunning();
	bool IsRunning() const;
	void AddRunning();

	int					GetId() const;
	MT_Scalar			GetLifeSpan() const;
	MT_Scalar			GetTimestamp() const;

	unsigned int		GetBuffer();
	const STR_String&	GetSampleName();
	const STR_String&	GetObjectName();

	MT_Scalar			GetLength() const;
	MT_Scalar			GetGain() const;
	MT_Scalar			GetPitch() const;

	MT_Scalar			GetMinGain() const;
	MT_Scalar			GetMaxGain() const;
	MT_Scalar			GetRollOffFactor() const;
	MT_Scalar			GetReferenceDistance() const;
	
	MT_Vector3			GetPosition() const;
	MT_Vector3			GetVelocity() const;
	MT_Matrix3x3		GetOrientation() const;
	unsigned int		GetLoopMode() const;
	unsigned int		GetLoopStart() const;
	unsigned int		GetLoopEnd() const;
	bool				Is3D() const;
	int					GetPlaystate() const;
	
};
#endif //__SND_SOUNDOBJECT_H