Panda3D
Loading...
Searching...
No Matches
milesAudioSound.cxx
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file milesAudioSound.cxx
10 * @author drose
11 * @date 2007-07-30
12 */
13
14#include "milesAudioSound.h"
15#ifdef HAVE_RAD_MSS //[
16
17#include "milesAudioManager.h"
18
19using std::string;
20
21TypeHandle MilesAudioSound::_type_handle;
22
23#undef miles_audio_debug
24
25#ifndef NDEBUG //[
26#define miles_audio_debug(x) \
27 audio_debug("MilesAudioSound \""<<get_name()<<"\" "<< x )
28#else //][
29#define miles_audio_debug(x) ((void)0)
30#endif //]
31
32/**
33 *
34 */
35MilesAudioSound::
36MilesAudioSound(MilesAudioManager *manager,
37 const string &file_name) :
38 _manager(manager),
39 _file_name(file_name),
40 _volume(1.0f), _balance(0), _play_rate(1.0f),
41 _loop_count(1),
42 _active(true),
43 _paused(false),
44 _start_time(0.0f),
45 _got_start_time(false)
46{
47 nassertv(!file_name.empty());
48}
49
50/**
51 *
52 */
53void MilesAudioSound::
54set_loop(bool loop) {
55 // loop count of 0 means always loop
56 set_loop_count((loop)?0:1);
57}
58
59/**
60 *
61 */
62bool MilesAudioSound::
63get_loop() const {
64 return (_loop_count == 0);
65}
66
67/**
68 *
69 */
70void MilesAudioSound::
71set_loop_count(unsigned long loop_count) {
72 if (_loop_count != loop_count) {
73 _loop_count = loop_count;
74 if (status() == PLAYING) {
75 // hack: For now, the loop count is picked up when the sound starts
76 // playing. There may be a way to change the loop count of a playing
77 // sound, but I'm going to focus on other things. If you would like to
78 // change the need to stop and start the sound, feel free. Or, maybe
79 // I'll spend time on it in the future. Please set the loop option
80 // before starting the sound.
81 play();
82 }
83 }
84}
85
86/**
87 *
88 */
89unsigned long MilesAudioSound::
90get_loop_count() const {
91 return _loop_count;
92}
93
94/**
95 *
96 */
97PN_stdfloat MilesAudioSound::
98get_volume() const {
99 return _volume;
100}
101
102/**
103 *
104 */
105PN_stdfloat MilesAudioSound::
106get_balance() const {
107 return _balance;
108}
109
110/**
111 *
112 */
113PN_stdfloat MilesAudioSound::
114get_play_rate() const {
115 return _play_rate;
116}
117
118/**
119 *
120 */
121void MilesAudioSound::
122set_time(PN_stdfloat time) {
123 miles_audio_debug("set_time(time="<<time<<")");
124
125 // Mark this position for the next play().
126 _start_time = time;
127 _got_start_time = true;
128}
129
130/**
131 *
132 */
133void MilesAudioSound::
134set_active(bool active) {
135 if (_manager == nullptr) {
136 return;
137 }
138
139 miles_audio_debug("set_active(active="<<active<<")");
140 if (_active != active) {
141 _active = active;
142 if (_active) {
143 // ...activate the sound.
144 if (_paused && _loop_count==0) {
145 // ...this sound was looping when it was paused.
146 _paused = false;
147 play();
148 }
149
150 } else {
151 // ...deactivate the sound.
152 if (status() == PLAYING) {
153 if (_loop_count == 0) {
154 // ...we're pausing a looping sound.
155 _paused = true;
156 }
157 _start_time = get_time();
158 _got_start_time = true;
159 stop();
160 }
161 }
162 }
163}
164
165/**
166 *
167 */
168bool MilesAudioSound::
169get_active() const {
170 return _active;
171}
172
173/**
174 * This is no longer implemented.
175 */
176void MilesAudioSound::
177set_finished_event(const string &event) {
178 _finished_event = event;
179}
180
181/**
182 * This is no longer implemented.
183 */
184const string &MilesAudioSound::
185get_finished_event() const {
186 return _finished_event;
187}
188
189/**
190 *
191 */
192const string &MilesAudioSound::
193get_name() const {
194 return _file_name;
195}
196
197/**
198 * Stops the sound from playing and releases any associated resources, in
199 * preparation for releasing the sound or shutting down the sound system.
200 */
201void MilesAudioSound::
202cleanup() {
203}
204
205#endif //]
TypeHandle is the identifier used to differentiate C++ class types.
Definition typeHandle.h:81
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.