Mercurial > fife-parpg
comparison engine/python/fife/extensions/soundmanager.py @ 501:6614a5446352
Positional sounds now work. There are some odd things happening when the sound does not have positional data and I assign the listeners position to the emitters position. There is a little more work required here.
author | prock@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Fri, 14 May 2010 21:40:56 +0000 |
parents | 5e6ff32a46fb |
children | 872a7a94563e |
comparison
equal
deleted
inserted
replaced
500:5e6ff32a46fb | 501:6614a5446352 |
---|---|
190 | 190 |
191 self._engine = engine | 191 self._engine = engine |
192 | 192 |
193 self._fifesoundmanager = self._engine.getSoundManager() | 193 self._fifesoundmanager = self._engine.getSoundManager() |
194 self._fifesoundmanager.init() | 194 self._fifesoundmanager.init() |
195 | |
196 self._fifesoundmanager.setListenerOrientation(0,1,0) | |
195 | 197 |
196 # basic rolloff used for positional sounds | 198 # basic rolloff used for positional sounds |
197 self._rolloff = 1 | 199 self._rolloff = 1 |
198 | 200 |
199 #A dict of fife emitters | 201 #A dict of fife emitters |
270 clip.timer.stop() | 272 clip.timer.stop() |
271 timer = None | 273 timer = None |
272 | 274 |
273 if clip.looping: | 275 if clip.looping: |
274 repeat = 0 | 276 repeat = 0 |
275 def real_callback(c, e, g): | 277 def real_callback(clip): |
276 c() | 278 clip.callback() |
277 e.stop() | 279 clip.fifeemitter.stop() |
278 e.setGain(float(g)/255.0) | 280 clip.fifeemitter.setGain(float(clip.gain)/255.0) |
279 e.play() | 281 if self.listenerposition and clip.position: |
280 | 282 # Use 1 as z coordinate, no need to specify it |
281 clip.callback = cbwa(real_callback, clip.callback, clip.fifeemitter, clip.gain) | 283 clip.fifeemitter.setPosition(clip.position[0], clip.position[1], 1) |
284 clip.fifeemitter.setRolloff(clip.rolloff) | |
285 elif self.listenerposition and not clip.position: | |
286 clip.fifeemitter.setPosition(self._listenerposition[0], self._listenerposition[1], 1) | |
287 clip.fifeemitter.setRolloff(self.rolloff) | |
288 | |
289 clip.fifeemitter.play() | |
290 | |
291 clip.callback = cbwa(real_callback, clip) | |
282 | 292 |
283 else: | 293 else: |
284 repeat = 1 | 294 repeat = 1 |
285 | 295 |
286 clip.timer = fife_timer.Timer(clip.duration, clip.callback, repeat) | 296 clip.timer = fife_timer.Timer(clip.duration, clip.callback, repeat) |
287 | 297 |
288 else: | 298 else: |
289 if clip.looping: | 299 if clip.looping: |
290 def real_callback(e, g): | 300 def real_callback(clip): |
291 e.stop() | 301 clip.fifeemitter.stop() |
292 e.setGain(float(g)/255.0) | 302 clip.fifeemitter.setGain(float(clip.gain)/255.0) |
293 e.play() | 303 if self.listenerposition and clip.position: |
294 | 304 # Use 1 as z coordinate, no need to specify it |
295 clip.callback = cbwa(real_callback, clip.fifeemitter, clip.gain) | 305 clip.fifeemitter.setPosition(clip.position[0], clip.position[1], 1) |
306 clip.fifeemitter.setRolloff(clip.rolloff) | |
307 elif self.listenerposition and not clip.position: | |
308 clip.fifeemitter.setPosition(self._listenerposition[0], self._listenerposition[1], 1) | |
309 clip.fifeemitter.setRolloff(self.rolloff) | |
310 | |
311 clip.fifeemitter.play() | |
312 | |
313 clip.callback = cbwa(real_callback, clip) | |
296 clip.timer = fife_timer.Timer(clip.duration, clip.callback, 0) | 314 clip.timer = fife_timer.Timer(clip.duration, clip.callback, 0) |
297 | 315 |
298 clip.fifeemitter.setGain(float(clip.gain)/255.0) | 316 clip.fifeemitter.setGain(float(clip.gain)/255.0) |
299 | 317 |
300 if self.listenerposition and clip.position: | 318 if self.listenerposition and clip.position: |
301 # Use 1 as z coordinate, no need to specify it | 319 # Use 1 as z coordinate, no need to specify it |
302 clip.fifeemitter.setPosition(clip.position[0], clip.position[1], 1) | 320 clip.fifeemitter.setPosition(clip.position[0], clip.position[1], 1) |
303 clip.fifeemitter.setRolloff(clip.rolloff) | 321 clip.fifeemitter.setRolloff(clip.rolloff) |
304 elif self.listenerposition and not clip.position: | 322 elif self.listenerposition and not clip.position: |
305 clip.fifeemitter.setPosition(self.listenerposition[0], self.listenerposition[1], 1) | 323 clip.fifeemitter.setPosition(self._listenerposition[0], self._listenerposition[1], 1) |
306 clip.fifeemitter.setRolloff(self.rolloff) | 324 clip.fifeemitter.setRolloff(self.rolloff) |
307 | 325 |
308 clip.fifeemitter.play() | 326 clip.fifeemitter.play() |
309 if clip.timer: | 327 if clip.timer: |
310 clip.timer.start() | 328 clip.timer.start() |
357 def _getListenerPosition(self): | 375 def _getListenerPosition(self): |
358 return self._listenerposition | 376 return self._listenerposition |
359 | 377 |
360 def _setListenerPosition(self, position): | 378 def _setListenerPosition(self, position): |
361 self._listenerposition = position | 379 self._listenerposition = position |
362 self._fifesoundmanager.setListenerPosition(self._listenerposition[0], self._listenerposition[1], 1) | 380 self._fifesoundmanager.setListenerPosition(self._listenerposition[0], self._listenerposition[1], 10) |
363 | 381 |
364 rolloff = property(_getRolloff, _setRolloff) | 382 rolloff = property(_getRolloff, _setRolloff) |
365 listenerposition = property(_getListenerPosition, _setListenerPosition) | 383 listenerposition = property(_getListenerPosition, _setListenerPosition) |
366 | 384 |
367 __all__ = ['SoundEmitter','SoundManager'] | 385 __all__ = ['SoundEmitter','SoundManager'] |