human/tts/tts_audio_handle.py
2024-10-11 20:09:54 +08:00

73 lines
2.0 KiB
Python

#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