summaryrefslogtreecommitdiff
path: root/client/speaker.py
diff options
context:
space:
mode:
Diffstat (limited to 'client/speaker.py')
-rw-r--r--client/speaker.py30
1 files changed, 13 insertions, 17 deletions
diff --git a/client/speaker.py b/client/speaker.py
index 54a039f..d89313f 100644
--- a/client/speaker.py
+++ b/client/speaker.py
@@ -54,23 +54,19 @@ class AbstractMp3Speaker(AbstractSpeaker):
def is_available(cls):
return (super(AbstractMp3Speaker, cls).is_available() and 'mad' in sys.modules.keys())
- def play_mp3(cls, filename):
- f = mad.MadFile(filename)
- p = pyaudio.PyAudio()
- # open stream
- stream = p.open(format=p.get_format_from_width(pyaudio.paInt32),
- channels=2,
- rate=f.samplerate(),
- output=True)
-
- data = f.read()
- while data:
- stream.write(data)
- data = f.read()
-
- stream.stop_stream()
- stream.close()
- p.terminate()
+ def play_mp3(self, filename):
+ mf = mad.MadFile(filename)
+ with tempfile.NamedTemporaryFile(suffix='.wav', delete=False) as f:
+ wav = wave.open(f, mode='wb')
+ wav.setframerate(mf.samplerate())
+ wav.setnchannels(1 if mf.mode() == mad.MODE_SINGLE_CHANNEL else 2)
+ wav.setsampwidth(pyaudio.get_sample_size(pyaudio.paInt32))
+ frame = mf.read()
+ while frame is not None:
+ wav.writeframes(frame)
+ frame = mf.read()
+ wav.close()
+ self.play(f.name)
class eSpeakSpeaker(AbstractSpeaker):
"""