Refactor localization files and remove Aliyun references
This commit is contained in:
@@ -335,7 +335,7 @@ async def generate_ai_script(project_id: int, user: User, db: Session) -> None:
|
||||
crud.delete_audiobook_segments(db, project_id)
|
||||
crud.delete_audiobook_characters(db, project_id)
|
||||
|
||||
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
|
||||
backend_type = "local"
|
||||
|
||||
for char_data in characters_data:
|
||||
name = char_data.get("name", "旁白")
|
||||
@@ -449,7 +449,7 @@ async def generate_ai_script_chapters(project_id: int, user: User, db: Session)
|
||||
for c in db_characters
|
||||
]
|
||||
char_map = {c.name: c for c in db_characters}
|
||||
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
|
||||
backend_type = "local"
|
||||
|
||||
ps.append_line(key, f"[AI剧本] 开始生成 {num_chapters} 章大纲...\n")
|
||||
ps.append_line(key, "")
|
||||
@@ -618,7 +618,7 @@ async def continue_ai_script_chapters(project_id: int, additional_chapters: int,
|
||||
for c in db_characters
|
||||
]
|
||||
char_map = {c.name: c for c in db_characters}
|
||||
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
|
||||
backend_type = "local"
|
||||
|
||||
existing_chapters = crud.list_audiobook_chapters(db, project_id)
|
||||
existing_chapters_data = [
|
||||
@@ -839,7 +839,7 @@ async def analyze_project(project_id: int, user: User, db: Session, turbo: bool
|
||||
crud.delete_audiobook_segments(db, project_id)
|
||||
crud.delete_audiobook_characters(db, project_id)
|
||||
|
||||
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
|
||||
backend_type = "local"
|
||||
|
||||
for char_data in characters_data:
|
||||
name = char_data.get("name", "旁白")
|
||||
@@ -1437,7 +1437,7 @@ async def process_all(project_id: int, user: User, db: Session) -> None:
|
||||
logger.info(f"process_all: project={project_id} complete")
|
||||
|
||||
|
||||
async def generate_character_preview(project_id: int, char_id: int, user: User, db: Session) -> None:
|
||||
async def generate_character_preview(project_id: int, char_id: int, user: User, db: Session, force_recreate: bool = False) -> None:
|
||||
"""Generate a short audio preview for a specific character."""
|
||||
project = crud.get_audiobook_project(db, project_id, user.id)
|
||||
if not project:
|
||||
@@ -1470,21 +1470,11 @@ async def generate_character_preview(project_id: int, char_id: int, user: User,
|
||||
preview_text = f"你好,我是{preview_name}{preview_desc}"
|
||||
|
||||
from core.tts_service import TTSServiceFactory
|
||||
from core.security import decrypt_api_key
|
||||
|
||||
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
|
||||
user_api_key = None
|
||||
if backend_type == "aliyun":
|
||||
encrypted = crud.get_system_setting(db, "aliyun_api_key")
|
||||
if encrypted:
|
||||
user_api_key = decrypt_api_key(encrypted)
|
||||
elif user.aliyun_api_key:
|
||||
user_api_key = decrypt_api_key(user.aliyun_api_key)
|
||||
|
||||
backend = await TTSServiceFactory.get_backend(backend_type, user_api_key)
|
||||
backend = await TTSServiceFactory.get_backend()
|
||||
|
||||
try:
|
||||
if backend_type == "local" and not design.voice_cache_id:
|
||||
if not design.voice_cache_id:
|
||||
logger.info(f"Local voice cache missing for char {char_id}. Bootstrapping now...")
|
||||
from core.model_manager import ModelManager
|
||||
from core.cache_manager import VoiceCacheManager
|
||||
@@ -1524,73 +1514,46 @@ async def generate_character_preview(project_id: int, char_id: int, user: User,
|
||||
db.commit()
|
||||
logger.info(f"Bootstrapped local voice cache for preview: design_id={design.id}, cache_id={cache_id}")
|
||||
|
||||
if backend_type == "aliyun" and not design.aliyun_voice_id:
|
||||
from core.tts_service import AliyunTTSBackend
|
||||
if isinstance(backend, AliyunTTSBackend):
|
||||
try:
|
||||
voice_id = await backend._create_voice_design(
|
||||
instruct=_get_gendered_instruct(char.gender, design.instruct),
|
||||
preview_text=preview_text,
|
||||
)
|
||||
design.aliyun_voice_id = voice_id
|
||||
db.commit()
|
||||
logger.info(f"Bootstrapped aliyun voice_id for preview: design_id={design.id}, voice_id={voice_id}")
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to bootstrap aliyun voice_id for preview, falling back to instruct: {e}")
|
||||
|
||||
if backend_type == "aliyun":
|
||||
if design.aliyun_voice_id:
|
||||
audio_bytes, _ = await backend.generate_voice_design(
|
||||
{"text": preview_text, "language": "zh"},
|
||||
saved_voice_id=design.aliyun_voice_id
|
||||
)
|
||||
else:
|
||||
audio_bytes, _ = await backend.generate_voice_design({
|
||||
"text": preview_text,
|
||||
"language": "zh",
|
||||
"instruct": _get_gendered_instruct(char.gender, design.instruct),
|
||||
})
|
||||
else:
|
||||
if design.voice_cache_id:
|
||||
from core.cache_manager import VoiceCacheManager
|
||||
cache_manager = await VoiceCacheManager.get_instance()
|
||||
cache_result = await cache_manager.get_cache_by_id(design.voice_cache_id, db)
|
||||
x_vector = cache_result['data'] if cache_result else None
|
||||
if x_vector:
|
||||
audio_bytes, _ = await backend.generate_voice_clone(
|
||||
{
|
||||
"text": preview_text,
|
||||
"language": "Auto",
|
||||
"max_new_tokens": 512,
|
||||
"temperature": 0.3,
|
||||
"top_k": 10,
|
||||
"top_p": 0.9,
|
||||
"repetition_penalty": 1.05,
|
||||
},
|
||||
x_vector=x_vector
|
||||
)
|
||||
else:
|
||||
audio_bytes, _ = await backend.generate_voice_design({
|
||||
if design.voice_cache_id:
|
||||
from core.cache_manager import VoiceCacheManager
|
||||
cache_manager = await VoiceCacheManager.get_instance()
|
||||
cache_result = await cache_manager.get_cache_by_id(design.voice_cache_id, db)
|
||||
x_vector = cache_result['data'] if cache_result else None
|
||||
if x_vector:
|
||||
audio_bytes, _ = await backend.generate_voice_clone(
|
||||
{
|
||||
"text": preview_text,
|
||||
"language": "Auto",
|
||||
"instruct": _get_gendered_instruct(char.gender, design.instruct),
|
||||
"max_new_tokens": 512,
|
||||
"temperature": 0.3,
|
||||
"top_k": 10,
|
||||
"top_p": 0.9,
|
||||
"repetition_penalty": 1.05,
|
||||
})
|
||||
},
|
||||
x_vector=x_vector
|
||||
)
|
||||
else:
|
||||
audio_bytes, _ = await backend.generate_voice_design({
|
||||
"text": preview_text,
|
||||
"language": "Auto",
|
||||
"instruct": design.instruct,
|
||||
"instruct": _get_gendered_instruct(char.gender, design.instruct),
|
||||
"max_new_tokens": 512,
|
||||
"temperature": 0.3,
|
||||
"top_k": 10,
|
||||
"top_p": 0.9,
|
||||
"repetition_penalty": 1.05,
|
||||
})
|
||||
else:
|
||||
audio_bytes, _ = await backend.generate_voice_design({
|
||||
"text": preview_text,
|
||||
"language": "Auto",
|
||||
"instruct": design.instruct,
|
||||
"max_new_tokens": 512,
|
||||
"temperature": 0.3,
|
||||
"top_k": 10,
|
||||
"top_p": 0.9,
|
||||
"repetition_penalty": 1.05,
|
||||
})
|
||||
|
||||
with open(audio_path, "wb") as f:
|
||||
f.write(audio_bytes)
|
||||
@@ -1672,7 +1635,7 @@ async def generate_ai_script_nsfw(project_id: int, user: User, db: Session) -> N
|
||||
crud.delete_audiobook_segments(db, project_id)
|
||||
crud.delete_audiobook_characters(db, project_id)
|
||||
|
||||
backend_type = user.user_preferences.get("default_backend", "aliyun") if user.user_preferences else "aliyun"
|
||||
backend_type = "local"
|
||||
|
||||
for char_data in characters_data:
|
||||
name = char_data.get("name", "旁白")
|
||||
|
||||
Reference in New Issue
Block a user