sox.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # -*- coding: utf-8 -*-
  2. from __future__ import division
  3. from ..__load__ import *
  4. from .base import Base
  5. import subprocess
  6. class Sox(Base):
  7. def __init__(self, **kwargs):
  8. super(self.__class__, self).__init__(**kwargs)
  9. self.playing = False
  10. self.pipe = None
  11. self.delete = False
  12. self.volume = 1
  13. self.onCompleteds = []
  14. def run(self):
  15. cmd = ['play', '-v', str(self.volume), str(self.src)]
  16. self.logger.debug('Executing %s', ' '.join(cmd))
  17. self.proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
  18. #print(cmd)
  19. #return
  20. self.playing = True
  21. self.proc.wait()
  22. self.playing = False
  23. if self.delete:
  24. File.remove(self.src)
  25. self.logger.debug('play completed')
  26. for onCompleted in self.onCompleteds:
  27. if onCompleted:
  28. onCompleted()
  29. self.onCompleteds = []
  30. def play(self, src, delete=False, onCompleted=None, volume=1):
  31. self.src = src
  32. self.delete = delete
  33. self.onCompleteds.append(onCompleted)
  34. self.volume = volume
  35. self.start()
  36. def appendOnCompleted(self, onCompleted):
  37. if onCompleted:
  38. self.onCompleteds.append(onCompleted)
  39. def play_block(self):
  40. self.run()
  41. def stop(self):
  42. if self.proc:
  43. self.onCompleteds = []
  44. self.proc.terminate()
  45. if self.delete:
  46. File.remove(self.src)
  47. def is_playing(self):
  48. return self.playing