sox.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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.DEVNULL, stderr=subprocess.DEVNULL)
  18. print(cmd)
  19. return
  20. self.proc = subprocess.Popen(cmd)
  21. self.playing = True
  22. self.proc.wait()
  23. self.playing = False
  24. if self.delete:
  25. File.remove(self.src)
  26. self.logger.debug('play completed')
  27. for onCompleted in self.onCompleteds:
  28. if onCompleted:
  29. onCompleted()
  30. self.onCompleteds = []
  31. def play(self, src, delete=False, onCompleted=None, volume=1):
  32. self.src = src
  33. self.delete = delete
  34. self.onCompleteds.append(onCompleted)
  35. self.volume = volume
  36. self.start()
  37. def appendOnCompleted(self, onCompleted):
  38. if onCompleted:
  39. self.onCompleteds.append(onCompleted)
  40. def play_block(self):
  41. self.run()
  42. def stop(self):
  43. if self.proc:
  44. self.onCompleteds = []
  45. self.proc.terminate()
  46. if self.delete:
  47. File.remove(self.src)
  48. def is_playing(self):
  49. return self.playing