diff options
| author | schneefux <schneefux+commit@schneefux.xyz> | 2014-09-19 16:22:27 +0200 |
|---|---|---|
| committer | schneefux <schneefux+commit@schneefux.xyz> | 2014-09-26 13:34:47 +0200 |
| commit | 3970fabe28e60d5e944de9cdeffe5ff6ab0e55ea (patch) | |
| tree | f64f6c2d46968322d4f82d6a6d2be7f7fc9576a1 | |
| parent | d71c77460f8eb2564189b4695f4d1187beb8a8b2 (diff) | |
| download | jasper-client-3970fabe28e60d5e944de9cdeffe5ff6ab0e55ea.tar.gz jasper-client-3970fabe28e60d5e944de9cdeffe5ff6ab0e55ea.zip | |
Change AbstractMP3Speaker.play_mp3() to use AbstractSpeaker.play()
| -rw-r--r-- | client/speaker.py | 30 |
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): """ |
