Skip to content

Commit eafe525

Browse files
committed
rolled back the deletion of the Phonon backend (#6)
1 parent bd0217c commit eafe525

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

ldoce5viewer/qtgui/utils/soundplayer.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@
3737
mp3play = None
3838

3939

40+
# Qt-Phonon
41+
try:
42+
from PyQt4.phonon import Phonon
43+
except ImportError:
44+
Phonon = None
45+
46+
4047
class Backend(object):
4148
__metaclass__ = abc.ABCMeta
4249
def __init__(self, parent, temp_dir):
@@ -148,6 +155,46 @@ def close(self):
148155
pass
149156

150157

158+
class PhononBackend(Backend):
159+
def __init__(self, parent, temp_dir):
160+
self._player = Phonon.createPlayer(Phonon.NoCategory)
161+
self._player.finished.connect(self._onFinished)
162+
self._alive = set()
163+
164+
def _onFinished(self):
165+
self._clean_tmp()
166+
167+
def _play(self):
168+
source = Phonon.MediaSource(self._path)
169+
self._player.setCurrentSource(source)
170+
self._player.play()
171+
172+
def play(self, data):
173+
self._player.stop()
174+
self._clean_tmp()
175+
with NamedTemporaryFile(mode='w+b', prefix='',
176+
suffix='.tmp.mp3', delete=False) as f:
177+
f.write(data)
178+
self._path = f.name
179+
self._alive.add(f.name)
180+
QTimer.singleShot(0, self._play)
181+
182+
def _clean_tmp(self):
183+
removed = []
184+
for path in self._alive:
185+
try:
186+
os.unlnk(path)
187+
except:
188+
pass
189+
else:
190+
removed.append(path)
191+
self._alive.difference_update(removed)
192+
193+
def close(self):
194+
self._player.stop()
195+
self._clean_tmp()
196+
197+
151198
class AppKitBackend(Backend):
152199
def __init__(self, parent, temp_dir):
153200
self._sound = None
@@ -173,6 +220,8 @@ def create_soundplayer(parent, temp_dir):
173220
backends.append(AppKitBackend)
174221
if mp3play:
175222
backends.append(WinMCIBackend)
223+
if Phonon:
224+
backends.append(PhononBackend)
176225
if gst:
177226
backends.append(GstreamerBackend)
178227
backends.append(NullBackend)

0 commit comments

Comments
 (0)