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']