#encoding = utf8 import os import shutil from abc import ABC, abstractmethod from audio import save_wav class TTSAudioHandle(ABC): def __init__(self): self._sample_rate = 16000 @property def sample_rate(self): return self._sample_rate @sample_rate.setter def sample_rate(self, value): self._sample_rate = value @abstractmethod def on_handle(self, stream): pass class TTSAudioSplitHandle(TTSAudioHandle): def __init__(self, human): super().__init__() self._human = human self.sample_rate = self._human.get_audio_sample_rate() self._chunk = self.sample_rate // self._human.get_fps() def on_handle(self, stream): stream_len = stream.shape[0] idx = 0 while stream_len >= self._chunk: self._human.put_audio_frame(stream[idx:idx + self._chunk]) stream_len -= self._chunk idx += self._chunk class TTSAudioSaveHandle(TTSAudioHandle): def __init__(self): super().__init__() self._count = 1 self._save_path_dir = '../temp/audio/' self._clean() def _clean(self): directory = self._save_path_dir if not os.path.exists(directory): print(f"The directory {directory} does not exist.") return for filename in os.listdir(directory): file_path = os.path.join(directory, filename) # 如果是文件,删除 if os.path.isfile(file_path): os.remove(file_path) print(f"Deleted file: {file_path}") # 如果是文件夹,递归删除所有文件夹中的内容 elif os.path.isdir(file_path): shutil.rmtree(file_path) print(f"Deleted directory and its contents: {file_path}") def on_handle(self, stream): file_name = self._save_path_dir + str(self._count) + '.wav' save_wav(stream, file_name, self.sample_rate) self._count = self._count + 1