# -*- coding: utf-8 -*-
from __future__ import division
from ..__load__ import *
from .base import Base

class Wav(Base):

	def __init__(self, **kwargs):
		super(self.__class__, self).__init__(**kwargs)
		self.playing = False
		self.stop = False	

	def run(self):
		# play a voice
		CHUNK = 1024

		self.logger.info(self.mouth.log('播放语音 %s', self.src))
		f = wave.open(self.src, "rb")

		with no_alsa_error():
			audio = pyaudio.PyAudio()

		stream = audio.open(
			format=audio.get_format_from_width(f.getsampwidth()),
			channels=f.getnchannels(),
			rate=f.getframerate(),
			input=False,
			output=True)
		
		self.playing = True
		stream.start_stream()
		data = f.readframes(CHUNK)
		while data != '' and not self.stop:
			stream.write(data)
			data = f.readframes(CHUNK)
			print('data=="": {}, self.stop: {}'.format(data == '', self.stop))

		self.playing = False
		stream.stop_stream()
		stream.close()
		audio.terminate()
		if self.onCompleteds:
			for onCompleted in self.onCompleteds:
				if onCompleted:
					onCompleted()

	def play(self, src, onCompleted=None):
		self.src = src
		self.onCompleted = onCompleted
		self.start()

	def play_block(self):
		self.run()

	def stop(self):
		self.stop = True
		File.remove(self.src)

	def is_playing(self):
		return self.playing