sox.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. print cmd
  18. return
  19. self.proc = subprocess.Popen(cmd)
  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