Mercurial > fife-parpg
changeset 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 | 96c4922c1c24 |
files | engine/python/fife/extensions/soundmanager.py |
diffstat | 1 files changed, 31 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/engine/python/fife/extensions/soundmanager.py Fri May 14 20:28:05 2010 +0000 +++ b/engine/python/fife/extensions/soundmanager.py Fri May 14 21:40:56 2010 +0000 @@ -192,6 +192,8 @@ self._fifesoundmanager = self._engine.getSoundManager() self._fifesoundmanager.init() + + self._fifesoundmanager.setListenerOrientation(0,1,0) # basic rolloff used for positional sounds self._rolloff = 1 @@ -272,13 +274,21 @@ if clip.looping: repeat = 0 - def real_callback(c, e, g): - c() - e.stop() - e.setGain(float(g)/255.0) - e.play() + def real_callback(clip): + clip.callback() + clip.fifeemitter.stop() + clip.fifeemitter.setGain(float(clip.gain)/255.0) + if self.listenerposition and clip.position: + # Use 1 as z coordinate, no need to specify it + clip.fifeemitter.setPosition(clip.position[0], clip.position[1], 1) + clip.fifeemitter.setRolloff(clip.rolloff) + elif self.listenerposition and not clip.position: + clip.fifeemitter.setPosition(self._listenerposition[0], self._listenerposition[1], 1) + clip.fifeemitter.setRolloff(self.rolloff) + + clip.fifeemitter.play() - clip.callback = cbwa(real_callback, clip.callback, clip.fifeemitter, clip.gain) + clip.callback = cbwa(real_callback, clip) else: repeat = 1 @@ -287,12 +297,20 @@ else: if clip.looping: - def real_callback(e, g): - e.stop() - e.setGain(float(g)/255.0) - e.play() + def real_callback(clip): + clip.fifeemitter.stop() + clip.fifeemitter.setGain(float(clip.gain)/255.0) + if self.listenerposition and clip.position: + # Use 1 as z coordinate, no need to specify it + clip.fifeemitter.setPosition(clip.position[0], clip.position[1], 1) + clip.fifeemitter.setRolloff(clip.rolloff) + elif self.listenerposition and not clip.position: + clip.fifeemitter.setPosition(self._listenerposition[0], self._listenerposition[1], 1) + clip.fifeemitter.setRolloff(self.rolloff) + + clip.fifeemitter.play() - clip.callback = cbwa(real_callback, clip.fifeemitter, clip.gain) + clip.callback = cbwa(real_callback, clip) clip.timer = fife_timer.Timer(clip.duration, clip.callback, 0) clip.fifeemitter.setGain(float(clip.gain)/255.0) @@ -302,7 +320,7 @@ clip.fifeemitter.setPosition(clip.position[0], clip.position[1], 1) clip.fifeemitter.setRolloff(clip.rolloff) elif self.listenerposition and not clip.position: - clip.fifeemitter.setPosition(self.listenerposition[0], self.listenerposition[1], 1) + clip.fifeemitter.setPosition(self._listenerposition[0], self._listenerposition[1], 1) clip.fifeemitter.setRolloff(self.rolloff) clip.fifeemitter.play() @@ -358,7 +376,7 @@ def _setListenerPosition(self, position): self._listenerposition = position - self._fifesoundmanager.setListenerPosition(self._listenerposition[0], self._listenerposition[1], 1) + self._fifesoundmanager.setListenerPosition(self._listenerposition[0], self._listenerposition[1], 10) rolloff = property(_getRolloff, _setRolloff) listenerposition = property(_getListenerPosition, _setListenerPosition)