From 38b211cdf85c13205dc9bc4830b53f8035cda1de Mon Sep 17 00:00:00 2001 From: Owen Song Date: Wed, 17 Jun 2026 23:54:33 +0000 Subject: [PATCH] Remove obsolete package file tiny_tts/__init__.py --- tiny_tts/__init__.py | 90 -------------------------------------------- 1 file changed, 90 deletions(-) delete mode 100644 tiny_tts/__init__.py diff --git a/tiny_tts/__init__.py b/tiny_tts/__init__.py deleted file mode 100644 index 7a86bad..0000000 --- a/tiny_tts/__init__.py +++ /dev/null @@ -1,90 +0,0 @@ -import os -import torch -import soundfile as sf -from tiny_tts.text.english import normalize_text, grapheme_to_phoneme -from tiny_tts.text import phonemes_to_ids -from tiny_tts.nn import commons -from tiny_tts.models.synthesizer import VoiceSynthesizer -from tiny_tts.text.symbols import symbols -from tiny_tts.utils.config import ( - SAMPLING_RATE, SEGMENT_FRAMES, ADD_BLANK, SPEC_CHANNELS, - N_SPEAKERS, SPK2ID, MODEL_PARAMS, -) -from tiny_tts.infer import load_engine - -class TinyTTS: - def __init__(self, checkpoint_path=None, device=None): - if device is None: - self.device = 'cuda' if torch.cuda.is_available() else 'cpu' - else: - self.device = device - - if checkpoint_path is None: - # Look for default checkpoint in pacakage - pkg_dir = os.path.dirname(os.path.abspath(__file__)) - default_ckpt = os.path.join(os.path.dirname(pkg_dir), "checkpoints", "G.pth") - # 2. Check HuggingFace Cache / Download - if not os.path.exists(default_ckpt): - try: - from huggingface_hub import hf_hub_download - print("Downloading/Loading checkpoint from Hugging Face Hub (backtracking/tiny-tts)...") - default_ckpt = hf_hub_download(repo_id="backtracking/tiny-tts", filename="G.pth") - except ImportError: - raise ImportError("huggingface_hub is required to auto-download the model. Run: pip install huggingface_hub") - except Exception as e: - raise ValueError(f"Failed to download checkpoint from Hugging Face: {e}") - - checkpoint_path = default_ckpt - - self.model = load_engine(checkpoint_path, self.device) - - def speak(self, text, output_path="output.wav", speaker="MALE", speed=1.0): - """Synthesize text to speech and save to output_path.""" - print(f"Synthesizing: {text}") - - # Normalize text - normalized = normalize_text(text) - - # Phonemize - phones, tones, word2ph = grapheme_to_phoneme(normalized) - - # Convert to sequence - phone_ids, tone_ids, lang_ids = phonemes_to_ids(phones, tones, "EN") - - # Add blanks - if ADD_BLANK: - phone_ids = commons.insert_blanks(phone_ids, 0) - tone_ids = commons.insert_blanks(tone_ids, 0) - lang_ids = commons.insert_blanks(lang_ids, 0) - - x = torch.LongTensor(phone_ids).unsqueeze(0).to(self.device) - x_lengths = torch.LongTensor([len(phone_ids)]).to(self.device) - tone = torch.LongTensor(tone_ids).unsqueeze(0).to(self.device) - language = torch.LongTensor(lang_ids).unsqueeze(0).to(self.device) - - # Speaker ID - if speaker not in SPK2ID: - print(f"Warning: Speaker '{speaker}' not found, using ID 0. Available: {list(SPK2ID.keys())}") - sid = torch.LongTensor([0]).to(self.device) - else: - sid = torch.LongTensor([SPK2ID[speaker]]).to(self.device) - - # BERT features (disabled - using zero tensors) - bert = torch.zeros(1024, len(phone_ids)).to(self.device).unsqueeze(0) - ja_bert = torch.zeros(768, len(phone_ids)).to(self.device).unsqueeze(0) - - # speed > 1.0 = faster speech, < 1.0 = slower speech - length_scale = 1.0 / speed - - with torch.no_grad(): - audio, *_ = self.model.infer( - x, x_lengths, sid, tone, language, bert, ja_bert, - noise_scale=0.667, - noise_scale_w=0.8, - length_scale=length_scale - ) - - audio_np = audio[0, 0].cpu().numpy() - sf.write(output_path, audio_np, SAMPLING_RATE) - print(f"Saved audio to {output_path}") - return audio_np