File: soundbuffer_session.h

package info (click to toggle)
clanlib 1.0~svn3827-2
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 24,312 kB
  • ctags: 16,513
  • sloc: cpp: 101,606; xml: 6,410; makefile: 1,747; ansic: 463; perl: 424; php: 247; sh: 53
file content (182 lines) | stat: -rw-r--r-- 6,153 bytes parent folder | download | duplicates (7)
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*
**  ClanLib SDK
**  Copyright (c) 1997-2005 The ClanLib Team
**
**  This software is provided 'as-is', without any express or implied
**  warranty.  In no event will the authors be held liable for any damages
**  arising from the use of this software.
**
**  Permission is granted to anyone to use this software for any purpose,
**  including commercial applications, and to alter it and redistribute it
**  freely, subject to the following restrictions:
**
**  1. The origin of this software must not be misrepresented; you must not
**     claim that you wrote the original software. If you use this software
**     in a product, an acknowledgment in the product documentation would be
**     appreciated but is not required.
**  2. Altered source versions must be plainly marked as such, and must not be
**     misrepresented as being the original software.
**  3. This notice may not be removed or altered from any source distribution.
**
**  Note: Some of the libraries ClanLib may link to may have additional
**  requirements or restrictions.
**
**  File Author(s):
**
**    Magnus Norddahl
**    (if your name is missing here, please add it)
*/

//! clanSound="Audio Mixing"
//! header=sound.h

#ifndef header_soundbuffer_session
#define header_soundbuffer_session

#ifdef CL_API_DLL
#ifdef CL_SOUND_EXPORT
#define CL_API_SOUND __declspec(dllexport)
#else
#define CL_API_SOUND __declspec(dllimport)
#endif
#else
#define CL_API_SOUND
#endif

#if _MSC_VER > 1000
#pragma once
#endif

#include "../Core/System/mutexsharedptr.h"

class CL_SoundCard;
class CL_SoundFilter;
class CL_SoundBuffer;
class CL_SoundBuffer_Session_Generic;

class CL_API_SOUND CL_SoundBuffer_Session
//: CL_SoundBuffer_Session provides control over a playing soundeffect.
//- !group=Sound/Audio Mixing!
//- !header=sound.h!
//- <p>Whenever a soundbuffer is played, it returns a CL_SoundBuffer_Session
//- class, which can be used to control the sound (its volume, pitch, 
//- pan, position). It can also be used to retrigger the sound
//- or to stop it.</p>
{
//! Construction:
public:
	//: Creates a soundbuffer session.
	CL_SoundBuffer_Session();

	CL_SoundBuffer_Session(const CL_SoundBuffer_Session &copy);

	virtual ~CL_SoundBuffer_Session();

//! Attributes:
public:
	//: Returns the current sample position of the playback.
	int get_position() const;
	
	//: Returns the sample position relative to the full length.
	//- <p>The value returned will be between 0 and 1, where 0
	//- means the session is at the beginning, and 1
	//- means that the soundeffect has reached the end.</p>
	float get_position_relative() const;

	//: Returns the total length (in samples) of the sound buffer played.
	//- <p>Value returned will be -1 if the length is unknown (in
	//- case of non-static soundeffects like streamed sound)</p>
	int get_length() const;

	//: Returns the frequency of the session.
	int get_frequency() const;

	//: Returns the linear relative volume of the soundeffect.
	//- <p>0 means the soundeffect is muted, 1 means the soundeffect
	//- is playing at "max" volume.</p>
	float get_volume() const;
	
	//: Returns the current pan (in a measure from -1 -> 1).
	//- <p>-1 means the soundeffect is only playing in the left speaker, 
	//- and 1 means the soundeffect is only playing in the right speaker.</p>
	float get_pan() const;

	//: Returns the current speedfactor.
	float get_speedfactor() const;

	//: Returns true if the session is playing
	bool is_playing();

//! Operations:
public:
	//: Sets the session position to 'new_pos'.
	//- <p>The new position of the session.</p>
	//return: Returns true if operation completed succesfully.
	bool set_position(int new_pos);

	//: Sets the relative position of the session.
	//- <p>Value must be between 0 and 1, where 0 sets the 
	//- session to the beginning, and 1 sets it
	//- to the end of the sound buffer.</p>
	//param new_pos: New relative position.
	//return: Returns true if operation completed succesfully.
	bool set_position_relative(float new_pos);
	
	//: Sets the frequency of the session.
	//param new_freq: New frequency of session.
	//return: Returns true, if the operation completed succesfully.
	bool set_frequency(int new_freq);
	
	//: Sets the volume of the session in a relative measure (0->1)
	//- <p>A value of 0 will effectively mute the sound (although it will
	//- still be sampled), and a value of 1 will set the volume to "max".</p>
	//param new_volume: New volume of session. 
	//return: Returns true if the operation completed succesfully.
	void set_volume(float new_volume);

	//: Sets the panning of the session played in measures from -1 -> 1
	//- <p>Setting the pan with a value of -1 will pan the session to the
	//- extreme left (left speaker only), 1 will pan the session to the
	//- extreme right (right speaker only).</p>
	//param new_pan: New pan of the session played.
	//return: Returns true if the operation completed sucecsfully.
	void set_pan(float new_pan);

	//: Sets the speedfactor of the session.
	//param new_speedfactor: New speedfactor of session.
	void set_speedfactor(float new_speedfactor);

	//: Starts playback of the session.
	void play();

	//: Stops playback of the session.
	void stop();

	//: Rewinds the session so playback will start from the beginning.
	void rewind() { set_position(0); }

	//: Determines whether this session should loop
	//param loop: true if session should loop, false otherwise
	void set_looping(bool loop);
	
	//: Adds the sound filter to the session. See CL_SoundFilter for details.
	//param filter: Sound filter to pass sound through.
	//param delete_filter: If true, the filter will be deleted when removed or the session is destroyed
	void add_filter(CL_SoundFilter *filter, bool delete_filter = false);

	//: Remove the sound filter from the session. See CL_SoundFilter for details.
	void remove_filter(CL_SoundFilter *filter);

	//: Removes all filters from the session.
	void remove_all_filters();

//! Implementation:
private:
	CL_SoundBuffer_Session(const CL_MutexSharedPtr<CL_SoundBuffer_Session_Generic> &impl);

	CL_MutexSharedPtr<CL_SoundBuffer_Session_Generic> impl;

	friend class CL_SoundBuffer;
};

#endif