127 lines
3.8 KiB
Python
127 lines
3.8 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
"""
|
||
播客角色管理系统
|
||
为播客中的各个角色进行初始化和管理
|
||
"""
|
||
|
||
import json
|
||
import os
|
||
from datetime import datetime
|
||
|
||
class CharacterManager:
|
||
def __init__(self):
|
||
self.characters = {}
|
||
self.output_dir = "output/podcast/characters"
|
||
os.makedirs(self.output_dir, exist_ok=True)
|
||
|
||
def add_character(self, name, role, accent, voice_model, description):
|
||
"""添加角色"""
|
||
self.characters[name] = {
|
||
"name": name,
|
||
"role": role,
|
||
"accent": accent,
|
||
"voice_model": voice_model,
|
||
"description": description,
|
||
"initialized": True,
|
||
"timestamp": datetime.now().isoformat()
|
||
}
|
||
print(f"✓ 角色 {name} 已添加并初始化")
|
||
|
||
def list_characters(self):
|
||
"""列出所有角色"""
|
||
print("\n=== 当前播客角色清单 ===")
|
||
for name, info in self.characters.items():
|
||
print(f"\n{name} ({info['role']}):")
|
||
print(f" 描述: {info['description']}")
|
||
print(f" 风格: {info['accent']}")
|
||
print(f" 推荐语音: {info['voice_model']}")
|
||
print(f" 状态: {'已初始化' if info['initialized'] else '未初始化'}")
|
||
|
||
def save_config(self):
|
||
"""保存角色配置到JSON文件"""
|
||
config_path = os.path.join(self.output_dir, "character_config.json")
|
||
with open(config_path, 'w', encoding='utf-8') as f:
|
||
json.dump(self.characters, f, ensure_ascii=False, indent=2)
|
||
print(f"\n✓ 角色配置已保存到 {config_path}")
|
||
|
||
def get_voice_for_character(self, name):
|
||
"""获取指定角色的语音模型"""
|
||
if name in self.characters:
|
||
return self.characters[name]["voice_model"]
|
||
return None
|
||
|
||
def setup_characters():
|
||
"""设置所有播客角色"""
|
||
manager = CharacterManager()
|
||
|
||
print("=== 开始播客角色初始化 ===")
|
||
|
||
# 添加Sonia (Host) - 主持人
|
||
manager.add_character(
|
||
name="Sonia",
|
||
role="Host (主持人)",
|
||
accent="冷静、客观、甚至带点冷幽默",
|
||
voice_model="en-GB-RyanNeural",
|
||
description="主持人,负责引导对话,不使用Judy"
|
||
)
|
||
|
||
# 添加Graham (硅谷)
|
||
manager.add_character(
|
||
name="Graham",
|
||
role="硅谷",
|
||
accent="典型的 American Tech Bro,语速快,自信",
|
||
voice_model="en-US-GuyNeural",
|
||
description="硅谷科技人士视角"
|
||
)
|
||
|
||
# 添加Dmitri (俄罗斯)
|
||
manager.add_character(
|
||
name="Dmitri",
|
||
role="俄罗斯",
|
||
accent="深沉,重音在后",
|
||
voice_model="en-IE-ConnorNeural",
|
||
description="俄罗斯视角"
|
||
)
|
||
|
||
# 添加Amita (印度)
|
||
manager.add_character(
|
||
name="Amita",
|
||
role="印度",
|
||
accent="语速快,清晰的印度口音",
|
||
voice_model="en-IN-NeerjaNeural",
|
||
description="印度视角"
|
||
)
|
||
|
||
# 添加穆罕默德 (中东)
|
||
manager.add_character(
|
||
name="穆罕默德",
|
||
role="中东",
|
||
accent="沧桑,缓慢",
|
||
voice_model="en-EG-SalmaNeural",
|
||
description="中东视角"
|
||
)
|
||
|
||
# 添加Author (作者)
|
||
manager.add_character(
|
||
name="Author",
|
||
role="作者",
|
||
accent="分析性,权威性",
|
||
voice_model="en-US-GuyNeural",
|
||
description="本书作者,提供深入分析"
|
||
)
|
||
|
||
# 显示所有角色
|
||
manager.list_characters()
|
||
|
||
# 保存配置
|
||
manager.save_config()
|
||
|
||
print(f"\n=== 角色初始化完成 ===")
|
||
print(f"共初始化 {len(manager.characters)} 个角色")
|
||
print("配置文件已保存,随时可用于音频生成")
|
||
|
||
return manager
|
||
|
||
if __name__ == "__main__":
|
||
setup_characters() |