tts-api / app /config.py
gavanduffy
Add custom voice presets (F6, F7, M6) from JSON style embeddings
f6723e7
Raw
History Blame Contribute Delete
3.3 kB
import os
import sys
from pathlib import Path
def get_base_path() -> Path:
if getattr(sys, 'frozen', False):
if hasattr(sys, '_MEIPASS'):
return Path(sys._MEIPASS)
else:
return Path(sys.executable).parent
return Path(__file__).parent.parent
class Config:
BASE_PATH = get_base_path()
IS_FROZEN = getattr(sys, 'frozen', False)
# Server settings
HOST = os.environ.get('SUPERTONIC3_HOST', '0.0.0.0')
PORT = int(os.environ.get('SUPERTONIC3_PORT', '7860'))
# Model settings
LANGUAGE = os.environ.get('SUPERTONIC3_LANGUAGE', None)
AUTO_DOWNLOAD = os.environ.get('SUPERTONIC3_AUTO_DOWNLOAD', 'true').lower() == 'true'
# Sample rate (supertonic3 outputs 44100 Hz)
SAMPLE_RATE = 44100
# SuperTonic3 supported languages
SUPPORTED_LANGUAGES = [
'afrikaans', 'arabic', 'bengali', 'bulgarian', 'czech', 'danish',
'german', 'greek', 'english', 'spanish', 'finnish', 'french',
'hindi', 'hungarian', 'indonesian', 'italian', 'japanese',
'korean', 'malayalam', 'dutch', 'polish', 'portuguese',
'romanian', 'russian', 'swahili', 'swedish', 'tamil', 'telugu',
'thai', 'turkish', 'ukrainian', 'urdu', 'vietnamese',
'chinese',
]
# Voice directory for custom voice samples
VOICES_DIR = os.environ.get('SUPERTONIC3_VOICES_DIR', None)
# Voice presets directory (JSON style embeddings, tracked in git)
VOICE_PRESETS_DIR = os.environ.get(
'SUPERTONIC3_VOICE_PRESETS_DIR',
str(BASE_PATH / 'voice_presets'),
)
DEFAULT_VOICE = os.environ.get('SUPERTONIC3_DEFAULT_VOICE', 'M1')
# Built-in voice names (M1-M5 = male, F1-F5 = female)
BUILTIN_VOICES = ['M1', 'M2', 'M3', 'M4', 'M5', 'F1', 'F2', 'F3', 'F4', 'F5']
# Supported extensions for custom voice samples
VOICE_EXTENSIONS = ('.wav', '.mp3', '.flac')
# Supported extensions for voice preset files (JSON style embeddings)
VOICE_PRESET_EXTENSIONS = ('.json',)
# Streaming default
STREAM_DEFAULT = os.environ.get('SUPERTONIC3_STREAM_DEFAULT', 'false').lower() == 'true'
# Text preprocessing default
TEXT_PREPROCESS_DEFAULT = (
os.environ.get('SUPERTONIC3_TEXT_PREPROCESS_DEFAULT', 'false').lower() == 'true'
)
# Docker detection
@staticmethod
def _is_docker() -> bool:
if os.path.exists('/.dockerenv'):
return True
try:
with open('/proc/1/cgroup') as f:
return any('docker' in line or 'containerd' in line for line in f)
except (FileNotFoundError, PermissionError):
return False
IS_DOCKER = _is_docker.__func__()
# Logging
LOG_LEVEL = os.environ.get('SUPERTONIC3_LOG_LEVEL', 'INFO')
LOG_DIR = os.environ.get('SUPERTONIC3_LOG_DIR', str(BASE_PATH / 'logs'))
LOG_FILE = os.environ.get('SUPERTONIC3_LOG_FILE', 'supertonic3.log')
LOG_MAX_BYTES = int(os.environ.get('SUPERTONIC3_LOG_MAX_BYTES', str(10 * 1024 * 1024)))
LOG_BACKUP_COUNT = int(os.environ.get('SUPERTONIC3_LOG_BACKUP_COUNT', '5'))
@classmethod
def get_template_folder(cls) -> str:
return str(cls.BASE_PATH / 'templates')
@classmethod
def get_static_folder(cls) -> str:
return str(cls.BASE_PATH / 'static')