12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- # -*- coding: utf-8 -*-
- from __future__ import division
- from ..__load__ import *
- from .base import Base
- import subprocess
- class Sox(Base):
- def __init__(self, **kwargs):
- super(self.__class__, self).__init__(**kwargs)
- self.playing = False
- self.pipe = None
- self.delete = False
- self.volume = 1
- self.onCompleteds = []
- def run(self):
- cmd = ['play', '-v', str(self.volume), str(self.src)]
- cmd = ['aplay', str(self.src)]
- self.logger.info(self.mouth.log('播放语音 ' + ' '.join(cmd)))
- self.proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- self.playing = True
- self.proc.wait()
- self.playing = False
- if self.delete:
- File.remove(self.src)
- self.logger.info(self.mouth.log('播放完成'))
- for onCompleted in self.onCompleteds:
- if onCompleted:
- onCompleted()
- self.onCompleteds = []
- def play(self, src, delete=False, onCompleted=None, volume=1):
- self.src = src
- self.delete = delete
- self.onCompleteds.append(onCompleted)
- self.volume = volume
- self.start()
- def appendOnCompleted(self, onCompleted):
- if onCompleted:
- self.onCompleteds.append(onCompleted)
- def play_block(self):
- self.run()
- def stop(self):
- if self.proc:
- self.onCompleteds = []
- self.proc.terminate()
- if self.delete:
- File.remove(self.src)
- def is_playing(self):
- return self.playing
|