Unverified Commit 51e102fe authored by LiangLiu's avatar LiangLiu Committed by GitHub
Browse files

volcengine tts (#372)


Co-authored-by: default avatarXHPlus <xhplus@163.com>
parent 49aff300
{
"voices": [
{
"name": "Vivi 2.0",
"voice_type": "zh_female_vv_uranus_bigtts",
"gender": "female",
"version": "2.0",
"resource_id": "seed-tts-2.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "沪普男",
"voice_type": "zh_male_hupunan_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "可爱女生",
"voice_type": "ICL_zh_female_keainvsheng_tob",
"gender": "female",
"version": "2.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "冷酷哥哥",
"voice_type": "zh_male_lengkugege_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"happy",
"sad",
"angry",
"fear",
"hate",
"coldness",
"neutral",
"depressed"
]
},
{
"name": "理性圆子",
"voice_type": "ICL_zh_female_lixingyuanzi_cs",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Tina老师",
"voice_type": "zh_female_yingyujiaoyu_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "教育场景",
"language": [
"chinese",
"en_gb"
],
"emotions": []
},
{
"name": "Lauren",
"voice_type": "en_female_lauren_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "内敛才俊",
"voice_type": "ICL_zh_male_neiliancaijun_e991be511569_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "大壹",
"voice_type": "zh_male_dayi_saturn_bigtts",
"gender": "male",
"version": "2.0",
"resource_id": "seed-tts-2.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "温柔女神",
"voice_type": "ICL_zh_female_wenrounvshen_239eff5e8ffa_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "粤语小溏",
"voice_type": "zh_female_yueyunv_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "魅力女友",
"voice_type": "ICL_zh_female_tiaopigongzhu_tob",
"gender": "female",
"version": "2.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "甜心小美",
"voice_type": "zh_female_tianxinxiaomei_emo_v2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"sad",
"fear",
"hate",
"neutral"
]
},
{
"name": "清甜桃桃",
"voice_type": "ICL_zh_female_qingtiantaotao_cs",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Energetic Male II",
"voice_type": "en_male_campaign_jamal_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "温暖少年",
"voice_type": "ICL_zh_male_yangyang_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "黑猫侦探社咪仔",
"voice_type": "zh_female_mizai_saturn_bigtts",
"gender": "female",
"version": "2.0",
"resource_id": "seed-tts-2.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Vivi",
"voice_type": "zh_female_vv_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "鲁班七号",
"voice_type": "zh_male_lubanqihao_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "爽朗少年",
"voice_type": "ICL_zh_male_shuanglangshaonian_tob",
"gender": "male",
"version": "2.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "高冷御姐",
"voice_type": "zh_female_gaolengyujie_emo_v2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"happy",
"sad",
"angry",
"surprised",
"fear",
"hate",
"excited",
"coldness",
"neutral"
]
},
{
"name": "清晰小雪",
"voice_type": "ICL_zh_female_qingxixiaoxue_cs",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Gotham Hero",
"voice_type": "en_male_chris_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "儒雅公子",
"voice_type": "ICL_zh_male_flc_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "鸡汤女",
"voice_type": "zh_female_jitangnv_saturn_bigtts",
"gender": "female",
"version": "2.0",
"resource_id": "seed-tts-2.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "亲切女声",
"voice_type": "zh_female_qinqienvsheng_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "林潇",
"voice_type": "zh_female_yangmi_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "天才同桌",
"voice_type": "ICL_zh_male_tiancaitongzhuo_tob",
"gender": "male",
"version": "2.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "傲娇霸总",
"voice_type": "zh_male_aojiaobazong_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"happy",
"angry",
"hate",
"neutral"
]
},
{
"name": "清甜莓莓",
"voice_type": "ICL_zh_female_qingtianmeimei_cs",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Flirty Female",
"voice_type": "en_female_product_darcie_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "悬疑解说",
"voice_type": "zh_male_changtianyi_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "魅力女友",
"voice_type": "zh_female_meilinvyou_saturn_bigtts",
"gender": "female",
"version": "2.0",
"resource_id": "seed-tts-2.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "机灵小伙",
"voice_type": "ICL_zh_male_shenmi_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "玲玲姐姐",
"voice_type": "zh_female_linzhiling_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "纯真少女",
"voice_type": "ICL_zh_female_chunzhenshaonv_e588402fb8ad_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "广州德哥",
"voice_type": "zh_male_guangzhoudege_emo_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"angry",
"fear",
"neutral"
]
},
{
"name": "开朗婷婷",
"voice_type": "ICL_zh_female_kailangtingting_cs",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Peaceful Female",
"voice_type": "en_female_emotional_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "儒雅青年",
"voice_type": "zh_male_ruyaqingnian_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "流畅女声",
"voice_type": "zh_female_santongyongns_saturn_bigtts",
"gender": "female",
"version": "2.0",
"resource_id": "seed-tts-2.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "元气甜妹",
"voice_type": "ICL_zh_female_wuxi_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "春日部姐姐",
"voice_type": "zh_female_jiyejizi2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "奶气小生",
"voice_type": "ICL_zh_male_xiaonaigou_edf58cf28b8b_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "京腔侃爷",
"voice_type": "zh_male_jingqiangkanye_emo_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"happy",
"angry",
"surprised",
"hate",
"neutral"
]
},
{
"name": "清新沐沐",
"voice_type": "ICL_zh_male_qingxinmumu_cs",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Nara",
"voice_type": "en_female_nara_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "霸气青叔",
"voice_type": "zh_male_baqiqingshu_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "儒雅逸辰",
"voice_type": "zh_male_ruyayichen_saturn_bigtts",
"gender": "male",
"version": "2.0",
"resource_id": "seed-tts-2.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "知心姐姐",
"voice_type": "ICL_zh_female_wenyinvsheng_v1_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "唐僧",
"voice_type": "zh_male_tangseng_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "精灵向导",
"voice_type": "ICL_zh_female_jinglingxiangdao_1beb294a9e3e_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "邻居阿姨",
"voice_type": "zh_female_linjuayi_emo_v2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"angry",
"surprised",
"coldness",
"neutral",
"depressed"
]
},
{
"name": "爽朗小阳",
"voice_type": "ICL_zh_male_shuanglangxiaoyang_cs",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Bruce",
"voice_type": "en_male_bruce_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "擎苍",
"voice_type": "zh_male_qingcang_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "悠悠君子",
"voice_type": "zh_male_M100_conversation_wvae_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "阳光阿辰",
"voice_type": "zh_male_qingyiyuxuan_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "庄周",
"voice_type": "zh_male_zhuangzhou_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "闷油瓶小哥",
"voice_type": "ICL_zh_male_menyoupingxiaoge_ffed9fc2fee7_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "优柔公子",
"voice_type": "zh_male_yourougongzi_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"happy",
"angry",
"fear",
"hate",
"excited",
"neutral",
"depressed"
]
},
{
"name": "清新波波",
"voice_type": "ICL_zh_male_qingxinbobo_cs",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Michael",
"voice_type": "en_male_michael_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "活力小哥",
"voice_type": "zh_male_yangguangqingnian_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "文静毛毛",
"voice_type": "zh_female_maomao_conversation_wvae_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "快乐小东",
"voice_type": "zh_male_xudong_conversation_wvae_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "猪八戒",
"voice_type": "zh_male_zhubajie_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "黯刃秦主",
"voice_type": "ICL_zh_male_anrenqinzhu_cd62e63dcdab_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "儒雅男友",
"voice_type": "zh_male_ruyayichen_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"happy",
"sad",
"angry",
"fear",
"excited",
"coldness",
"neutral"
]
},
{
"name": "温婉珊珊",
"voice_type": "ICL_zh_female_wenwanshanshan_cs",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Cartoon Chef",
"voice_type": "ICL_en_male_cc_sha_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "古风少御",
"voice_type": "zh_female_gufengshaoyu_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "倾心少女",
"voice_type": "ICL_zh_female_qiuling_v1_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "冷酷哥哥",
"voice_type": "ICL_zh_male_lengkugege_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "感冒电音姐姐",
"voice_type": "zh_female_ganmaodianyin_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "霸道总裁",
"voice_type": "ICL_zh_male_badaozongcai_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "俊朗男友",
"voice_type": "zh_male_junlangnanyou_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"happy",
"sad",
"angry",
"surprised",
"fear",
"neutral"
]
},
{
"name": "甜美小雨",
"voice_type": "ICL_zh_female_tianmeixiaoyu_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Lucas",
"voice_type": "zh_male_M100_conversation_wvae_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "温柔淑女",
"voice_type": "zh_female_wenroushunv_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "醇厚低音",
"voice_type": "ICL_zh_male_buyan_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "纯澈女生",
"voice_type": "ICL_zh_female_feicui_v1_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "直率英子",
"voice_type": "zh_female_naying_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "妩媚可人",
"voice_type": "ICL_zh_female_ganli_v1_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "北京小爷",
"voice_type": "zh_male_beijingxiaoye_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"angry",
"surprised",
"fear",
"excited",
"coldness",
"neutral"
]
},
{
"name": "热情艾娜",
"voice_type": "ICL_zh_female_reqingaina_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Sophie",
"voice_type": "zh_female_sophie_conversation_wvae_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "反卷青年",
"voice_type": "zh_male_fanjuanqingnian_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "audiobook",
"scene": "有声阅读",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "咆哮小哥",
"voice_type": "ICL_zh_male_BV144_paoxiaoge_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "初恋女友",
"voice_type": "ICL_zh_female_yuxin_v1_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "女雷神",
"voice_type": "zh_female_leidian_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "邪魅御姐",
"voice_type": "ICL_zh_female_xiangliangya_v1_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "柔美女友",
"voice_type": "zh_female_roumeinvyou_emo_v2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"happy",
"sad",
"angry",
"surprised",
"fear",
"hate",
"excited",
"coldness",
"neutral"
]
},
{
"name": "甜美小橘",
"voice_type": "ICL_zh_female_tianmeixiaoju_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Daisy",
"voice_type": "en_female_dacey_conversation_wvae_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "和蔼奶奶",
"voice_type": "ICL_zh_female_heainainai_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "贴心闺蜜",
"voice_type": "ICL_zh_female_xnx_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "豫州子轩",
"voice_type": "zh_male_yuzhouzixuan_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "嚣张小哥",
"voice_type": "ICL_zh_male_ms_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "阳光青年",
"voice_type": "zh_male_yangguangqingnian_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"happy",
"sad",
"angry",
"fear",
"excited",
"coldness",
"neutral"
]
},
{
"name": "沉稳明仔",
"voice_type": "ICL_zh_male_chenwenmingzai_cs_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Owen",
"voice_type": "en_male_charlie_conversation_wvae_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "邻居阿姨",
"voice_type": "ICL_zh_female_linjuayi_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "温柔白月光",
"voice_type": "ICL_zh_female_yry_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "呆萌川妹",
"voice_type": "zh_female_daimengchuanmei_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "油腻大叔",
"voice_type": "ICL_zh_male_you_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "魅力女友",
"voice_type": "zh_female_meilinvyou_emo_v2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese"
],
"emotions": [
"sad",
"fear",
"neutral"
]
},
{
"name": "亲切小卓",
"voice_type": "ICL_zh_male_qinqiexiaozhuo_cs_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Luna",
"voice_type": "en_female_sarah_new_conversation_wvae_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "温柔小雅",
"voice_type": "zh_female_wenrouxiaoya_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "开朗学长",
"voice_type": "en_male_jason_conversation_wvae_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "广西远舟",
"voice_type": "zh_male_guangxiyuanzhou_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "孤傲公子",
"voice_type": "ICL_zh_male_guaogongzi_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "爽快思思",
"voice_type": "zh_female_shuangkuaisisi_emo_v2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"chinese",
"en_gb"
],
"emotions": [
"happy",
"sad",
"angry",
"surprised",
"excited",
"coldness",
"neutral"
]
},
{
"name": "灵动欣欣",
"voice_type": "ICL_zh_female_lingdongxinxin_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Michael",
"voice_type": "ICL_en_male_michael_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "天才童声",
"voice_type": "zh_male_tiancaitongsheng_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "魅力苏菲",
"voice_type": "zh_female_sophie_conversation_wvae_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "双节棍小哥",
"voice_type": "zh_male_zhoujielun_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "胡子叔叔",
"voice_type": "ICL_zh_male_huzi_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Candice",
"voice_type": "en_female_candice_emo_v2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"en_us"
],
"emotions": [
"angry",
"neutral",
"ASMR",
"happy",
"chat",
"chat",
"warm",
"affectionate"
]
},
{
"name": "乖巧可儿",
"voice_type": "ICL_zh_female_guaiqiaokeer_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Charlie",
"voice_type": "ICL_en_female_cc_cm_v1_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "猴哥",
"voice_type": "zh_male_sunwukong_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "贴心妹妹",
"voice_type": "ICL_zh_female_yilin_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "湾湾小何",
"voice_type": "zh_female_wanwanxiaohe_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "性感魅惑",
"voice_type": "ICL_zh_female_luoqing_v1_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Serena",
"voice_type": "en_female_skye_emo_v2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"en_us"
],
"emotions": [
"sad",
"angry",
"neutral",
"ASMR",
"happy",
"chat",
"chat",
"warm",
"affectionate"
]
},
{
"name": "暖心茜茜",
"voice_type": "ICL_zh_female_nuanxinqianqian_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Big Boogie",
"voice_type": "ICL_en_male_oogie2_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "熊二",
"voice_type": "zh_male_xionger_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "甜美桃子",
"voice_type": "zh_female_tianmeitaozi_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "湾区大叔",
"voice_type": "zh_female_wanqudashu_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病弱公子",
"voice_type": "ICL_zh_male_bingruogongzi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Glen",
"voice_type": "en_male_glen_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"en_us"
],
"emotions": [
"sad",
"angry",
"neutral",
"ASMR",
"happy",
"chat",
"chat",
"warm",
"affectionate"
]
},
{
"name": "软萌团子",
"voice_type": "ICL_zh_female_ruanmengtuanzi_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Frosty Man",
"voice_type": "ICL_en_male_frosty1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "佩奇猪",
"voice_type": "zh_female_peiqi_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "清新女声",
"voice_type": "zh_female_qingxinnvsheng_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "广州德哥",
"voice_type": "zh_male_guozhoudege_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "邪魅女王",
"voice_type": "ICL_zh_female_bingjiao3_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Sylus",
"voice_type": "en_male_sylus_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"en_us"
],
"emotions": [
"sad",
"angry",
"neutral",
"ASMR",
"happy",
"chat",
"chat",
"warm",
"affectionate",
"authoritative"
]
},
{
"name": "阳光洋洋",
"voice_type": "ICL_zh_male_yangguangyangyang_cs_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "The Grinch",
"voice_type": "ICL_en_male_grinch2_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "武则天",
"voice_type": "zh_female_wuzetian_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "知性女声",
"voice_type": "zh_female_zhixingnvsheng_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "浩宇小哥",
"voice_type": "zh_male_haoyuxiaoge_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "傲慢青年",
"voice_type": "ICL_zh_male_aomanqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Corey",
"voice_type": "en_male_corey_emo_v2_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"en_gb"
],
"emotions": [
"sad",
"angry",
"neutral",
"ASMR",
"happy",
"chat",
"chat",
"warm",
"affectionate",
"authoritative"
]
},
{
"name": "软萌糖糖",
"voice_type": "ICL_zh_female_ruanmengtangtang_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Zayne",
"voice_type": "ICL_en_male_zayne_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "顾姐",
"voice_type": "zh_female_gujie_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "清爽男大",
"voice_type": "zh_male_qingshuangnanda_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "北京小爷",
"voice_type": "zh_male_beijingxiaoye_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "醋精男生",
"voice_type": "ICL_zh_male_cujingnansheng_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Nadia",
"voice_type": "en_female_nadia_tips_emo_v2_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_emotion",
"scene": "多情感",
"language": [
"en_gb"
],
"emotions": [
"sad",
"angry",
"neutral",
"ASMR",
"happy",
"chat",
"chat",
"warm",
"affectionate"
]
},
{
"name": "秀丽倩倩",
"voice_type": "ICL_zh_female_xiuliqianqian_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Jigsaw",
"voice_type": "ICL_en_male_cc_jigsaw_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "樱桃丸子",
"voice_type": "zh_female_yingtaowanzi_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "邻家女孩",
"voice_type": "zh_female_linjianvhai_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "京腔侃爷/Harmony",
"voice_type": "zh_male_jingqiangkanye_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "撒娇男友",
"voice_type": "ICL_zh_male_sajiaonanyou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "开心小鸿",
"voice_type": "ICL_zh_female_kaixinxiaohong_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Chucky",
"voice_type": "ICL_en_male_cc_chucky_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "广告解说",
"voice_type": "zh_male_chunhui_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "渊博小叔",
"voice_type": "zh_male_yuanboxiaoshu_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "妹坨洁儿",
"voice_type": "zh_female_meituojieer_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "accent",
"scene": "趣味口音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "温柔男友",
"voice_type": "ICL_zh_male_wenrounanyou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "轻盈朵朵",
"voice_type": "ICL_zh_female_qingyingduoduo_cs_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Clown Man",
"voice_type": "ICL_en_male_cc_penny_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "少儿故事",
"voice_type": "zh_female_shaoergushi_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "阳光青年",
"voice_type": "zh_male_yangguangqingnian_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "温顺少年",
"voice_type": "ICL_zh_male_wenshunshaonian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "暖阳女声",
"voice_type": "zh_female_kefunvsheng_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "customer_service",
"scene": "客服场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Kevin McCallister",
"voice_type": "ICL_en_male_kevin2_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "四郎",
"voice_type": "zh_male_silang_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "甜美小源",
"voice_type": "zh_female_tianmeixiaoyuan_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "粘人男友",
"voice_type": "ICL_zh_male_naigounanyou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Xavier",
"voice_type": "ICL_en_male_xavier1_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "俏皮女声",
"voice_type": "zh_female_qiaopinvsheng_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "清澈梓梓",
"voice_type": "zh_female_qingchezizi_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "撒娇男生",
"voice_type": "ICL_zh_male_sajiaonansheng_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Noah",
"voice_type": "ICL_en_male_cc_dracula_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "懒音绵宝",
"voice_type": "zh_male_lanxiaoyang_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "解说小明",
"voice_type": "zh_male_jieshuoxiaoming_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "活泼男友",
"voice_type": "ICL_zh_male_huoponanyou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Adam",
"voice_type": "en_male_adam_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "亮嗓萌仔",
"voice_type": "zh_male_dongmanhaimian_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "开朗姐姐",
"voice_type": "zh_female_kailangjiejie_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "甜系男友",
"voice_type": "ICL_zh_male_tianxinanyou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Amanda",
"voice_type": "en_female_amanda_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "磁性解说男声/Morgan",
"voice_type": "zh_male_jieshuonansheng_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "邻家男孩",
"voice_type": "zh_male_linjiananhai_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "活力青年",
"voice_type": "ICL_zh_male_huoliqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Jackson",
"voice_type": "en_male_jackson_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_us"
],
"emotions": []
},
{
"name": "鸡汤妹妹/Hope",
"voice_type": "zh_female_jitangmeimei_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "甜美悦悦",
"voice_type": "zh_female_tianmeiyueyue_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "开朗青年",
"voice_type": "ICL_zh_male_kailangqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Delicate Girl",
"voice_type": "en_female_daisy_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_gb"
],
"emotions": []
},
{
"name": "贴心女声/Candy",
"voice_type": "zh_female_tiexinnvsheng_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "心灵鸡汤",
"voice_type": "zh_female_xinlingjitang_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "冷漠兄长",
"voice_type": "ICL_zh_male_lengmoxiongzhang_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Dave",
"voice_type": "en_male_dave_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_gb"
],
"emotions": []
},
{
"name": "萌丫头/Cutey",
"voice_type": "zh_female_mengyatou_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "video_dubbing",
"scene": "视频配音",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "知性温婉",
"voice_type": "ICL_zh_female_zhixingwenwan_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "翩翩公子",
"voice_type": "ICL_zh_male_pianpiangongzi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Hades",
"voice_type": "en_male_hades_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_gb"
],
"emotions": []
},
{
"name": "暖心体贴",
"voice_type": "ICL_zh_male_nuanxintitie_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "懵懂青年",
"voice_type": "ICL_zh_male_mengdongqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Onez",
"voice_type": "en_female_onez_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_gb"
],
"emotions": []
},
{
"name": "开朗轻快",
"voice_type": "ICL_zh_male_kailangqingkuai_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "冷脸兄长",
"voice_type": "ICL_zh_male_lenglianxiongzhang_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Emily",
"voice_type": "en_female_emily_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_gb"
],
"emotions": []
},
{
"name": "活泼爽朗",
"voice_type": "ICL_zh_male_huoposhuanglang_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病娇少年",
"voice_type": "ICL_zh_male_bingjiaoshaonian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Daniel",
"voice_type": "zh_male_xudong_conversation_wvae_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_gb"
],
"emotions": []
},
{
"name": "率真小伙",
"voice_type": "ICL_zh_male_shuaizhenxiaohuo_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病娇男友",
"voice_type": "ICL_zh_male_bingjiaonanyou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Alastor",
"voice_type": "ICL_en_male_cc_alastor_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_gb"
],
"emotions": []
},
{
"name": "温柔小哥",
"voice_type": "zh_male_wenrouxiaoge_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病弱少年",
"voice_type": "ICL_zh_male_bingruoshaonian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Smith",
"voice_type": "en_male_smith_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_gb"
],
"emotions": []
},
{
"name": "灿灿/Shiny",
"voice_type": "zh_female_cancan_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "意气少年",
"voice_type": "ICL_zh_male_yiqishaonian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Anna",
"voice_type": "en_female_anna_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_gb"
],
"emotions": []
},
{
"name": "爽快思思/Skye",
"voice_type": "zh_female_shuangkuaisisi_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "干净少年",
"voice_type": "ICL_zh_male_ganjingshaonian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Ethan",
"voice_type": "ICL_en_male_aussie_v1_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_au"
],
"emotions": []
},
{
"name": "温暖阿虎/Alvin",
"voice_type": "zh_male_wennuanahu_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "冷漠男友",
"voice_type": "ICL_zh_male_lengmonanyou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Sarah",
"voice_type": "en_female_sarah_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_au"
],
"emotions": []
},
{
"name": "少年梓辛/Brayan",
"voice_type": "zh_male_shaonianzixin_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese",
"en_us"
],
"emotions": []
},
{
"name": "精英青年",
"voice_type": "ICL_zh_male_jingyingqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Dryw",
"voice_type": "en_male_dryw_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"en_au"
],
"emotions": []
},
{
"name": "温柔文雅",
"voice_type": "ICL_zh_female_wenrouwenya_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "general",
"scene": "通用场景",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "热血少年",
"voice_type": "ICL_zh_male_rexueshaonian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Diana",
"voice_type": "multi_female_maomao_conversation_wvae_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"es"
],
"emotions": []
},
{
"name": "清爽少年",
"voice_type": "ICL_zh_male_qingshuangshaonian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Lucía",
"voice_type": "multi_male_M100_conversation_wvae_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"es"
],
"emotions": []
},
{
"name": "中二青年",
"voice_type": "ICL_zh_male_zhongerqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Sofía",
"voice_type": "multi_female_sophie_conversation_wvae_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"es"
],
"emotions": []
},
{
"name": "凌云青年",
"voice_type": "ICL_zh_male_lingyunqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "Daníel",
"voice_type": "multi_male_xudong_conversation_wvae_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"es"
],
"emotions": []
},
{
"name": "自负青年",
"voice_type": "ICL_zh_male_zifuqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "ひかる(光)",
"voice_type": "multi_zh_male_youyoujunzi_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"ja"
],
"emotions": []
},
{
"name": "不羁青年",
"voice_type": "ICL_zh_male_bujiqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "さとみ(智美)",
"voice_type": "multi_female_sophie_conversation_wvae_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"ja"
],
"emotions": []
},
{
"name": "儒雅君子",
"voice_type": "ICL_zh_male_ruyajunzi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "まさお(正男)",
"voice_type": "multi_male_xudong_conversation_wvae_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"ja"
],
"emotions": []
},
{
"name": "低音沉郁",
"voice_type": "ICL_zh_male_diyinchenyu_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "つき(月)",
"voice_type": "multi_female_maomao_conversation_wvae_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"ja"
],
"emotions": []
},
{
"name": "冷脸学霸",
"voice_type": "ICL_zh_male_lenglianxueba_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "あけみ(朱美)",
"voice_type": "multi_female_gaolengyujie_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"ja"
],
"emotions": []
},
{
"name": "儒雅总裁",
"voice_type": "ICL_zh_male_ruyazongcai_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "かずね(和音)/Javier or Álvaro",
"voice_type": "multi_male_jingqiangkanye_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"ja",
"es"
],
"emotions": []
},
{
"name": "深沉总裁",
"voice_type": "ICL_zh_male_shenchenzongcai_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "はるこ(晴子)/Esmeralda",
"voice_type": "multi_female_shuangkuaisisi_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"ja",
"es"
],
"emotions": []
},
{
"name": "小侯爷",
"voice_type": "ICL_zh_male_xiaohouye_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "ひろし(広志)/Roberto",
"voice_type": "multi_male_wanqudashu_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "multi_language",
"scene": "多语种",
"language": [
"ja",
"es"
],
"emotions": []
},
{
"name": "孤高公子",
"voice_type": "ICL_zh_male_gugaogongzi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "仗剑君子",
"voice_type": "ICL_zh_male_zhangjianjunzi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "温润学者",
"voice_type": "ICL_zh_male_wenrunxuezhe_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "亲切青年",
"voice_type": "ICL_zh_male_qinqieqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "温柔学长",
"voice_type": "ICL_zh_male_wenrouxuezhang_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "高冷总裁",
"voice_type": "ICL_zh_male_gaolengzongcai_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "冷峻高智",
"voice_type": "ICL_zh_male_lengjungaozhi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "孱弱少爷",
"voice_type": "ICL_zh_male_chanruoshaoye_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "自信青年",
"voice_type": "ICL_zh_male_zixinqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "青涩青年",
"voice_type": "ICL_zh_male_qingseqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "学霸同桌",
"voice_type": "ICL_zh_male_xuebatongzhuo_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "冷傲总裁",
"voice_type": "ICL_zh_male_lengaozongcai_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "元气少年",
"voice_type": "ICL_zh_male_yuanqishaonian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "洒脱青年",
"voice_type": "ICL_zh_male_satuoqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "直率青年",
"voice_type": "ICL_zh_male_zhishuaiqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "斯文青年",
"voice_type": "ICL_zh_male_siwenqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "俊逸公子",
"voice_type": "ICL_zh_male_junyigongzi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "仗剑侠客",
"voice_type": "ICL_zh_male_zhangjianxiake_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "机甲智能",
"voice_type": "ICL_zh_male_jijiaozhineng_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "奶气萌娃",
"voice_type": "zh_male_naiqimengwa_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "婆婆",
"voice_type": "zh_female_popo_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "高冷御姐",
"voice_type": "zh_female_gaolengyujie_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "傲娇霸总",
"voice_type": "zh_male_aojiaobazong_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "魅力女友",
"voice_type": "zh_female_meilinvyou_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "深夜播客",
"voice_type": "zh_male_shenyeboke_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "柔美女友",
"voice_type": "zh_female_sajiaonvyou_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "撒娇学妹",
"voice_type": "zh_female_yuanqinvyou_moon_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病弱少女",
"voice_type": "ICL_zh_female_bingruoshaonv_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "活泼女孩",
"voice_type": "ICL_zh_female_huoponvhai_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "东方浩然",
"voice_type": "zh_male_dongfanghaoran_moon_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "绿茶小哥",
"voice_type": "ICL_zh_male_lvchaxiaoge_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "娇弱萝莉",
"voice_type": "ICL_zh_female_jiaoruoluoli_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "冷淡疏离",
"voice_type": "ICL_zh_male_lengdanshuli_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "憨厚敦实",
"voice_type": "ICL_zh_male_hanhoudunshi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "活泼刁蛮",
"voice_type": "ICL_zh_female_huopodiaoman_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "固执病娇",
"voice_type": "ICL_zh_male_guzhibingjiao_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "撒娇粘人",
"voice_type": "ICL_zh_male_sajiaonianren_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "傲慢娇声",
"voice_type": "ICL_zh_female_aomanjiaosheng_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "潇洒随性",
"voice_type": "ICL_zh_male_xiaosasuixing_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "诡异神秘",
"voice_type": "ICL_zh_male_guiyishenmi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "儒雅才俊",
"voice_type": "ICL_zh_male_ruyacaijun_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "正直青年",
"voice_type": "ICL_zh_male_zhengzhiqingnian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "娇憨女王",
"voice_type": "ICL_zh_female_jiaohannvwang_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病娇萌妹",
"voice_type": "ICL_zh_female_bingjiaomengmei_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "青涩小生",
"voice_type": "ICL_zh_male_qingsenaigou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "纯真学弟",
"voice_type": "ICL_zh_male_chunzhenxuedi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "优柔帮主",
"voice_type": "ICL_zh_male_youroubangzhu_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "优柔公子",
"voice_type": "ICL_zh_male_yourougongzi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "贴心男友",
"voice_type": "ICL_zh_male_tiexinnanyou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "少年将军",
"voice_type": "ICL_zh_male_shaonianjiangjun_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病娇哥哥",
"voice_type": "ICL_zh_male_bingjiaogege_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "学霸男同桌",
"voice_type": "ICL_zh_male_xuebanantongzhuo_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "幽默叔叔",
"voice_type": "ICL_zh_male_youmoshushu_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "假小子",
"voice_type": "ICL_zh_female_jiaxiaozi_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "温柔男同桌",
"voice_type": "ICL_zh_male_wenrounantongzhuo_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "幽默大爷",
"voice_type": "ICL_zh_male_youmodaye_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "枕边低语",
"voice_type": "ICL_zh_male_asmryexiu_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "神秘法师",
"voice_type": "ICL_zh_male_shenmifashi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "娇喘女声",
"voice_type": "zh_female_jiaochuan_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "开朗弟弟",
"voice_type": "zh_male_livelybro_mars_bigtts",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "谄媚女声",
"voice_type": "zh_female_flattery_mars_bigtts",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "冷峻上司",
"voice_type": "ICL_zh_male_lengjunshangsi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "醋精男友",
"voice_type": "ICL_zh_male_cujingnanyou_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "风发少年",
"voice_type": "ICL_zh_male_fengfashaonian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "磁性男嗓",
"voice_type": "ICL_zh_male_cixingnansang_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "成熟总裁",
"voice_type": "ICL_zh_male_chengshuzongcai_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "傲娇精英",
"voice_type": "ICL_zh_male_aojiaojingying_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "傲娇公子",
"voice_type": "ICL_zh_male_aojiaogongzi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "霸道少爷",
"voice_type": "ICL_zh_male_badaoshaoye_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "腹黑公子",
"voice_type": "ICL_zh_male_fuheigongzi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "暖心学姐",
"voice_type": "ICL_zh_female_nuanxinxuejie_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "成熟姐姐",
"voice_type": "ICL_zh_female_chengshujiejie_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病娇姐姐",
"voice_type": "ICL_zh_female_bingjiaojiejie_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "妩媚御姐",
"voice_type": "ICL_zh_female_wumeiyujie_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "傲娇女友",
"voice_type": "ICL_zh_female_aojiaonvyou_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "贴心女友",
"voice_type": "ICL_zh_female_tiexinnvyou_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "性感御姐",
"voice_type": "ICL_zh_female_xingganyujie_tob",
"gender": "female",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病娇弟弟",
"voice_type": "ICL_zh_male_bingjiaodidi_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "傲慢少爷",
"voice_type": "ICL_zh_male_aomanshaoye_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "傲气凌人",
"voice_type": "ICL_zh_male_aiqilingren_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
},
{
"name": "病娇白莲",
"voice_type": "ICL_zh_male_bingjiaobailian_tob",
"gender": "male",
"version": "1.0",
"resource_id": "seed-tts-1.0",
"voice_category": "roleplay",
"scene": "角色扮演",
"language": [
"chinese"
],
"emotions": []
}
],
"languages": [
{
"name": "chinese",
"zh": "中文",
"en": "Chinese"
},
{
"name": "en_au",
"zh": "澳洲英语",
"en": "Australian English"
},
{
"name": "en_gb",
"zh": "英式英语",
"en": "British English"
},
{
"name": "en_us",
"zh": "美式英语",
"en": "American English"
},
{
"name": "es",
"zh": "西语",
"en": "Spanish"
},
{
"name": "ja",
"zh": "日语",
"en": "Japanese"
}
],
"emotions": [
{
"name": "ASMR",
"zh": "低语",
"en": "ASMR"
},
{
"name": "affectionate",
"zh": "深情",
"en": "affectionate"
},
{
"name": "angry",
"zh": "生气",
"en": "angry"
},
{
"name": "authoritative",
"zh": "权威",
"en": "authoritative"
},
{
"name": "chat",
"zh": "对话",
"en": "chat"
},
{
"name": "coldness",
"zh": "冷漠",
"en": "coldness"
},
{
"name": "depressed",
"zh": "沮丧",
"en": "depressed"
},
{
"name": "excited",
"zh": "激动",
"en": "excited"
},
{
"name": "fear",
"zh": "恐惧",
"en": "fear"
},
{
"name": "happy",
"zh": "开心",
"en": "happy"
},
{
"name": "hate",
"zh": "厌恶",
"en": "hate"
},
{
"name": "neutral",
"zh": "中性",
"en": "neutral"
},
{
"name": "sad",
"zh": "悲伤",
"en": "sad"
},
{
"name": "surprised",
"zh": "惊讶",
"en": "surprised"
},
{
"name": "warm",
"zh": "温暖",
"en": "warm"
}
]
}
# -*- coding: utf-8 -*-
import asyncio
import base64
import json
import os
import sys
import aiohttp
from loguru import logger
class VolcEngineTTSClient:
"""
VolcEngine TTS客户端
参数范围说明:
- speed_rate: -50~100 (100代表2倍速, -50代表0.5倍速, 0为正常语速)
- loudness_rate: -50~100 (100代表2倍音量, -50代表0.5倍音量, 0为正常音量)
- emotion_scale: 1-5
"""
def __init__(self, voices_list_file=None):
self.url = "https://openspeech.bytedance.com/api/v3/tts/unidirectional"
self.appid = os.getenv("VOLCENGINE_APPID")
self.access_token = os.getenv("VOLCENGINE_ACCESS_TOKEN")
self.proxy = os.getenv("HTTPS_PROXY", None)
if self.proxy:
logger.info(f"volcengine tts use proxy: {self.proxy}")
if voices_list_file is not None:
with open(voices_list_file, "r", encoding="utf-8") as f:
self.voices_list = json.load(f)
else:
self.voices_list = None
def get_voice_list(self):
return self.voices_list
async def tts_http_stream(self, headers, params, audio_save_path):
"""执行TTS流式请求"""
try:
logger.info(f"volcengine tts params: {params}")
audio_data = bytearray()
total_audio_size = 0
async with aiohttp.ClientSession() as session:
async with session.post(self.url, json=params, headers=headers, proxy=self.proxy) as response:
response.raise_for_status()
async for chunk in response.content:
if not chunk:
continue
try:
data = json.loads(chunk.decode("utf-8").strip())
if data.get("code", 0) == 0 and "data" in data and data["data"]:
chunk_audio = base64.b64decode(data["data"])
audio_size = len(chunk_audio)
total_audio_size += audio_size
audio_data.extend(chunk_audio)
continue
if data.get("code", 0) == 0 and "sentence" in data and data["sentence"]:
continue
if data.get("code", 0) == 20000000:
break
if data.get("code", 0) > 0:
logger.warning(f"volcengine tts error response: {data}")
break
except Exception as e:
logger.warning(f"Failed to parse volcengine tts chunk: {e}")
# save audio file
if audio_data:
with open(audio_save_path, "wb") as f:
f.write(audio_data)
logger.info(f"audio saved to {audio_save_path}, audio size: {len(audio_data) / 1024:.2f} KB")
# set correct permissions
os.chmod(audio_save_path, 0o644)
return True
else:
logger.warning("No tts audio data received")
return False
except Exception as e:
logger.warning(f"VolcEngineTTSClient tts request failed: {e}")
return False
async def tts_request(
self,
text,
voice_type,
context_texts="",
emotion="",
emotion_scale=4,
speed_rate=0,
loudness_rate=0,
output="tts_output.mp3",
resource_id="seed-tts-2.0",
app_key="aGjiRDfUWi",
uid="123123",
format="mp3",
sample_rate=24000,
enable_timestamp=True,
):
"""
执行TTS请求
Args:
text: 要转换的文本
voice_type: 声音类型
emotion: 情感类型
emotion_scale: 情感强度 (1-5)
speed_rate: 语速调节 (-50~100, 100代表2倍速, -50代表0.5倍速, 0为正常语速)
loudness_rate: 音量调节 (-50~100, 100代表2倍音量, -50代表0.5倍音量, 0为正常音量)
output: 输出文件路径
resource_id: 资源ID
app_key: 应用密钥
uid: 用户ID
format: 音频格式
sample_rate: 采样率
enable_timestamp: 是否启用时间戳
"""
# 验证参数范围
if not (-50 <= speed_rate <= 100):
logger.warning(f"speed_rate {speed_rate} 超出有效范围 [-50, 100],将使用默认值 0")
speed_rate = 0
if not (-50 <= loudness_rate <= 100):
logger.warning(f"loudness_rate {loudness_rate} 超出有效范围 [-50, 100],将使用默认值 0")
loudness_rate = 0
if not (1 <= emotion_scale <= 5):
logger.warning(f"emotion_scale {emotion_scale} 超出有效范围 [1, 5],将使用默认值 3")
emotion_scale = 3
headers = {
"X-Api-App-Id": self.appid,
"X-Api-Access-Key": self.access_token,
"X-Api-Resource-Id": resource_id,
"X-Api-App-Key": app_key,
"Content-Type": "application/json",
"Connection": "keep-alive",
}
additions = json.dumps({"explicit_language": "zh", "disable_markdown_filter": True, "enable_timestamp": True, "context_texts": [context_texts] if context_texts else None})
payload = {
"user": {"uid": uid},
"req_params": {
"text": text,
"speaker": voice_type,
"audio_params": {
"format": format,
"sample_rate": sample_rate,
"enable_timestamp": enable_timestamp,
"emotion": emotion,
"emotion_scale": emotion_scale,
"speed_rate": speed_rate,
"loudness_rate": loudness_rate,
},
"additions": additions,
},
}
success = await self.tts_http_stream(headers=headers, params=payload, audio_save_path=output)
if success:
logger.info(f"VolcEngineTTSClient tts request for '{text}': success")
else:
logger.warning(f"VolcEngineTTSClient tts request for '{text}': failed")
return success
async def test(args):
"""
TTS测试函数
Args:
args: list, e.g. [text, voice_type, emotion, emotion_scale, speed_rate, loudness_rate, output, resource_id, app_key, uid, format, sample_rate, enable_timestamp]
Provide as many as needed, from left to right.
Parameter ranges:
- speed_rate: -50~100 (100代表2倍速, -50代表0.5倍速, 0为正常语速)
- loudness_rate: -50~100 (100代表2倍音量, -50代表0.5倍音量, 0为正常音量)
- emotion_scale: 1-5
"""
client = VolcEngineTTSClient()
# 设置默认参数
params = {
"text": "",
"voice_type": "",
"context_texts": "",
"emotion": "",
"emotion_scale": 4,
"speed_rate": 0,
"loudness_rate": 0,
"output": "tts_output.mp3",
"resource_id": "seed-tts-2.0",
"app_key": "aGjiRDfUWi",
"uid": "123123",
"format": "mp3",
"sample_rate": 24000,
"enable_timestamp": True,
}
keys = list(params.keys())
# 覆盖默认参数
for i, arg in enumerate(args):
# 类型转换
if keys[i] == "sample_rate":
params[keys[i]] = int(arg)
elif keys[i] == "enable_timestamp":
# 支持多种布尔输入
params[keys[i]] = str(arg).lower() in ("1", "true", "yes", "on")
else:
params[keys[i]] = arg
await client.tts_request(
params["text"],
params["voice_type"],
params["context_texts"],
params["emotion"],
params["emotion_scale"],
params["speed_rate"],
params["loudness_rate"],
params["output"],
params["resource_id"],
params["app_key"],
params["uid"],
params["format"],
params["sample_rate"],
params["enable_timestamp"],
)
if __name__ == "__main__":
asyncio.run(test(sys.argv[1:]))
......@@ -3,7 +3,9 @@ import asyncio
import json
import mimetypes
import os
import tempfile
import traceback
import uuid
from contextlib import asynccontextmanager
import uvicorn
......@@ -13,9 +15,11 @@ from fastapi.responses import FileResponse, HTMLResponse, JSONResponse, Response
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
from fastapi.staticfiles import StaticFiles
from loguru import logger
from pydantic import BaseModel
from lightx2v.deploy.common.pipeline import Pipeline
from lightx2v.deploy.common.utils import check_params, data_name, load_inputs
from lightx2v.deploy.common.volcengine_tts import VolcEngineTTSClient
from lightx2v.deploy.data_manager import LocalDataManager, S3DataManager
from lightx2v.deploy.queue_manager import LocalQueueManager, RabbitMQQueueManager
from lightx2v.deploy.server.auth import AuthManager
......@@ -25,6 +29,22 @@ from lightx2v.deploy.server.redis_monitor import RedisServerMonitor
from lightx2v.deploy.task_manager import FinishedStatus, LocalTaskManager, PostgresSQLTaskManager, TaskStatus
from lightx2v.utils.service_utils import ProcessManager
# =========================
# Pydantic Models
# =========================
class TTSRequest(BaseModel):
text: str
voice_type: str
context_texts: str = ""
emotion: str = ""
emotion_scale: int = 3
speed_rate: int = 0
loudness_rate: int = 0
resource_id: str = "seed-tts-1.0"
# =========================
# FastAPI Related Code
# =========================
......@@ -36,6 +56,7 @@ queue_manager = None
server_monitor = None
auth_manager = None
metrics_monitor = MetricMonitor()
volcengine_tts_client = None
@asynccontextmanager
......@@ -906,6 +927,59 @@ async def api_v1_share_get(share_id: str):
return error_response(str(e), 500)
@app.get("/api/v1/voices/list")
async def api_v1_voices_list():
try:
if volcengine_tts_client is None:
return error_response("Volcengine TTS client not loaded", 500)
voices = volcengine_tts_client.get_voice_list()
if voices is None:
return error_response("No voice list found", 404)
return voices
except Exception as e:
traceback.print_exc()
return error_response("Failed to get voice list", 500)
@app.post("/api/v1/tts/generate")
async def api_v1_tts_generate(request: TTSRequest):
"""Generate TTS audio from text"""
try:
# Validate parameters
if not request.text.strip():
return JSONResponse({"error": "Text cannot be empty"}, status_code=400)
if not request.voice_type:
return JSONResponse({"error": "Voice type is required"}, status_code=400)
# Generate unique output filename
output_filename = f"tts_output_{uuid.uuid4().hex}.mp3"
output_path = os.path.join(tempfile.gettempdir(), output_filename)
# Generate TTS
success = await volcengine_tts_client.tts_request(
text=request.text,
voice_type=request.voice_type,
context_texts=request.context_texts,
emotion=request.emotion,
emotion_scale=request.emotion_scale,
speed_rate=request.speed_rate,
loudness_rate=request.loudness_rate,
output=output_path,
resource_id=request.resource_id,
)
if success and os.path.exists(output_path):
# Return the audio file
return FileResponse(output_path, media_type="audio/mpeg", filename=output_filename)
else:
return JSONResponse({"error": "TTS generation failed"}, status_code=500)
except Exception as e:
logger.error(f"TTS generation error: {e}")
return JSONResponse({"error": f"TTS generation failed: {str(e)}"}, status_code=500)
# 所有未知路由 fallback 到 index.html (必须在所有API路由之后)
@app.get("/{full_path:path}", response_class=HTMLResponse)
async def vue_fallback(full_path: str):
......@@ -929,6 +1003,7 @@ if __name__ == "__main__":
dft_task_url = os.path.join(base_dir, "local_task")
dft_data_url = os.path.join(base_dir, "local_data")
dft_queue_url = os.path.join(base_dir, "local_queue")
dft_volcengine_tts_list_json = os.path.join(base_dir, "configs/volcengine_voices_list.json")
parser.add_argument("--pipeline_json", type=str, default=dft_pipeline_json)
parser.add_argument("--task_url", type=str, default=dft_task_url)
......@@ -936,12 +1011,14 @@ if __name__ == "__main__":
parser.add_argument("--queue_url", type=str, default=dft_queue_url)
parser.add_argument("--redis_url", type=str, default="")
parser.add_argument("--template_dir", type=str, default="")
parser.add_argument("--volcengine_tts_list_json", type=str, default=dft_volcengine_tts_list_json)
parser.add_argument("--ip", type=str, default="0.0.0.0")
parser.add_argument("--port", type=int, default=8080)
args = parser.parse_args()
logger.info(f"args: {args}")
model_pipelines = Pipeline(args.pipeline_json)
volcengine_tts_client = VolcEngineTTSClient(args.volcengine_tts_list_json)
auth_manager = AuthManager()
if args.task_url.startswith("/"):
task_manager = LocalTaskManager(args.task_url, metrics_monitor)
......
{
"name": "my-project",
"name": "frontend",
"version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "my-project",
"name": "frontend",
"version": "0.0.0",
"dependencies": {
"@flaticon/flaticon-uicons": "^3.3.1",
......
{
"name": "my-project",
"name": "frontend",
"private": true,
"version": "0.0.0",
"type": "module",
......
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: visioncortex VTracer -->
<svg id="svg" version="1.1" xmlns="http://www.w3.org/2000/svg" style="display: block;" viewBox="0 0 512 512"><path d="M0 0 C1.19935684 -0.00151062 1.19935684 -0.00151062 2.42294312 -0.00305176 C36.44465308 0.02584755 66.83096651 4.81015715 92.3125 29 C104.73236108 41.91665553 117.15430318 62.02105437 119.125 80.25 C117.475 81.24 115.825 82.23 114.125 83.25 C114.18558594 83.83338135 114.24617188 84.4167627 114.30859375 85.01782227 C115.77649849 99.75191605 116.34355512 114.39107705 116.375 129.1875 C116.38249268 130.39589035 116.38249268 130.39589035 116.39013672 131.62869263 C116.46741408 146.815047 115.63994775 162.1240274 112.375 177 C112.20653564 177.77529053 112.03807129 178.55058105 111.86450195 179.34936523 C108.46241976 194.12910138 102.7471068 207.55542161 90.3359375 216.875 C85.92128643 219.62050738 82.04167592 220.55686325 76.875 220.9375 C75.81796875 221.02386719 74.7609375 221.11023438 73.671875 221.19921875 C69.47806155 221.25926233 65.29359015 220.71317668 61.125 220.25 C61.125 228.5 61.125 236.75 61.125 245.25 C63.105 245.58 65.085 245.91 67.125 246.25 C69.67184131 247.20255532 72.14073458 248.19267001 74.62890625 249.27734375 C75.34062988 249.58170853 76.05235352 249.8860733 76.78564453 250.19966125 C79.08961941 251.18802052 81.38883907 252.18684991 83.6875 253.1875 C84.47333466 253.52769165 85.25916931 253.8678833 86.06881714 254.21838379 C132.92921413 274.50836637 132.92921413 274.50836637 151.125 290.25 C151.74246094 290.73597656 152.35992187 291.22195313 152.99609375 291.72265625 C174.31395159 308.76744682 180.90242243 335.22291795 185.63330078 360.70043945 C185.93325063 362.25574048 186.27138299 363.8050734 186.67529297 365.33666992 C187.1015625 367.140625 187.1015625 367.140625 187.125 370.25 C185.33680454 372.47061363 183.98055469 373.77559316 181.75 375.4375 C181.16492676 375.89962891 180.57985352 376.36175781 179.97705078 376.83789062 C178.04850478 378.34039182 176.09169492 379.79786954 174.125 381.25 C173.47080078 381.74193848 172.81660156 382.23387695 172.14257812 382.74072266 C139.6626858 407.0372665 102.04329031 423.20945437 62.125 430.25 C61.29274902 430.41081055 60.46049805 430.57162109 59.60302734 430.73730469 C31.86455166 435.99758258 -0.19461137 435.61784631 -27.875 430.25 C-28.89158691 430.05664062 -29.90817383 429.86328125 -30.95556641 429.6640625 C-75.99758608 420.81274218 -115.84133693 400.55342297 -150.875 371.25 C-150.76430176 370.63705078 -150.65360352 370.02410156 -150.53955078 369.39257812 C-150.02201675 366.51248237 -149.51119632 363.63122719 -149 360.75 C-148.80929932 359.69643311 -148.61859863 358.64286621 -148.42211914 357.55737305 C-147.21352409 350.74422453 -147.21352409 350.74422453 -146.55078125 343.86328125 C-145.52866033 327.55961482 -135.90055941 312.92630913 -124.875 301.25 C-123.52728516 299.81914063 -123.52728516 299.81914063 -122.15234375 298.359375 C-118.22619793 294.28488102 -114.32811372 290.42482918 -109.625 287.25 C-95.80897049 277.29681956 -92.06583285 256.58023198 -89.26049805 240.86962891 C-88.22373646 233.82437759 -87.70945046 226.89752621 -87.671875 219.77734375 C-87.66162544 218.42767265 -87.66162544 218.42767265 -87.65116882 217.05073547 C-87.633997 214.09628552 -87.6278159 211.14199722 -87.625 208.1875 C-87.62299591 207.16289673 -87.62099182 206.13829346 -87.618927 205.0826416 C-87.61140747 189.17377232 -88.22574911 173.36969582 -89.3125 157.5 C-89.38089081 156.49746185 -89.44928162 155.49492371 -89.51974487 154.46200562 C-89.65670687 152.45848364 -89.79377538 150.45496895 -89.93095398 148.45146179 C-89.99756729 147.4774794 -90.0641806 146.50349701 -90.1328125 145.5 C-90.23146355 144.05999382 -90.23146355 144.05999382 -90.33210754 142.59089661 C-96.10825705 56.90928312 -96.10825705 56.90928312 -72.875 28.25 C-71.94880859 27.08017578 -71.94880859 27.08017578 -71.00390625 25.88671875 C-53.41588934 4.83064217 -25.98524653 0.02257652 0 0 Z " transform="translate(238.875,78.75)" style="fill: #FCA9A5;"/><path d="M0 0 C4.86620795 0.59753861 9.04243625 2.08244606 13.50390625 4.02734375 C14.5714917 4.48389091 14.5714917 4.48389091 15.66064453 4.94966125 C17.96461941 5.93802052 20.26383907 6.93684991 22.5625 7.9375 C23.34833466 8.27769165 24.13416931 8.6178833 24.94381714 8.96838379 C71.80421413 29.25836637 71.80421413 29.25836637 90 45 C90.61746094 45.48597656 91.23492187 45.97195313 91.87109375 46.47265625 C113.18895159 63.51744682 119.77742243 89.97291795 124.50830078 115.45043945 C124.80825063 117.00574048 125.14638299 118.5550734 125.55029297 120.08666992 C125.9765625 121.890625 125.9765625 121.890625 126 125 C124.21180454 127.22061363 122.85555469 128.52559316 120.625 130.1875 C120.03992676 130.64962891 119.45485352 131.11175781 118.85205078 131.58789062 C116.92350478 133.09039182 114.96669492 134.54786954 113 136 C112.34580078 136.49193848 111.69160156 136.98387695 111.01757812 137.49072266 C78.5376858 161.7872665 40.91829031 177.95945437 1 185 C0.16774902 185.16081055 -0.66450195 185.32162109 -1.52197266 185.48730469 C-29.26044834 190.74758258 -61.31961137 190.36784631 -89 185 C-90.01658691 184.80664062 -91.03317383 184.61328125 -92.08056641 184.4140625 C-137.12258608 175.56274218 -176.96633693 155.30342297 -212 126 C-211.88930176 125.38705078 -211.77860352 124.77410156 -211.66455078 124.14257812 C-211.14701675 121.26248237 -210.63619632 118.38122719 -210.125 115.5 C-209.93429932 114.44643311 -209.74359863 113.39286621 -209.54711914 112.30737305 C-208.33852409 105.49422453 -208.33852409 105.49422453 -207.67578125 98.61328125 C-206.65366033 82.30961482 -197.02555941 67.67630913 -186 56 C-185.10152344 55.04609375 -184.20304687 54.0921875 -183.27734375 53.109375 C-161.31499576 30.37069401 -130.9911306 17.22084328 -102 6 C-101.17870605 5.68063477 -100.35741211 5.36126953 -99.51123047 5.03222656 C-87.19453472 0.28502249 -87.19453472 0.28502249 -83 1 C-80.9296875 2.984375 -80.9296875 2.984375 -78.875 5.75 C-78.09382812 6.75289063 -77.31265625 7.75578125 -76.5078125 8.7890625 C-76.09821289 9.31790039 -75.68861328 9.84673828 -75.26660156 10.39160156 C-67.3437236 20.45249594 -57.5591985 31.0139067 -45 35 C-36.88601566 35.93389655 -30.03602049 35.14196532 -23.53125 30.078125 C-14.3903272 22.093584 -3.91302067 11.739062 0 0 Z " transform="translate(300,324)" style="fill: #F9E2DB;"/><path d="M0 0 C1.19935684 -0.00151062 1.19935684 -0.00151062 2.42294312 -0.00305176 C36.44465308 0.02584755 66.83096651 4.81015715 92.3125 29 C104.73236108 41.91665553 117.15430318 62.02105437 119.125 80.25 C114.375 83.25 114.375 83.25 112.125 83.25 C111.45345067 81.96086513 110.78791141 80.66859796 110.125 79.375 C109.75375 78.65570313 109.3825 77.93640625 109 77.1953125 C108.125 75.25 108.125 75.25 108.125 73.25 C107.17625 72.940625 106.2275 72.63125 105.25 72.3125 C102.125 71.25 102.125 71.25 100.125 70.25 C93.24838938 69.78360527 86.55659332 70.25442982 79.75 71.25 C59.16672064 74.15034797 39.11688215 73.60313835 21.51171875 61.4453125 C17.78377639 58.60207004 14.40438669 55.60258729 11.125 52.25 C10.99544922 54.1371875 10.99544922 54.1371875 10.86328125 56.0625 C8.49913303 86.32122116 8.49913303 86.32122116 -1.875 96.25 C-8.08295966 101.35800564 -14.06923587 101.91337939 -21.875 101.25 C-22.98875 100.755 -24.1025 100.26 -25.25 99.75 C-30.73221549 97.48149704 -36.02274567 97.57125916 -41.875 98.25 C-47.71572075 101.0166572 -51.94524998 105.86530245 -54.33203125 111.91796875 C-56.64519668 121.85293107 -55.16131952 132.0981286 -50.875 141.25 C-48.81313456 144.25271913 -48.81313456 144.25271913 -46.875 146.25 C-46.875 146.91 -46.875 147.57 -46.875 148.25 C-46.33875 148.518125 -45.8025 148.78625 -45.25 149.0625 C-42.875 150.25 -42.875 150.25 -40.375 151.8125 C-35.64698654 153.96010157 -35.64698654 153.96010157 -24.875 154.25 C-24.875 184.61 -24.875 214.97 -24.875 246.25 C-36.095 250.54 -47.315 254.83 -58.875 259.25 C-72.64124362 265.44480963 -85.47864753 272.02277441 -98.14550781 280.1484375 C-100.36231113 281.56038225 -102.6128939 282.91210067 -104.875 284.25 C-103.67922705 281.80326458 -102.41681605 279.41555903 -101.10546875 277.02734375 C-97.21493015 269.80613847 -94.09972877 262.69458778 -92 254.75 C-91.80946045 254.04093506 -91.6189209 253.33187012 -91.42260742 252.60131836 C-87.78564854 237.81167686 -87.51100974 222.88531887 -87.5625 207.75 C-87.56299347 206.74287964 -87.56348694 205.73575928 -87.56399536 204.69812012 C-87.5917681 185.88843476 -88.64542828 167.20923875 -89.93081665 148.45050049 C-89.99747528 147.47683533 -90.06413391 146.50317017 -90.1328125 145.5 C-90.2314711 144.06004669 -90.2314711 144.06004669 -90.3321228 142.59100342 C-96.107655 56.90854046 -96.107655 56.90854046 -72.875 28.25 C-71.94880859 27.08017578 -71.94880859 27.08017578 -71.00390625 25.88671875 C-53.41588934 4.83064217 -25.98524653 0.02257652 0 0 Z " transform="translate(238.875,78.75)" style="fill: #6684F4;"/><path d="M0 0 C8.806723 7.40681039 10.2382616 25.77511574 12.43798828 36.49902344 C12.93008359 38.68886893 13.52401231 40.78082951 14.21484375 42.9140625 C15.16094238 46.31676916 15.65335187 48.52513595 15 52 C11.86773417 56.02319654 8.22154187 58.7532968 4.02978516 61.60986328 C1.98252812 63.01196595 -0.00303248 64.47651258 -1.98828125 65.96484375 C-33.86159262 89.56624474 -71.00159311 105.12169782 -110 112 C-111.24837646 112.24121582 -111.24837646 112.24121582 -112.52197266 112.48730469 C-140.26044834 117.74758258 -172.31961137 117.36784631 -200 112 C-201.01658691 111.80664062 -202.03317383 111.61328125 -203.08056641 111.4140625 C-248.12258608 102.56274218 -287.96633693 82.30342297 -323 53 C-322.88930176 52.38705078 -322.77860352 51.77410156 -322.66455078 51.14257812 C-322.14701633 48.26248007 -321.63559663 45.38133604 -321.125 42.5 C-320.93719971 41.45150879 -320.74939941 40.40301758 -320.5559082 39.32275391 C-319.61987965 33.98906483 -318.82333729 28.71072442 -318.35839844 23.31640625 C-317.57832375 14.45475777 -314.73593722 8.3951533 -310 1 C-309.67 1 -309.34 1 -309 1 C-309.06960938 2.55847656 -309.06960938 2.55847656 -309.140625 4.1484375 C-309.48689466 15.1563765 -308.54113783 24.08761466 -300.71484375 32.53125 C-295.59458318 36.91671235 -289.11977609 39.36392608 -282.39453125 39.2890625 C-276.46511051 38.57327598 -269.98206712 36.61708115 -266 32 C-263.98492462 33.00528369 -261.97204278 34.01422008 -259.96484375 35.03515625 C-259.29582031 35.37417969 -258.62679687 35.71320313 -257.9375 36.0625 C-257.26589844 36.40410156 -256.59429687 36.74570312 -255.90234375 37.09765625 C-250.59727561 39.61402327 -245.15488335 40.0164058 -239.55078125 38.2109375 C-235.71467972 36.54968362 -232.17650818 34.76218103 -229 32 C-226.78537326 33.06630176 -224.70583833 34.18578632 -222.625 35.5 C-216.50626487 38.99642008 -210.53324033 40.03855171 -203.6640625 38.46484375 C-199.02772237 37.05545796 -195.59393796 35.36207099 -192 32 C-189.43365172 33.23184718 -187.00041934 34.5986838 -184.5625 36.0625 C-178.96710689 39.25817038 -173.06200709 39.94919753 -166.7265625 38.46875 C-162.06775007 37.04479404 -158.61562873 35.38236236 -155 32 C-152.42090014 33.23796793 -149.96031405 34.60747556 -147.5 36.0625 C-141.78419356 39.31313834 -136.11501685 39.93273715 -129.65625 38.46875 C-125.02635687 37.04891611 -121.59243611 35.36066604 -118 32 C-115.87438655 33.04091826 -113.79514987 34.11675396 -111.73828125 35.2890625 C-105.02748812 38.98486162 -100.1089451 40.17062572 -92.61328125 38.453125 C-87.98892407 37.07728319 -84.57423586 35.34364 -81 32 C-78.87438655 33.04091826 -76.79514987 34.11675396 -74.73828125 35.2890625 C-68.02748812 38.98486162 -63.1089451 40.17062572 -55.61328125 38.453125 C-50.98892407 37.07728319 -47.57423586 35.34364 -44 32 C-41.87438655 33.04091826 -39.79514987 34.11675396 -37.73828125 35.2890625 C-30.1998063 39.44068638 -24.65077861 40.19949958 -16.375 37.875 C-8.34480968 34.83919634 -4.49797194 29.92774747 -0.9453125 22.26953125 C0.6895025 18.34462416 1.13555799 15.35875434 1.125 11.125 C1.12886719 9.58199219 1.12886719 9.58199219 1.1328125 8.0078125 C1.00995061 5.225352 0.62944236 2.70760126 0 0 Z " transform="translate(411,397)" style="fill: #FE9FB6;"/><path d="M0 0 C0.33 0 0.66 0 1 0 C0.93039063 1.55847656 0.93039063 1.55847656 0.859375 3.1484375 C0.51310534 14.1563765 1.45886217 23.08761466 9.28515625 31.53125 C14.40541682 35.91671235 20.88022391 38.36392608 27.60546875 38.2890625 C33.53488949 37.57327598 40.01793288 35.61708115 44 31 C46.01507538 32.00528369 48.02795722 33.01422008 50.03515625 34.03515625 C50.70417969 34.37417969 51.37320313 34.71320313 52.0625 35.0625 C52.73410156 35.40410156 53.40570313 35.74570312 54.09765625 36.09765625 C59.40272439 38.61402327 64.84511665 39.0164058 70.44921875 37.2109375 C74.28532028 35.54968362 77.82349182 33.76218103 81 31 C83.21462674 32.06630176 85.29416167 33.18578632 87.375 34.5 C93.49373513 37.99642008 99.46675967 39.03855171 106.3359375 37.46484375 C110.97227763 36.05545796 114.40606204 34.36207099 118 31 C120.56634828 32.23184718 122.99958066 33.5986838 125.4375 35.0625 C131.03289311 38.25817038 136.93799291 38.94919753 143.2734375 37.46875 C147.93224993 36.04479404 151.38437127 34.38236236 155 31 C157.57909986 32.23796793 160.03968595 33.60747556 162.5 35.0625 C168.21580644 38.31313834 173.88498315 38.93273715 180.34375 37.46875 C184.97364313 36.04891611 188.40756389 34.36066604 192 31 C194.12561345 32.04091826 196.20485013 33.11675396 198.26171875 34.2890625 C204.97251188 37.98486162 209.8910549 39.17062572 217.38671875 37.453125 C222.01107593 36.07728319 225.42576414 34.34364 229 31 C231.12561345 32.04091826 233.20485013 33.11675396 235.26171875 34.2890625 C241.97251188 37.98486162 246.8910549 39.17062572 254.38671875 37.453125 C259.01107593 36.07728319 262.42576414 34.34364 266 31 C268.12561345 32.04091826 270.20485013 33.11675396 272.26171875 34.2890625 C279.8001937 38.44068638 285.34922139 39.19949958 293.625 36.875 C301.28923081 33.97754689 305.58769908 29.17588619 309 21.8125 C310.71283148 16.99516146 311.41709387 12.06345327 312 7 C316.42282212 12.59820225 317.48303904 18.42514189 317.3125 25.44921875 C316.42184355 32.71920201 312.43576393 39.18683458 307 44 C300.18437052 48.6481148 293.358911 51.07202671 285 50 C279.77381142 48.4124961 275.27605469 46.42280524 271 43 C268.74378837 44.08632412 266.62646456 45.23345965 264.5 46.5625 C257.90386846 50.35527563 248.7365094 50.06479669 241.48046875 48.43359375 C237.72351636 47.06155186 234.39955959 45.07460303 231 43 C230.32453125 43.42152344 229.6490625 43.84304688 228.953125 44.27734375 C227.61507812 45.09912109 227.61507812 45.09912109 226.25 45.9375 C224.92742187 46.75541016 224.92742187 46.75541016 223.578125 47.58984375 C218.58978504 50.31831454 213.59680481 50.64411128 208 50 C202.75303612 48.44818931 198.28371202 46.42108809 194 43 C191.74378837 44.08632412 189.62646456 45.23345965 187.5 46.5625 C180.86676011 50.37661294 171.70946688 50.0299739 164.41015625 48.43359375 C160.90878672 47.18822768 158.49953673 45.69587496 156 43 C154.02727284 43.96890582 152.09204968 44.94517041 150.203125 46.0703125 C142.91162858 50.00772056 135.03322731 50.12803593 127 49 C123.99737867 47.62866479 121.60389424 46.1534133 119.015625 44.1171875 C118.01789063 43.56417969 118.01789063 43.56417969 117 43 C114.93427543 43.63348429 114.93427543 43.63348429 113 45 C111.48330259 45.6965768 109.96234013 46.38393324 108.4375 47.0625 C107.67308594 47.40410156 106.90867187 47.74570312 106.12109375 48.09765625 C99.10775787 51.08123008 93.05356097 50.46432827 86.0546875 47.93359375 C83.3208714 46.69142255 81.18503514 45.04406513 79 43 C78.14921875 43.43119141 78.14921875 43.43119141 77.28125 43.87109375 C75.0387716 44.98081337 72.78130665 46.03513074 70.5 47.0625 C69.7471875 47.40410156 68.994375 47.74570312 68.21875 48.09765625 C61.51793375 50.82281215 55.51024492 50.80271486 48.8125 48.1875 C45.37385945 46.69865871 42.12548787 45.08365858 39 43 C38.46890625 43.34933594 37.9378125 43.69867188 37.390625 44.05859375 C36.33101562 44.74115234 36.33101562 44.74115234 35.25 45.4375 C34.55390625 45.88996094 33.8578125 46.34242188 33.140625 46.80859375 C26.56032672 50.47098604 16.65371465 50.19955999 9.484375 48.3515625 C1.59104242 44.71565734 -3.92908053 38.00750507 -7 30 C-9.73388966 20.69743586 -7.24860656 13.14601242 -2.84375 4.8125 C-1.92776092 3.18989077 -0.96881852 1.59163042 0 0 Z " transform="translate(101,398)" style="fill: #FEC2B1;"/><path d="M0 0 C4.07769501 1.49313367 7.64388825 3.47405492 11.375 5.6875 C23.42589254 12.67947997 35.68458979 17.91561013 49 22 C50.04414063 22.32097656 51.08828125 22.64195312 52.1640625 22.97265625 C54.43879821 23.66148467 56.71872023 24.33316438 59 25 C59 30.61 59 36.22 59 42 C39.84931373 39.84554779 21.30491692 29.99451625 9 15 C0 2.46315789 0 2.46315789 0 0 Z " transform="translate(241,273)" style="fill: #413578;"/></svg>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: visioncortex VTracer -->
<svg id="svg" version="1.1" xmlns="http://www.w3.org/2000/svg" style="display: block;" viewBox="0 0 512 512"><path d="M0 0 C7.6294558 3.09666147 12.63201091 10.6173878 15.9921875 17.80859375 C21.26713269 32.83857458 18.08561228 49.98608669 11.8046875 64.18359375 C9.81965511 67.93091967 7.64875194 69.93432306 4.33984375 72.53515625 C0.76896185 76.04289737 -0.55171048 78.54659249 -0.78697205 83.59750366 C-0.77699253 87.34474366 -0.60896185 91.0687976 -0.3828125 94.80859375 C-0.24078821 97.80796518 -0.12625106 100.80737557 -0.03125 103.80859375 C-0.0066571 104.5466626 0.01793579 105.28473145 0.04327393 106.04516602 C0.20035009 114.1076769 -0.20930757 124.51262885 -4.03916931 131.76036072 C-5.10816253 134.02078772 -5.29543842 135.569866 -5.37084961 138.05688477 C-5.40119293 138.89135132 -5.43153625 139.72581787 -5.46279907 140.58557129 C-5.48667694 141.48545776 -5.51055481 142.38534424 -5.53515625 143.3125 C-5.60369748 145.25725078 -5.67247291 147.20199332 -5.74145508 149.14672852 C-5.77429596 150.1635672 -5.80713684 151.18040588 -5.8409729 152.22805786 C-8.01678864 217.77045009 -8.01678864 217.77045009 -20.0078125 238.80859375 C-20.45898438 239.62585938 -20.91015625 240.443125 -21.375 241.28515625 C-26.31160323 249.47724917 -32.68126469 253.01933247 -41.84375 255.31640625 C-47.91282146 256.26048403 -53.87225249 255.97746237 -60.0078125 255.80859375 C-59.6778125 265.04859375 -59.3478125 274.28859375 -59.0078125 283.80859375 C-57.0278125 283.47859375 -55.0478125 283.14859375 -53.0078125 282.80859375 C-50.85613184 285.90874489 -48.71249257 289.01437187 -46.5703125 292.12109375 C-45.95865234 293.00216797 -45.34699219 293.88324219 -44.71679688 294.79101562 C-44.13349609 295.63857422 -43.55019531 296.48613281 -42.94921875 297.359375 C-42.40982666 298.13966064 -41.87043457 298.91994629 -41.31469727 299.72387695 C-40.0078125 301.80859375 -40.0078125 301.80859375 -39.0078125 304.80859375 C-37.06959129 305.54414516 -37.06959129 305.54414516 -34.7578125 305.87109375 C-32.18788131 306.35925964 -29.99666818 306.81316578 -27.5703125 307.80859375 C-25.16410341 308.74760217 -23.1207055 309.16273998 -20.5859375 309.58984375 C-14.48508465 310.78636973 -8.93219474 312.95299309 -3.1953125 315.30859375 C-2.10581299 315.75219238 -1.01631348 316.19579102 0.10620117 316.65283203 C21.50238225 325.46916106 43.49901313 335.33888358 60.9921875 350.80859375 C61.765625 351.44023437 62.5390625 352.071875 63.3359375 352.72265625 C72.30864585 360.22982224 77.58781487 369.06984251 81.9921875 379.80859375 C82.58580078 381.08283203 82.58580078 381.08283203 83.19140625 382.3828125 C84.09881494 385.13159686 84.11496717 386.17086734 82.9921875 388.80859375 C81.64453125 390.6328125 81.64453125 390.6328125 79.9296875 392.49609375 C79.29804688 393.18960937 78.66640625 393.883125 78.015625 394.59765625 C77.01402344 395.69207031 77.01402344 395.69207031 75.9921875 396.80859375 C75.02152344 397.93394531 75.02152344 397.93394531 74.03125 399.08203125 C70.29434291 403.40975369 66.45878282 407.33625 62.0859375 411.01953125 C60.6587794 412.2390059 59.26347271 413.49652227 57.8984375 414.78515625 C44.82652604 427.09603177 29.51334841 436.89054274 13.9921875 445.80859375 C13.25983887 446.23237305 12.52749023 446.65615234 11.77294922 447.09277344 C-11.65985086 460.49030053 -37.35401596 468.86368051 -63.7578125 474.05859375 C-64.90697144 474.28554932 -64.90697144 474.28554932 -66.0793457 474.51708984 C-81.00546475 477.26137474 -95.91803816 478.18954152 -111.0703125 478.12109375 C-111.91609863 478.11927094 -112.76188477 478.11744812 -113.63330078 478.11557007 C-127.9283677 478.06400274 -141.90288008 477.27862754 -156.0078125 474.80859375 C-157.38718994 474.5751123 -157.38718994 474.5751123 -158.79443359 474.33691406 C-198.77205778 467.32034734 -237.25464558 450.05420757 -269.0078125 424.80859375 C-269.9153125 424.09316406 -270.8228125 423.37773437 -271.7578125 422.640625 C-281.62655972 414.72039463 -290.98169118 406.15683226 -299.79296875 397.07421875 C-301.17192382 395.66364742 -302.59143438 394.29031094 -304.06640625 392.98046875 C-305.83137039 391.29805304 -307.01945864 390.03835826 -308.0078125 387.80859375 C-307.84618862 384.11710438 -306.52141111 381.14517434 -305.0078125 377.80859375 C-304.39292969 376.34486328 -304.39292969 376.34486328 -303.765625 374.8515625 C-297.20874732 360.42272716 -284.97030781 349.77258402 -271.6328125 341.62109375 C-270.73780029 341.07283936 -269.84278809 340.52458496 -268.9206543 339.9597168 C-253.28084814 330.59557797 -236.69392804 323.03070876 -219.6953125 316.49609375 C-218.62547119 316.08254639 -217.55562988 315.66899902 -216.45336914 315.24291992 C-211.33983648 313.30637184 -206.25725636 311.55458272 -200.98046875 310.1171875 C-187.03916496 306.12926893 -181.040389 300.51870463 -173.6875 288 C-173.26194824 287.21826416 -172.83639648 286.43652832 -172.39794922 285.63110352 C-171.0078125 283.80859375 -171.0078125 283.80859375 -167.0078125 282.80859375 C-167.0078125 251.12859375 -167.0078125 219.44859375 -167.0078125 186.80859375 C-168.9878125 186.80859375 -170.9678125 186.80859375 -173.0078125 186.80859375 C-185.2969042 179.65857676 -188.74289424 160.46960239 -192.23046875 147.6953125 C-206.82294413 92.06405484 -206.82294413 92.06405484 -195.37109375 69.59765625 C-193.85228289 67.00780708 -193.85228289 67.00780708 -194.0078125 64.68359375 C-196.5004182 60.00995805 -201.73912639 57.77367275 -206.3203125 55.55859375 C-207.38894531 55.0378125 -208.45757812 54.51703125 -209.55859375 53.98046875 C-210.36683594 53.59375 -211.17507812 53.20703125 -212.0078125 52.80859375 C-208.41295732 49.21373857 -204.29455785 49.62393848 -199.3828125 49.55859375 C-193.11057597 49.58483742 -187.84153425 50.55037888 -182.0078125 52.80859375 C-183.95650417 47.30640551 -186.56659995 43.73939538 -190.58203125 39.5078125 C-192.0078125 37.80859375 -192.0078125 37.80859375 -192.0078125 35.80859375 C-177.71781228 35.11434273 -177.71781228 35.11434273 -171.5078125 38.30859375 C-167.84822711 39.82585251 -166.58836638 40.03480217 -162.83984375 38.57421875 C-161.01429577 37.57492774 -159.24029709 36.509939 -157.4621582 35.42871094 C-134.32869732 21.59603787 -104.2210965 18.22963215 -77.859375 16.1328125 C-39.71718431 13.25459139 -39.71718431 13.25459139 -3.87670898 0.69970703 C-2.0078125 -0.19140625 -2.0078125 -0.19140625 0 0 Z " transform="translate(368.0078125,34.19140625)" style="fill: #FE937D;"/><path d="M0 0 C0.56041992 0.57347168 1.12083984 1.14694336 1.69824219 1.73779297 C4.45548105 4.44765459 7.50647436 6.27578477 10.828125 8.1953125 C11.82132751 8.77955238 11.82132751 8.77955238 12.83459473 9.37559509 C14.97001579 10.63067505 17.11001001 11.87772968 19.25 13.125 C22.1580445 14.83159109 25.06350882 16.54254828 27.96875 18.25390625 C28.67489441 18.6692009 29.38103882 19.08449554 30.10858154 19.51237488 C35.99919677 22.98281653 41.8204865 26.55343131 47.58300781 30.23291016 C50.32692655 31.98132674 53.05147931 33.6187755 56 35 C56.20625 34.22914063 56.4125 33.45828125 56.625 32.6640625 C58.53616998 27.57122885 61.25624862 23.0600849 64 18.375 C65.08420838 16.50832047 66.16757479 14.64115159 67.25 12.7734375 C67.72953125 11.95278809 68.2090625 11.13213867 68.703125 10.28662109 C69.87510448 8.220213 70.96069333 6.13560363 72 4 C72.66 4 73.32 4 74 4 C74.4439209 4.80219971 74.8878418 5.60439941 75.34521484 6.4309082 C76.99539098 9.41146057 78.64671868 12.39136875 80.29882812 15.37084961 C81.01315724 16.65965619 81.72702857 17.94871662 82.44042969 19.23803711 C83.46689056 21.0929577 84.49500304 22.94695433 85.5234375 24.80078125 C86.14138184 25.91622314 86.75932617 27.03166504 87.39599609 28.1809082 C88.52431536 30.16396796 89.73440432 32.10160648 91 34 C94.60061056 32.6544027 97.79285589 31.04189996 101.078125 29.05078125 C102.55551147 28.15975708 102.55551147 28.15975708 104.06274414 27.25073242 C105.11453857 26.61111572 106.16633301 25.97149902 107.25 25.3125 C109.48283976 23.96055234 111.71592021 22.60900216 113.94921875 21.2578125 C114.80917702 20.73658058 114.80917702 20.73658058 115.68650818 20.20481873 C119.84329638 17.68850019 124.02054978 15.20871956 128.20703125 12.7421875 C129.36764383 12.05580382 130.52812767 11.36920241 131.68847656 10.68237305 C133.91508856 9.36590079 136.14485383 8.05474543 138.37792969 6.74926758 C139.37856445 6.15525146 140.37919922 5.56123535 141.41015625 4.94921875 C142.29840088 4.42674561 143.18664551 3.90427246 144.10180664 3.3659668 C144.72821045 2.91519775 145.35461426 2.46442871 146 2 C146 1.34 146 0.68 146 0 C154.2365416 1.6867863 154.2365416 1.6867863 157.4375 3 C159.84370909 3.93900842 161.887107 4.35414623 164.421875 4.78125 C170.52272785 5.97777598 176.07561776 8.14439934 181.8125 10.5 C182.90199951 10.94359863 183.99149902 11.38719727 185.11401367 11.84423828 C206.51019475 20.66056731 228.50682563 30.53028983 246 46 C246.7734375 46.63164062 247.546875 47.26328125 248.34375 47.9140625 C257.31645835 55.42122849 262.59562737 64.26124876 267 75 C267.39574219 75.84949219 267.79148437 76.69898438 268.19921875 77.57421875 C269.10662744 80.32300311 269.12277967 81.36227359 268 84 C266.65234375 85.82421875 266.65234375 85.82421875 264.9375 87.6875 C264.30585938 88.38101563 263.67421875 89.07453125 263.0234375 89.7890625 C262.35570312 90.51867187 261.68796875 91.24828125 261 92 C260.02933594 93.12535156 260.02933594 93.12535156 259.0390625 94.2734375 C255.30215541 98.60115994 251.46659532 102.52765625 247.09375 106.2109375 C245.6665919 107.43041215 244.27128521 108.68792852 242.90625 109.9765625 C229.83433854 122.28743802 214.52116091 132.08194899 199 141 C198.26765137 141.4237793 197.53530273 141.84755859 196.78076172 142.28417969 C173.34796164 155.68170678 147.65379654 164.05508676 121.25 169.25 C120.10084106 169.47695557 120.10084106 169.47695557 118.9284668 169.70849609 C104.00234775 172.45278099 89.08977434 173.38094777 73.9375 173.3125 C73.09171387 173.31067719 72.24592773 173.30885437 71.37451172 173.30697632 C57.0794448 173.25540899 43.10493242 172.47003379 29 170 C28.08041504 169.8443457 27.16083008 169.68869141 26.21337891 169.52832031 C-13.76424528 162.51175359 -52.24683308 145.24561382 -84 120 C-84.9075 119.28457031 -85.815 118.56914062 -86.75 117.83203125 C-96.61874722 109.91180088 -105.97387868 101.34823851 -114.78515625 92.265625 C-116.16411132 90.85505367 -117.58362188 89.48171719 -119.05859375 88.171875 C-120.82355789 86.48945929 -122.01164614 85.22976451 -123 83 C-122.83837612 79.30851063 -121.51359861 76.33658059 -120 73 C-119.59007812 72.02417969 -119.18015625 71.04835938 -118.7578125 70.04296875 C-112.20093482 55.61413341 -99.96249531 44.96399027 -86.625 36.8125 C-85.28248169 35.99011841 -85.28248169 35.99011841 -83.9128418 35.15112305 C-64.35489312 23.44104527 -43.39269722 14.72694514 -22 7 C-20.99565918 6.63583984 -19.99131836 6.27167969 -18.95654297 5.89648438 C-2.61724463 0 -2.61724463 0 0 0 Z " transform="translate(183,339)" style="fill: #3C3277;"/><path d="M0 0 C7.6294558 3.09666147 12.63201091 10.6173878 15.9921875 17.80859375 C21.26713269 32.83857458 18.08561228 49.98608669 11.8046875 64.18359375 C9.81965511 67.93091967 7.64875194 69.93432306 4.33984375 72.53515625 C0.76896185 76.04289737 -0.55171048 78.54659249 -0.78697205 83.59750366 C-0.77699253 87.34474366 -0.60896185 91.0687976 -0.3828125 94.80859375 C-0.24078829 97.80796347 -0.12591492 100.8073652 -0.03125 103.80859375 C-0.0073822 104.5473877 0.0164856 105.28618164 0.04107666 106.04736328 C0.14339613 111.51750803 -0.36276036 116.73305672 -1.296875 122.12109375 C-1.41606293 122.82041016 -1.53525085 123.51972656 -1.65805054 124.24023438 C-2.44375839 128.28508538 -3.50569325 131.51262944 -6.0078125 134.80859375 C-6.9978125 135.13859375 -7.9878125 135.46859375 -9.0078125 135.80859375 C-9.72291425 129.33105955 -10.4346495 122.85316182 -11.14404297 116.375 C-11.38577982 114.17113868 -11.62828787 111.96736182 -11.87158203 109.76367188 C-12.22110419 106.59657311 -12.56785397 103.42918124 -12.9140625 100.26171875 C-13.07811584 98.78339569 -13.07811584 98.78339569 -13.2454834 97.27520752 C-13.34558716 96.35455505 -13.44569092 95.43390259 -13.54882812 94.48535156 C-13.63765259 93.67704895 -13.72647705 92.86874634 -13.81799316 92.03594971 C-13.99433832 89.96670091 -14.0078125 87.88534318 -14.0078125 85.80859375 C-14.80960938 86.17210938 -15.61140625 86.535625 -16.4375 86.91015625 C-41.17851078 97.85005897 -66.24906794 102.47408703 -93.0078125 105.80859375 C-93.89597656 105.92114502 -94.78414063 106.03369629 -95.69921875 106.1496582 C-101.18858776 106.75148099 -106.61529084 106.84647879 -112.1328125 106.765625 C-113.21254333 106.75048103 -113.21254333 106.75048103 -114.31408691 106.73503113 C-117.29508138 106.6893461 -120.27552982 106.64041876 -123.25585938 106.56176758 C-131.71745162 106.35022777 -139.0844477 106.47391109 -147.00390625 109.94018555 C-149.0078125 110.80859375 -149.0078125 110.80859375 -151.0078125 110.80859375 C-149.09753509 132.60979584 -149.09753509 132.60979584 -142.88671875 153.4765625 C-142.0078125 155.80859375 -142.0078125 155.80859375 -142.0078125 158.80859375 C-145.6378125 158.80859375 -149.2678125 158.80859375 -153.0078125 158.80859375 C-153.15476562 157.34099609 -153.15476562 157.34099609 -153.3046875 155.84375 C-154.17872586 148.18084476 -155.42102249 141.70268364 -159.0078125 134.80859375 C-159.3378125 133.81859375 -159.6678125 132.82859375 -160.0078125 131.80859375 C-165.11697767 129.14437243 -170.33587741 128.44655534 -176.0078125 128.80859375 C-180.82450777 136.42929377 -182.23343646 142.85752039 -181.0078125 151.80859375 C-178.73981295 161.49440835 -174.64020053 169.95172699 -169.77734375 178.56640625 C-168.29490754 181.28256973 -167.07415109 183.91034015 -166.0078125 186.80859375 C-170.12765096 187.31306377 -173.11743775 187.22260208 -176.5078125 184.80859375 C-194.24070316 167.62985592 -200.85095076 122.34965098 -201.68847656 98.32861328 C-201.71413796 87.93024757 -200.13749678 78.9484517 -195.37109375 69.59765625 C-193.85228289 67.00780708 -193.85228289 67.00780708 -194.0078125 64.68359375 C-196.5004182 60.00995805 -201.73912639 57.77367275 -206.3203125 55.55859375 C-207.38894531 55.0378125 -208.45757812 54.51703125 -209.55859375 53.98046875 C-210.36683594 53.59375 -211.17507812 53.20703125 -212.0078125 52.80859375 C-208.41295732 49.21373857 -204.29455785 49.62393848 -199.3828125 49.55859375 C-193.11057597 49.58483742 -187.84153425 50.55037888 -182.0078125 52.80859375 C-183.95650417 47.30640551 -186.56659995 43.73939538 -190.58203125 39.5078125 C-192.0078125 37.80859375 -192.0078125 37.80859375 -192.0078125 35.80859375 C-177.71781228 35.11434273 -177.71781228 35.11434273 -171.5078125 38.30859375 C-167.84822711 39.82585251 -166.58836638 40.03480217 -162.83984375 38.57421875 C-161.01429577 37.57492774 -159.24029709 36.509939 -157.4621582 35.42871094 C-134.32869732 21.59603787 -104.2210965 18.22963215 -77.859375 16.1328125 C-39.71718431 13.25459139 -39.71718431 13.25459139 -3.87670898 0.69970703 C-2.0078125 -0.19140625 -2.0078125 -0.19140625 0 0 Z " transform="translate(368.0078125,34.19140625)" style="fill: #3C3276;"/><path d="M0 0 C5.92863717 1.16651426 11.38798394 2.75519358 17 5 C15.6884381 7.80169326 14.18231361 10.10868981 12.3125 12.5625 C2.96635094 26.66092824 -0.09747763 44.50743544 -4.1484375 60.69140625 C-5.9008549 67.68057454 -7.84355625 74.587537 -9.9375 81.48046875 C-10.92944289 84.76627957 -11.84457316 88.06453313 -12.75 91.375 C-30.0629353 151.83065309 -30.0629353 151.83065309 -51 169 C-51.33 169 -51.66 169 -52 169 C-53.24270122 150.41542324 -54.27708077 131.83046383 -55.1234436 113.22366333 C-55.64376126 101.825002 -56.26675897 90.44531515 -57.0625 79.0625 C-58.22097775 62.39068817 -58.63127637 45.70497912 -59 29 C-57.68 30.65 -56.36 32.3 -55 34 C-51.39938944 32.6544027 -48.20714411 31.04189996 -44.921875 29.05078125 C-43.44448853 28.15975708 -43.44448853 28.15975708 -41.93725586 27.25073242 C-40.88546143 26.61111572 -39.83366699 25.97149902 -38.75 25.3125 C-36.51716024 23.96055234 -34.28407979 22.60900216 -32.05078125 21.2578125 C-31.47747574 20.91032455 -30.90417023 20.56283661 -30.31349182 20.20481873 C-26.15670362 17.68850019 -21.97945022 15.20871956 -17.79296875 12.7421875 C-16.63235617 12.05580382 -15.47187233 11.36920241 -14.31152344 10.68237305 C-12.08491144 9.36590079 -9.85514617 8.05474543 -7.62207031 6.74926758 C-6.62143555 6.15525146 -5.62080078 5.56123535 -4.58984375 4.94921875 C-3.70159912 4.42674561 -2.81335449 3.90427246 -1.89819336 3.3659668 C-1.27178955 2.91519775 -0.64538574 2.46442871 0 2 C0 1.34 0 0.68 0 0 Z " transform="translate(329,339)" style="fill: #6385EE;"/><path d="M0 0 C0.56041992 0.57347168 1.12083984 1.14694336 1.69824219 1.73779297 C4.45548105 4.44765459 7.50647436 6.27578477 10.828125 8.1953125 C11.82132751 8.77955238 11.82132751 8.77955238 12.83459473 9.37559509 C14.97001579 10.63067505 17.11001001 11.87772968 19.25 13.125 C22.1580445 14.83159109 25.06350882 16.54254828 27.96875 18.25390625 C29.02796661 18.87684822 29.02796661 18.87684822 30.10858154 19.51237488 C35.99919677 22.98281653 41.8204865 26.55343131 47.58300781 30.23291016 C50.32692655 31.98132674 53.05147931 33.6187755 56 35 C56.99 32.03 56.99 32.03 58 29 C58.33 29 58.66 29 59 29 C59.45598368 45.49985376 58.61075696 61.79764037 57.48672485 78.25149536 C56.60245841 91.20844955 55.80689138 104.1653971 55.16796875 117.13671875 C55.11761128 118.15815192 55.11761128 118.15815192 55.0662365 119.20022011 C54.7663603 125.30403125 54.4725969 131.40812566 54.18661499 137.51260376 C54.06609193 140.08270258 53.94442471 142.65274807 53.82148743 145.22273254 C53.70940021 147.56812379 53.6000814 149.91364965 53.49406433 152.25932312 C53.23937838 157.56798981 52.87917924 162.75669087 52 168 C35.72347099 152.81546976 29.08622222 116.25487446 23.48046875 95.390625 C21.96015244 89.75461617 20.13747682 84.27517565 18.23046875 78.7578125 C17.03686696 75.11259054 15.99202115 71.45468084 14.9753418 67.75756836 C6.84572156 35.78270784 6.84572156 35.78270784 -10 8 C-13.62473109 6.64164329 -13.62473109 6.64164329 -17 6 C-13.9666221 3.97774806 -11.38655511 3.00652476 -7.9375 1.875 C-6.87402344 1.52179688 -5.81054688 1.16859375 -4.71484375 0.8046875 C-2 0 -2 0 0 0 Z " transform="translate(183,339)" style="fill: #6385EE;"/><path d="M0 0 C6.6503775 2.15290358 13.19422364 4.53613703 19.73046875 7.01171875 C21.76999456 7.77719309 23.8097139 8.54215195 25.84960938 9.30664062 C29.03107712 10.50015292 32.21132039 11.69653507 35.38842773 12.90161133 C38.47829564 14.07235093 41.57261645 15.23057102 44.66796875 16.38671875 C45.6149614 16.74916183 46.56195404 17.11160492 47.53764343 17.48503113 C57.15906136 21.05393985 62.7147018 19.69324669 72.1640625 16.1328125 C73.23369232 15.73802704 74.30332214 15.34324158 75.40536499 14.93649292 C78.81534548 13.67504563 82.22004275 12.39993526 85.625 11.125 C87.92416846 10.27389976 90.22364449 9.42362992 92.5234375 8.57421875 C94.71642231 7.76116199 96.90913999 6.94738428 99.1015625 6.1328125 C100.13391022 5.74940704 101.16625793 5.36600159 102.22988892 4.97097778 C103.19123749 4.61075531 104.15258606 4.25053284 105.14306641 3.87939453 C105.98656647 3.56406769 106.83006653 3.24874084 107.6991272 2.92385864 C110.00469787 2.04436095 110.00469787 2.04436095 112.11605835 0.88253784 C114 0 114 0 117 0 C118.50219727 1.66479492 118.50219727 1.66479492 120.06640625 3.98046875 C120.63423828 4.81513672 121.20207031 5.64980469 121.78710938 6.50976562 C122.37298828 7.39341797 122.95886719 8.27707031 123.5625 9.1875 C124.44711914 10.48397461 124.44711914 10.48397461 125.34960938 11.80664062 C128.03440851 15.79260521 130.32710701 19.47343663 132 24 C131.2879541 24.43119141 130.5759082 24.86238281 129.84228516 25.30664062 C127.06624709 26.98833456 124.29081639 28.67102477 121.51559448 30.35406494 C119.62304825 31.501183 117.7296294 32.64685124 115.83618164 33.79248047 C109.34640535 37.72378578 102.87977748 41.6865544 96.45703125 45.7265625 C94.68607958 46.835569 92.91479061 47.94403534 91.14349365 49.05249023 C89.45451034 50.11430608 87.77237432 51.18698826 86.09033203 52.25976562 C85.0692334 52.89849609 84.04813477 53.53722656 82.99609375 54.1953125 C82.10075928 54.76266113 81.2054248 55.33000977 80.28295898 55.91455078 C78 57 78 57 75 56 C73.40600586 53.67089844 73.40600586 53.67089844 71.71484375 50.609375 C71.10189453 49.50722656 70.48894531 48.40507812 69.85742188 47.26953125 C69.54216553 46.69154785 69.22690918 46.11356445 68.90209961 45.51806641 C67.94619502 43.76593757 66.97608142 42.0215852 66.00585938 40.27734375 C63.41546981 35.58789247 60.89282716 31.02068231 59 26 C58.34 26 57.68 26 57 26 C56.73719238 26.86512207 56.47438477 27.73024414 56.20361328 28.62158203 C54.99425254 32.01613254 53.51790329 34.92297055 51.7421875 38.0546875 C50.80439453 39.71757812 50.80439453 39.71757812 49.84765625 41.4140625 C49.19667969 42.55617188 48.54570312 43.69828125 47.875 44.875 C47.20915523 46.05181177 46.54378604 47.22889276 45.87890625 48.40625 C44.25725735 51.27351326 42.63082801 54.13795084 41 57 C37.25149374 55.84297916 34.00817399 54.59433167 30.69921875 52.48828125 C29.89863037 51.98474121 29.09804199 51.48120117 28.27319336 50.96240234 C27.41991455 50.41793457 26.56663574 49.8734668 25.6875 49.3125 C23.82921578 48.14279655 21.96978809 46.97490825 20.109375 45.80859375 C19.12646484 45.19226074 18.14355469 44.57592773 17.13085938 43.94091797 C10.53359386 39.85106606 3.85056891 35.90158153 -2.82348633 31.9387207 C-3.8317749 31.33761475 -4.84006348 30.73650879 -5.87890625 30.1171875 C-6.7716626 29.58722168 -7.66441895 29.05725586 -8.58422852 28.51123047 C-10.82253579 27.11101602 -12.91620899 25.61894299 -15 24 C-14.36791079 20.588948 -13.06208716 18.32684002 -11.09375 15.48828125 C-10.22556641 14.22854492 -10.22556641 14.22854492 -9.33984375 12.94335938 C-8.73269531 12.07517578 -8.12554687 11.20699219 -7.5 10.3125 C-6.89285156 9.43271484 -6.28570312 8.55292969 -5.66015625 7.64648438 C-1.1896734 1.1896734 -1.1896734 1.1896734 0 0 Z " transform="translate(198,317)" style="fill: #F9E2DB;"/><path d="M0 0 C3.90520527 1.47257278 7.50274954 3.29536534 11.1875 5.25 C26.29002991 12.97073965 42.30836492 16.6154807 59 19 C59 25.93 59 32.86 59 40 C41.38871408 36.08638091 26.39254307 28.01838963 13 16 C12.33226562 15.40316406 11.66453125 14.80632812 10.9765625 14.19140625 C6.51596817 9.97429414 3.22267306 5.20585648 0 0 Z " transform="translate(249,270)" style="fill: #41203D;"/><path d="M0 0 C0.66 0 1.32 0 2 0 C4.1681511 3.65389428 6.30530193 7.32502825 8.4375 11 C9.04916016 12.02996094 9.66082031 13.05992187 10.29101562 14.12109375 C13.62610766 19.90683352 15.82502997 24.29281554 16 31 C16.03222656 31.9796875 16.06445312 32.959375 16.09765625 33.96875 C16.08605469 34.8040625 16.07445312 35.639375 16.0625 36.5 C16.05347656 37.3559375 16.04445313 38.211875 16.03515625 39.09375 C16.02355469 39.7228125 16.01195312 40.351875 16 41 C12.29102741 39.60582632 8.92161688 37.92181521 5.48046875 35.9609375 C4.45888672 35.38085938 3.43730469 34.80078125 2.38476562 34.203125 C1.32966797 33.59984375 0.27457031 32.9965625 -0.8125 32.375 C-1.88693359 31.76398438 -2.96136719 31.15296875 -4.06835938 30.5234375 C-6.71386076 29.01844115 -9.3576625 27.51054209 -12 26 C-11.46615777 21.81956382 -10.56650747 18.70393276 -8.49609375 15.0390625 C-8.00302734 14.15605469 -7.50996094 13.27304687 -7.00195312 12.36328125 C-6.48568359 11.45964844 -5.96941406 10.55601562 -5.4375 9.625 C-4.91736328 8.69816406 -4.39722656 7.77132813 -3.86132812 6.81640625 C-2.58212166 4.53965346 -1.29487762 2.26786477 0 0 Z " transform="translate(255,343)" style="fill: #241D4B;"/></svg>
......@@ -4,6 +4,7 @@ import { useRoute, useRouter } from 'vue-router'
import { watch, onMounted, computed, ref, nextTick, onUnmounted } from 'vue'
import ModelDropdown from './ModelDropdown.vue'
import MediaTemplate from './MediaTemplate.vue'
import Voice_tts from './Voice_tts.vue'
// Props
const props = defineProps({
......@@ -26,6 +27,35 @@ const screenSize = ref('large') // 'small' 或 'large'
// 拖拽状态
const isDragOver = ref(false)
// 语音合成模态框状态
const showVoiceTTSModal = ref(false)
// 处理语音合成完成后的回调
const handleTTSComplete = (audioBlob) => {
// 创建File对象
const audioFile = new File([audioBlob], 'tts_audio.mp3', { type: 'audio/mpeg' })
// 模拟文件上传事件
const dataTransfer = new DataTransfer()
dataTransfer.items.add(audioFile)
const fileList = dataTransfer.files
const event = {
target: {
files: fileList
}
}
// 处理音频上传
handleAudioUpload(event)
// 关闭模态框
showVoiceTTSModal.value = false
// 显示成功提示
showAlert('语音合成完成,已自动添加到音频素材', 'success')
}
// 获取随机精选模版
const refreshRandomTemplates = async () => {
const randomTemplates = await getRandomFeaturedTemplates(10) // 获取10个模版
......@@ -420,7 +450,7 @@ onUnmounted(() => {
<!-- 展开开关 -->
<div class="relative group cursor-pointer max-w-3/5" @click="expandCreationArea">
<button
class="relative w-full bg-dark-light/80 border border-laser-purple rounded-full pl-10 pr-10 py-6 text-base hover:border-laser-purple transition-all duration-300 resize-none hover:shadow-2xl"
class="cursor-pointer relative bg-dark-light/80 border border-laser-purple rounded-full pl-10 pr-10 py-6 text-base text-white hover:border-laser-purple hover:bg-laser-purple hover:text-gray-900 hover:shadow-2xl hover:-translate-y-1 transition-all duration-300 resize-none min-w-[250px] max-w-[400px] group"
>
<i class="fi fi-sr-cursor-finger-click text-lg text-gradient-icon transition-all duration-300 pointer-events-none group-hover:drop-shadow-[0_0_8px_rgba(168,85,247,0.6)] group-hover:animate-pulse"></i>
<span class="pl-2 text-base font-bold text-gradient-icon transition-all duration-300 pointer-events-none group-hover:drop-shadow-[0_0_8px_rgba(168,85,247,0.6)] group-hover:animate-pulse">{{ t('startCreatingVideo') }}</span>
......@@ -436,7 +466,7 @@ onUnmounted(() => {
<!-- 中心文字 -->
<div class="text-center">
<h2 class="text-4xl font-bold text-laser-purple mb-6 animate-fade-in">{{ t('whatMaterialsDoYouNeed') }}</h2>
<h2 class="text-3xl sm:text-3xl md:text-3xl lg:text-4xl font-bold text-laser-purple mb-6 animate-fade-in">{{ t('whatMaterialsDoYouNeed') }}</h2>
<p class="text-gray-400 text-lg mb-8 transition-all duration-300">
<span v-if="selectedTaskId === 't2v'"
......@@ -584,6 +614,14 @@ onUnmounted(() => {
</button>
<span class="text-xs text-gray-300">{{ isRecording ? formatRecordingDuration(recordingDuration) : t('recordAudio') }}</span>
</div>
<div class="flex flex-col items-center space-y-2">
<button @click.stop="showVoiceTTSModal = true"
class="w-12 h-12 flex items-center justify-center bg-white/15 text-white p-3 rounded-full transition-all duration-200 hover:scale-110 shadow-lg"
title="语音合成">
<i class="fas fa-volume-up text-lg"></i>
</button>
<span class="text-xs text-gray-300">语音合成</span>
</div>
</div>
</div>
......@@ -650,13 +688,14 @@ onUnmounted(() => {
<!-- 提交按钮 -->
<div class="flex justify-center mt-6">
<button @click="submitTask" :disabled="submitting || templateLoading"
class="generate-button btn-primary"
:class="{ 'disabled': submitting || templateLoading }">
class="cursor-pointer relative bg-dark-light/80 border border-laser-purple rounded-full pl-10 pr-10 py-6 text-base text-white hover:border-laser-purple hover:bg-laser-purple hover:text-gray-900 hover:shadow-2xl hover:-translate-y-1 transition-all duration-300 resize-none min-w-[250px] max-w-[400px] group"
:class="{ 'disabled': submitting || templateLoading }">
<i v-if="submitting" class="fas fa-spinner fa-spin text-xl mr-3"></i>
<i v-else-if="templateLoading" class="fas fa-spinner fa-spin text-xl mr-3"></i>
<i v-else class="fas fa-play text-xl mr-3"></i>
{{ submitting ? t('submitting') : templateLoading ? '模板加载中...' : t('generateVideo') }}
</button>
<i v-else class="fi fi-sr-cursor-finger-click text-lg text-gradient-icon transition-all duration-300 pointer-events-none group-hover:drop-shadow-[0_0_8px_rgba(168,85,247,0.6)] group-hover:animate-pulse"></i>
<span class="pl-2 text-base font-bold text-gradient-icon transition-all duration-300 pointer-events-none group-hover:drop-shadow-[0_0_8px_rgba(168,85,247,0.6)] group-hover:animate-pulse">{{ submitting ? t('submitting') : templateLoading ? '模板加载中...' : t('generateVideo') }}</span>
</button>
</div>
</div>
......@@ -767,61 +806,44 @@ onUnmounted(() => {
</div>
<MediaTemplate />
<!-- 语音合成模态框 -->
<div v-if="showVoiceTTSModal" class="fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm">
<div class="relative w-full h-full max-w-8xl max-h-[100vh] mx-4 my-8 bg-gray-900 rounded-xl shadow-2xl overflow-hidden">
<Voice_tts @tts-complete="handleTTSComplete" @close-modal="showVoiceTTSModal = false" />
</div>
</div>
</template>
<style scoped>
/* 生成按钮样式 - 简约大气 */
.generate-button {
padding: 1rem 3rem;
background: #8b5cf6;
border: none;
border-radius: 0.5rem;
color: white;
font-size: 1.125rem;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
display: flex;
align-items: center;
justify-content: center;
min-width: 200px;
letter-spacing: 0.025em;
/* 简约阴影 */
box-shadow: 0 4px 12px rgba(139, 92, 246, 0.3);
}
.generate-button:hover:not(.disabled) {
background: #7c3aed;
transform: translateY(-1px);
box-shadow: 0 6px 20px rgba(139, 92, 246, 0.4);
}
.generate-button:active:not(.disabled) {
transform: translateY(0);
box-shadow: 0 2px 8px rgba(139, 92, 246, 0.3);
}
.generate-button.disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none;
background: #6b7280;
box-shadow: 0 2px 8px rgba(107, 114, 128, 0.2);
/* 脉冲动画 */
@keyframes pulse {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0.7;
}
}
.generate-button.disabled:hover {
transform: none;
box-shadow: 0 2px 8px rgba(107, 114, 128, 0.2);
/* 按钮禁用状态样式 */
button.disabled {
opacity: 0.5 !important;
cursor: not-allowed !important;
transform: none !important;
background: rgba(31, 41, 55, 0.8) !important;
border-color: #6b7280 !important;
box-shadow: none !important;
color: #ffffff !important;
}
/* 响应式设计 */
@media (max-width: 768px) {
.generate-button {
padding: 0.875rem 2.5rem;
font-size: 1rem;
min-width: 180px;
}
button.disabled:hover {
transform: none !important;
background: rgba(31, 41, 55, 0.8) !important;
border-color: #6b7280 !important;
box-shadow: none !important;
color: #ffffff !important;
}
/* 拖拽样式 */
......
......@@ -15,10 +15,10 @@ const { t, locale } = useI18n()
@click="switchToCreateView"
class="w-18 h-18 flex items-center justify-center rounded-lg transition-all duration-300
font-medium text-sm border border-transparent hover:scale-105 hover:shadow-lg
hover:shadow-laser-purple/20 mobile-nav-btn"
active:scale-105 active:shadow-lg active:shadow-laser-purple/20 mobile-nav-btn"
:class="$route.path === '/generate'
? 'bg-laser-purple/40 text-white border-laser-purple/40 shadow-lg shadow-laser-purple/20'
: 'text-gray-400 hover:text-white hover:bg-dark-light hover:border-laser-purple/30'"
: 'text-gray-400 hover:text-laser-purple active:text-white active:bg-laser-purple active:border-laser-purple/30'"
:title="t('generateVideo')">
<i class="fi fi-sr-add text-3xl transition-transform duration-300 group-hover:animate-pulse"></i>
</div>
......@@ -28,10 +28,10 @@ const { t, locale } = useI18n()
@click="switchToProjectsView"
class="w-18 h-18 flex items-center justify-center rounded-lg transition-all duration-300
font-medium text-sm border border-transparent hover:scale-105 hover:shadow-lg
hover:shadow-laser-purple/20 mobile-nav-btn"
mobile-nav-btn"
:class="$route.path === '/projects'
? 'bg-laser-purple/40 text-white border-laser-purple/40 shadow-lg shadow-laser-purple/20'
: 'text-gray-400 hover:text-white hover:bg-dark-light hover:border-laser-purple/30'"
: 'text-gray-400 hover:text-laser-purple active:text-white active:bg-laser-purple active:border-laser-purple/30'"
:title="t('myProjects')">
<i class="fi fi-br-house-chimney-heart text-3xl transition-transform duration-300 group-hover:animate-pulse"></i>
</div>
......@@ -41,10 +41,10 @@ const { t, locale } = useI18n()
@click="switchToInspirationView"
class="w-18 h-18 flex items-center justify-center rounded-lg transition-all duration-300
font-medium text-sm border border-transparent hover:scale-105 hover:shadow-lg
hover:shadow-laser-purple/40 mobile-nav-btn"
active:scale-105 active:shadow-lg active:shadow-laser-purple/20 mobile-nav-btn"
:class="$route.path === '/inspirations'
? 'bg-laser-purple/40 text-white border-laser-purple/40 shadow-lg shadow-laser-purple/20'
: 'text-gray-400 hover:text-white hover:bg-dark-light hover:border-laser-purple/30'"
: 'text-gray-400 hover:text-laser-purple active:text-white active:bg-laser-purple active:border-laser-purple/30'"
:title="t('inspiration')">
<i class="fi fi-sr-sparkles text-3xl transition-transform duration-300 group-hover:animate-pulse"></i>
......
0<script setup>
<script setup>
import { showTemplateDetailModal,
closeTemplateDetailModal,
useTemplate,
......@@ -87,7 +87,7 @@ onUnmounted(() => {
</div>
<!-- 主要内容区域 -->
<div class="main-content main-scrollbar overflow-y-auto">
<div class="main-content">
<!-- 分享内容 -->
<div class="content-grid">
<!-- 左侧视频区域 -->
......@@ -279,7 +279,7 @@ onUnmounted(() => {
<style scoped>
/* Landing Page 样式 */
.landing-page {
min-height: calc(100vh - 60px);
height: calc(100vh - 60px);
width: 100%;
background: linear-gradient(135deg, #0f0f23 0%, #1a1a2e 50%, #16213e 100%);
color: white;
......@@ -287,8 +287,9 @@ onUnmounted(() => {
top: 60px;
left: 0;
right: 0;
bottom: 0;
z-index: 50;
display: flex;
flex-direction: column;
}
.modal-header {
......@@ -346,8 +347,11 @@ onUnmounted(() => {
.main-content {
width: 100%;
padding: 2rem 0;
min-height: calc(100vh - 80px);
flex: 1;
background: linear-gradient(135deg, #0f0f23 0%, #1a1a2e 50%, #16213e 100%);
overflow-y: auto;
scroll-behavior: smooth;
-webkit-overflow-scrolling: touch;
}
/* 内容网格布局 */
......
<template>
<!-- 模态框头部 -->
<div class="flex items-center justify-between p-4 border-b border-gray-700">
<h3 class="text-xl font-semibold text-white">语音合成</h3>
<div class="flex items-center gap-2">
<button
@click="applySelectedVoice"
:disabled="!selectedVoice || !inputText.trim() || isGenerating"
class="header-apply-button"
title="应用当前选择的声音"
>
<i class="fas fa-check"></i>
</button>
<button @click="closeModal"
class="w-8 h-8 flex items-center justify-center text-gray-400 hover:text-white hover:bg-gray-700 rounded-full transition-all duration-200">
<i class="fas fa-times text-lg"></i>
</button>
</div>
</div>
<!-- 模态框内容 -->
<div class="h-full overflow-y-auto p-4 main-scrollbar">
<div class="voice-tts-container">
<!-- Text Input Section -->
<div class="text-input-section">
<h6 class="section-title">输入要转换的文本</h6>
<div class="input-wrapper">
<textarea
v-model="inputText"
placeholder="你好,请问我有什么可以帮您?"
class="text-input"
rows="4"
></textarea>
</div>
</div>
<!-- Text Input Section -->
<div class="text-input-section">
<h6 class="section-title">语音指令(仅适用于v2.0音色)</h6>
<div class="input-wrapper">
<textarea
v-model="contextText"
placeholder="使用指令控制合成语音细节,包括但不限于情绪、语境、方言、语气、速度、音调等(仅适用于v2.0音色),例如:带点害羞又藏着温柔期待的语气说"
class="text-input"
rows="1"
></textarea>
</div>
</div>
<!-- Voice Selection Section -->
<div class="voice-selection-section">
<div class="header-controls">
<h6 class="section-title">选择音色</h6>
<div class="filter-controls">
<div class="search-wrapper">
<div class="arco-input-group-wrapper arco-input-group-wrapper-default">
<span class="arco-input-group">
<span class="arco-input-inner-wrapper arco-input-inner-wrapper-has-prefix arco-input-inner-wrapper-default">
<span class="arco-input-group-prefix">
<i class="fas fa-search"></i>
</span>
<input
v-model="searchQuery"
placeholder="搜索音色"
class="arco-input arco-input-size-default"
/>
</span>
</span>
</div>
</div>
<!-- Filter Button -->
<button @click="toggleFilterPanel" class="filter-button">
<i class="fas fa-filter"></i>
<span>筛选</span>
</button>
</div>
</div>
<!-- Voice List -->
<div class="voice-list-container" ref="voiceListContainer">
<div class="arco-radio-group arco-radio-size-default arco-radio-mode-outline" role="radiogroup">
<div class="voice-grid">
<label
v-for="(voice, index) in filteredVoices"
:key="index"
class="arco-radio m-0 p-0"
:class="{ 'arco-radio-checked': selectedVoice === voice.voice_type }"
>
<input
type="radio"
:value="voice.voice_type"
v-model="selectedVoice"
@change="onVoiceSelect(voice)"
/>
<div
class="voice-card"
:class="{
'voice-card-selected': selectedVoice === voice.voice_type,
'voice-card-controlled': selectedVoice === voice.voice_type && showControls
}"
>
<!-- V2 Tag -->
<div v-if="voice.version === '2.0'" class="version-tag">
v2
</div>
<div class="voice-avatar-container">
<!-- Female Avatar -->
<img
v-if="isFemaleVoice(voice.voice_type)"
src="../../public/female.svg"
alt="Female Avatar"
class="voice-avatar"
:class="{ 'voice-avatar-disabled': selectedVoice === voice.voice_type }"
/>
<!-- Male Avatar -->
<img
v-else
src="../../public/male.svg"
alt="Male Avatar"
class="voice-avatar"
:class="{ 'voice-avatar-disabled': selectedVoice === voice.voice_type }"
/>
<!-- Loading indicator -->
<div v-if="isGenerating && selectedVoice === voice.voice_type" class="loading-indicator">
<i class="fas fa-spinner fa-spin"></i>
</div>
<!-- Settings button for selected voice -->
<div v-if="!isGenerating && selectedVoice === voice.voice_type" class="settings-button" @click="toggleControls">
<i class="fas fa-cog"></i>
</div>
</div>
<div class="voice-info">
<div class="voice-name">
{{ voice.name }}
</div>
<div class="voice-tags">
<div class="voice-scene" v-if="voice.scene">
<span class="scene-tag">{{ voice.scene }}</span>
</div>
<div class="voice-languages" v-if="voice.language && voice.language.length > 0">
<span
v-for="langCode in voice.language"
:key="langCode"
class="language-tag"
>
{{ getLanguageDisplayName(langCode) }}
</span>
</div>
</div>
</div>
<!-- TTS Controls Panel -->
<div v-if="selectedVoice === voice.voice_type && showControls" class="voice-controls-panel">
<div class="control-item">
<label>语速:</label>
<input
type="range"
min="-50"
max="100"
v-model="speedRate"
class="mini-slider"
/>
<span class="mini-display">{{ getSpeedDisplayValue(speedRate) }}</span>
</div>
<div class="control-item">
<label>音量:</label>
<input
type="range"
min="-100"
max="100"
v-model="loudnessRate"
class="mini-slider"
/>
<span class="mini-display">{{ getLoudnessDisplayValue(loudnessRate) }}</span>
</div>
<!-- Emotion controls - only show if voice has emotions -->
<div v-if="voice.emotions && voice.emotions.length > 0" class="control-item">
<label>情感强度:</label>
<input
type="range"
min="1"
max="5"
v-model="emotionScale"
class="mini-slider"
/>
<span class="mini-display">{{ emotionScale }}</span>
</div>
<div v-if="voice.emotions && voice.emotions.length > 0" class="control-item">
<label>情感类型:</label>
<DropdownMenu
:items="emotionItems"
:selected-value="selectedEmotion"
placeholder="中性"
@select-item="handleEmotionSelect"
class="mini-dropdown"
/>
</div>
</div>
</div>
</label>
</div>
</div>
</div>
</div>
<!-- Audio Player -->
<div class="audio-player" v-if="audioUrl">
<h6>生成的音频:</h6>
<audio :src="audioUrl" controls class="audio-controls"></audio>
</div>
</div>
<!-- Filter Panel Overlay -->
<div v-if="showFilterPanel" class="filter-overlay" @click="closeFilterPanel">
<div class="filter-panel" @click.stop>
<!-- Filter Panel Header -->
<div class="filter-header">
<h3 class="filter-title">筛选</h3>
<button @click="closeFilterPanel" class="filter-close-btn">
<i class="fas fa-times"></i>
</button>
</div>
<!-- Filter Content -->
<div class="filter-content">
<!-- Scene Filter -->
<div class="filter-section">
<h4 class="filter-section-title">场景</h4>
<div class="filter-options">
<button
v-for="category in categories"
:key="category"
@click="selectCategory(category)"
class="filter-option"
:class="{ 'filter-option-selected': selectedCategory === category }"
>
{{ category }}
</button>
</div>
</div>
<!-- Version Filter -->
<div class="filter-section">
<h4 class="filter-section-title">版本</h4>
<div class="filter-options">
<button
v-for="v in version"
:key="v"
@click="selectVersion(v)"
class="filter-option"
:class="{ 'filter-option-selected': selectedVersion === v }"
>
{{ v }}
</button>
</div>
</div>
<!-- Language Filter -->
<div class="filter-section">
<h4 class="filter-section-title">语言</h4>
<div class="filter-options">
<button
v-for="lang in languages"
:key="lang"
@click="selectLanguage(lang)"
class="filter-option"
:class="{ 'filter-option-selected': selectedLanguage === lang }"
>
{{ lang }}
</button>
</div>
</div>
<!-- Gender Filter -->
<div class="filter-section">
<h4 class="filter-section-title">性别</h4>
<div class="filter-options">
<button
v-for="gender in genders"
:key="gender"
@click="selectGender(gender)"
class="filter-option"
:class="{ 'filter-option-selected': selectedGender === gender }"
>
{{ gender }}
</button>
</div>
</div>
</div>
<!-- Filter Actions -->
<div class="filter-actions">
<button @click="resetFilters" class="filter-reset-btn">重置</button>
<button @click="applyFilters" class="filter-apply-btn">完成</button>
</div>
</div>
</div>
</div>
</template>
<script>
import { ref, computed, onMounted, watch } from 'vue'
import DropdownMenu from './DropdownMenu.vue'
export default {
name: 'VoiceTTS',
components: {
DropdownMenu
},
emits: ['tts-complete', 'close-modal'],
setup(props, { emit }) {
const inputText = ref('')
const contextText = ref('')
const selectedVoice = ref('')
const selectedVoiceResourceId = ref('')
const searchQuery = ref('')
const speedRate = ref(0)
const loudnessRate = ref(0)
const emotionScale = ref(3)
const selectedEmotion = ref('neutral')
const isGenerating = ref(false)
const audioUrl = ref('')
const voices = ref([])
const emotions = ref([])
const voiceListContainer = ref(null)
const showControls = ref(false)
const showFilterPanel = ref(false)
// Category filtering
const selectedCategory = ref('全部场景')
const categories = ref(['全部场景', '通用场景', '客服场景', '教育场景', '趣味口音', '角色扮演', '有声阅读', '多语种', '多情感', '视频配音'])
const selectedVersion = ref('全部版本')
const version = ref(['全部版本', '1.0', '2.0'])
const selectedLanguage = ref('全部语言')
const languages = ref(['全部语言'])
const selectedGender = ref('全部性别')
const genders = ref(['全部性别'])
// Load voices data
onMounted(async () => {
try {
const response = await fetch('/api/v1/voices/list')
const data = await response.json()
console.log('音色数据', data)
voices.value = data.voices || []
emotions.value = data.emotions || []
// Map languages data to language options
if (data.languages && Array.isArray(data.languages)) {
const languageOptions = ['全部语言']
data.languages.forEach(lang => {
languageOptions.push(lang.zh) // Use Chinese name
})
languages.value = languageOptions
}
// Extract gender options from voices data
if (voices.value && voices.value.length > 0) {
const genderSet = new Set()
voices.value.forEach(voice => {
if (voice.gender) {
genderSet.add(voice.gender)
}
})
const genderOptions = ['全部性别']
// Convert English gender to Chinese display
genderSet.forEach(gender => {
if (gender === 'female') {
genderOptions.push('女性')
} else if (gender === 'male') {
genderOptions.push('男性')
} else {
// For any other gender values, use as is
genderOptions.push(gender)
}
})
genders.value = genderOptions
}
} catch (error) {
console.error('Failed to load voices:', error)
}
})
// 监听参数变化,自动重新生成音频
watch([speedRate, loudnessRate, emotionScale, selectedEmotion], () => {
if (selectedVoice.value && inputText.value.trim() && !isGenerating.value) {
generateTTS()
}
})
// 监听文本输入变化,使用防抖避免频繁生成
let textTimeout = null
watch([inputText, contextText], () => {
if (textTimeout) {
clearTimeout(textTimeout)
}
textTimeout = setTimeout(() => {
if (selectedVoice.value && inputText.value.trim() && !isGenerating.value) {
generateTTS()
}
}, 800) // 延迟800ms执行,给用户足够时间输入
})
// 监听搜索查询变化,重置滚动位置(延迟执行以避免频繁重置)
let searchTimeout = null
watch(searchQuery, () => {
if (searchTimeout) {
clearTimeout(searchTimeout)
}
searchTimeout = setTimeout(() => {
resetScrollPosition()
}, 300) // 延迟300ms执行
})
// Filter voices based on search query, category, version, language, and gender
// Emotion items for dropdown
const emotionItems = computed(() => {
const items = []
const selectedVoiceData = voices.value.find(v => v.voice_type === selectedVoice.value)
if (selectedVoiceData && selectedVoiceData.emotions && emotions.value.length > 0) {
selectedVoiceData.emotions.forEach(emotionName => {
// Find the emotion data from emotions array
const emotionData = emotions.value.find(emotion => emotion.name === emotionName)
if (emotionData) {
items.push({ value: emotionName, label: emotionData.zh })
} else {
// Fallback if emotion not found in emotions data
items.push({ value: emotionName, label: emotionName })
}
})
}
// If no emotions found or no neutral emotion in the list, add neutral as default
if (items.length === 0 || !items.find(item => item.value === 'neutral')) {
items.unshift({ value: 'neutral', label: '中性' })
}
return items
})
const filteredVoices = computed(() => {
let filtered = [...voices.value] // 创建副本,避免修改原始数据
console.log('原始音色数据:', voices.value.length)
console.log('筛选条件:', {
category: selectedCategory.value,
version: selectedVersion.value,
language: selectedLanguage.value,
gender: selectedGender.value,
search: searchQuery.value
})
// Filter by category
if (selectedCategory.value !== '全部场景') {
filtered = filtered.filter(voice => voice.scene === selectedCategory.value)
console.log('分类筛选后:', filtered.length)
}
// Filter by version
if (selectedVersion.value !== '全部版本') {
filtered = filtered.filter(voice => voice.version === selectedVersion.value)
console.log('版本筛选后:', filtered.length)
}
// Filter by language
if (selectedLanguage.value !== '全部语言') {
// Convert Chinese language display back to language code for filtering
let languageFilter = selectedLanguage.value
// Create a mapping from Chinese names to language codes
const languageMap = {
'中文': 'chinese',
'美式英语': 'en_us',
'英式英语': 'en_gb',
'澳洲英语': 'en_au',
'西语': 'es',
'日语': 'ja'
}
if (languageMap[selectedLanguage.value]) {
languageFilter = languageMap[selectedLanguage.value]
}
filtered = filtered.filter(voice => {
// Check if voice.language array contains the language code
return voice.language && Array.isArray(voice.language) && voice.language.includes(languageFilter)
})
console.log('语言筛选后:', filtered.length)
}
// Filter by gender
if (selectedGender.value !== '全部性别') {
// Convert Chinese gender display back to English for filtering
let genderFilter = selectedGender.value
if (selectedGender.value === '女性') {
genderFilter = 'female'
} else if (selectedGender.value === '男性') {
genderFilter = 'male'
}
filtered = filtered.filter(voice => voice.gender === genderFilter)
console.log('性别筛选后:', filtered.length)
}
// Filter by search query
if (searchQuery.value) {
filtered = filtered.filter(voice =>
voice.name.toLowerCase().includes(searchQuery.value.toLowerCase())
)
console.log('搜索筛选后:', filtered.length)
}
console.log('最终筛选结果:', filtered.length)
return filtered
})
// Check if voice is female based on name
const isFemaleVoice = (name) => {
return name.toLowerCase().includes('female')
}
// Get available emotions for selected voice
const availableEmotions = computed(() => {
const selectedVoiceData = voices.value.find(v => v.voice_type === selectedVoice.value)
return selectedVoiceData?.emotions || []
})
// Reset scroll position
// Handle emotion selection
const handleEmotionSelect = (item) => {
selectedEmotion.value = item.value
}
const resetScrollPosition = () => {
// Reset voice list scroll to top
if (voiceListContainer.value) {
voiceListContainer.value.scrollTop = 0
}
}
// Handle voice selection and auto-generate TTS
const onVoiceSelect = async (voice) => {
selectedVoice.value = voice.voice_type
selectedVoiceResourceId.value = voice.resource_id
// Reset emotion if not available for this voice
if (voice.emotions && !voice.emotions.includes(selectedEmotion.value)) {
selectedEmotion.value = ''
}
// Reset scroll position when voice is selected
resetScrollPosition()
// Auto-generate TTS when voice is selected and text is available
await generateTTS()
}
// Generate TTS and auto-play
const generateTTS = async () => {
if (!inputText.value.trim()) {
inputText.value = '你好,请问我有什么可以帮您?'
}
if (!selectedVoice.value) return
console.log('contextText', contextText.value)
isGenerating.value = true
try {
const response = await fetch('/api/v1/tts/generate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
text: inputText.value,
voice_type: selectedVoice.value,
context_texts: contextText.value,
emotion: selectedEmotion.value,
emotion_scale: emotionScale.value,
speed_rate: speedRate.value,
loudness_rate: loudnessRate.value,
resource_id: selectedVoiceResourceId.value
})
})
if (response.ok) {
const blob = await response.blob()
audioUrl.value = URL.createObjectURL(blob)
// 自动播放生成的音频
const audio = new Audio(audioUrl.value)
audio.play().catch(error => {
console.log('自动播放被阻止:', error)
// 如果自动播放失败,用户仍可以手动播放
})
} else {
throw new Error('TTS generation failed')
}
} catch (error) {
console.error('TTS generation error:', error)
alert('语音生成失败,请重试')
} finally {
isGenerating.value = false
}
}
// Apply selected voice (emit the generated audio)
const applySelectedVoice = () => {
if (audioUrl.value) {
// Convert the audio URL back to blob and emit
fetch(audioUrl.value)
.then(response => response.blob())
.then(blob => {
emit('tts-complete', blob)
})
.catch(error => {
console.error('Error converting audio to blob:', error)
alert('应用音频失败,请重试')
})
}
}
// Close modal function
const closeModal = () => {
emit('close-modal')
}
// Toggle controls panel
const toggleControls = () => {
showControls.value = !showControls.value
}
// Filter panel functions
const toggleFilterPanel = () => {
showFilterPanel.value = !showFilterPanel.value
}
const closeFilterPanel = () => {
showFilterPanel.value = false
}
const selectCategory = (category) => {
selectedCategory.value = category
}
const selectVersion = (version) => {
selectedVersion.value = version
}
const selectLanguage = (language) => {
selectedLanguage.value = language
}
const selectGender = (gender) => {
selectedGender.value = gender
}
const resetFilters = () => {
selectedCategory.value = '全部场景'
selectedVersion.value = '全部版本'
selectedLanguage.value = '全部语言'
selectedGender.value = '全部性别'
}
const applyFilters = () => {
showFilterPanel.value = false
resetScrollPosition()
}
// Convert speed rate to display value (0.5x to 2.0x)
const getSpeedDisplayValue = (value) => {
// Map -50 to 100 range to 0.5x to 2.0x
const ratio = (parseInt(value) + 50) / 150 // Convert to 0-1 range
const speed = 0.5 + (ratio * 1.5) // Convert to 0.5-2.0 range
return `${speed.toFixed(1)}x`
}
// Convert loudness rate to display value (-100 to 100)
const getLoudnessDisplayValue = (value) => {
// Map -100 to 100 range to -50 to 100 for API
const apiValue = Math.round((parseInt(value) + 100) * 150 / 200 - 50)
return `${value}%`
}
// Convert language code to Chinese display name
const getLanguageDisplayName = (langCode) => {
const languageMap = {
'chinese': '中文',
'en_us': '美式英语',
'en_gb': '英式英语',
'en_au': '澳洲英语',
'es': '西语',
'ja': '日语'
}
return languageMap[langCode] || langCode
}
return {
inputText,
contextText,
selectedVoice,
searchQuery,
speedRate,
loudnessRate,
emotionScale,
selectedEmotion,
isGenerating,
audioUrl,
voices,
voiceListContainer,
showControls,
showFilterPanel,
filteredVoices,
isFemaleVoice,
availableEmotions,
onVoiceSelect,
generateTTS,
applySelectedVoice,
closeModal,
toggleControls,
toggleFilterPanel,
closeFilterPanel,
selectCategory,
selectVersion,
selectLanguage,
selectGender,
resetFilters,
applyFilters,
getSpeedDisplayValue,
getLoudnessDisplayValue,
getLanguageDisplayName,
emotionItems,
handleEmotionSelect,
selectedCategory,
categories,
selectedVoiceResourceId,
version,
selectedVersion,
selectedLanguage,
languages,
selectedGender,
genders,
resetScrollPosition
}
}
}
</script>
<style scoped>
.voice-tts-container {
padding: 20px;
max-width: 1200px;
margin: 0 auto;
position: relative;
overflow: visible;
height: auto;
min-height: fit-content;
}
.header-apply-button {
width: 32px;
height: 32px;
background: #8b5cf6;
color: white;
border: none;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all 0.2s;
font-size: 14px;
}
.header-apply-button:hover:not(:disabled) {
background: #7c3aed;
transform: scale(1.1);
}
.header-apply-button:disabled {
background: #c9cdd4;
cursor: not-allowed;
transform: none;
}
.text-input-section {
margin-bottom: 30px;
}
.section-title {
font-size: 16px;
font-weight: 600;
margin-bottom: 12px;
color: #ffffff;
}
.input-wrapper {
margin-bottom: 16px;
}
.text-input {
width: 100%;
padding: 12px;
border: 1px solid #374151;
border-radius: 6px;
font-size: 14px;
resize: vertical;
min-height: 100px;
background: #374151;
color: #ffffff;
}
.text-input:focus {
outline: none;
border-color: #8b5cf6;
box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.1);
}
.voice-selection-section {
margin-bottom: 30px;
position: relative;
overflow: visible;
height: auto;
}
.header-controls {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 16px;
flex-wrap: wrap;
gap: 16px;
}
.filter-controls {
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
}
.search-wrapper {
width: 218px;
flex-shrink: 0;
}
.filter-button {
display: flex;
align-items: center;
gap: 6px;
padding: 8px 16px;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 6px;
color: #ffffff;
font-size: 14px;
cursor: pointer;
transition: all 0.2s ease;
}
.filter-button:hover {
background: rgba(255, 255, 255, 0.2);
border-color: rgba(255, 255, 255, 0.5);
}
.arco-input-group-wrapper {
width: 100%;
}
.arco-input-group {
display: flex;
align-items: center;
}
.arco-input-inner-wrapper {
position: relative;
display: flex;
align-items: center;
width: 100%;
border: 1px solid #374151;
border-radius: 6px;
background: #374151;
}
.arco-input-inner-wrapper:focus-within {
border-color: #8b5cf6;
box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.1);
}
.arco-input-group-prefix {
padding: 0 12px;
display: flex;
align-items: center;
color: #86909c;
}
.arco-input-group-prefix svg {
color: #86909c;
}
.arco-input {
flex: 1;
padding: 8px 12px;
border: none;
outline: none;
font-size: 14px;
color: #ffffff;
background: transparent;
}
.arco-icon {
color: #86909c;
}
.voice-list-container {
background: #1f2937;
border-radius: 8px;
padding: 20px;
max-height: 600px;
overflow-y: auto;
overflow-x: hidden;
scroll-behavior: smooth;
height: auto;
min-height: fit-content;
}
.voice-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 16px;
}
.voice-card {
display: flex;
align-items: center;
padding: 16px;
border: 1px solid #374151;
border-radius: 8px;
background: #374151;
cursor: pointer;
transition: all 0.2s;
position: relative;
}
.voice-card:hover {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
}
.voice-card-selected {
border-color: #8b5cf6;
background: rgba(139, 92, 246, 0.15);
}
.voice-card-controlled {
border-color: #8b5cf6;
background: rgba(139, 92, 246, 0.2);
}
.voice-avatar-container {
position: relative;
margin-right: 12px;
}
.voice-avatar {
width: 48px;
height: 48px;
border-radius: 50%;
object-fit: cover;
background: white;
transition: all 0.3s ease;
}
.voice-avatar-disabled {
filter: grayscale(30%) brightness(0.6);
}
.loading-indicator {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30px;
height: 30px;
background: rgba(139, 92, 246, 0.8);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 12px;
transition: all 0.2s ease;
z-index: 20;
}
.voice-info {
flex: 1;
}
.voice-name {
font-size: 14px;
font-weight: 500;
color: #ffffff;
margin-bottom: 4px;
}
.voice-tags {
display: flex;
flex-direction: column;
gap: 4px;
}
.voice-languages {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.scene-tag {
display: inline-block;
padding: 2px 8px;
background: #4b5563;
color: #d1d5db;
border-radius: 4px;
font-size: 12px;
}
.language-tag {
display: inline-block;
padding: 2px 6px;
background: rgba(139, 92, 246, 0.2);
color: #a78bfa;
border-radius: 4px;
font-size: 11px;
font-weight: 500;
}
.audio-player {
background: rgba(255, 255, 255, 0.05);
padding: 20px;
border-radius: 8px;
border: 1px solid rgba(255, 255, 255, 0.1);
}
.audio-player h6 {
color: #ffffff;
margin-bottom: 8px;
}
.audio-controls {
width: 100%;
margin-top: 8px;
}
/* Hide radio input */
.arco-radio input[type="radio"] {
position: absolute;
opacity: 0;
pointer-events: none;
}
/* Version tag styles */
.version-tag {
position: absolute;
top: 8px;
right: 8px;
background: #8b5cf6;
color: white;
font-size: 10px;
font-weight: 600;
padding: 2px 6px;
border-radius: 8px;
z-index: 10;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
line-height: 1;
min-width: 20px;
text-align: center;
}
/* Settings button styles */
.settings-button {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 30px;
height: 30px;
background: rgba(139, 92, 246, 0.8);
color: white;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
font-size: 12px;
transition: all 0.2s ease;
z-index: 20;
}
.settings-button:hover {
background: #7c3aed;
transform: translate(-50%, -50%) scale(1.1);
}
/* Voice controls panel styles */
.voice-controls-panel {
position: absolute;
top: 100%;
left: 0;
right: 0;
background: #1f2937;
border: 1px solid #374151;
border-radius: 8px;
padding: 12px;
margin-top: 8px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
z-index: 100;
display: flex;
flex-direction: column;
gap: 8px;
}
.control-item {
flex: 1;
display: flex;
align-items: center;
gap: 6px;
}
.control-item label {
font-size: 12px;
color: #ffffff;
min-width: 40px;
}
.mini-slider {
flex: 1;
height: 4px;
background: #4b5563;
border-radius: 2px;
outline: none;
}
.mini-slider::-webkit-slider-thumb {
appearance: none;
width: 12px;
height: 12px;
background: #8b5cf6;
border-radius: 50%;
cursor: pointer;
}
.mini-display {
font-size: 11px;
color: #ffffff;
min-width: 30px;
text-align: center;
}
.mini-select {
flex: 1;
padding: 4px 8px;
border: 1px solid #4b5563;
border-radius: 4px;
font-size: 12px;
background: #374151;
color: #ffffff;
}
.mini-dropdown {
min-width: 100px;
font-size: 12px;
}
.mini-dropdown :deep(.inline-flex) {
padding: 4px 8px !important;
font-size: 12px !important;
min-height: 28px !important;
}
/* Filter Panel Styles */
.filter-overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 1000;
display: flex;
align-items: flex-end;
justify-content: center;
}
.filter-panel {
background: #2d2d2d;
width: 100%;
max-width: 600px;
max-height: 80vh;
border-radius: 20px 20px 0 0;
overflow: hidden;
animation: slideUp 0.3s ease-out;
}
@keyframes slideUp {
from {
transform: translateY(100%);
}
to {
transform: translateY(0);
}
}
.filter-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px;
border-bottom: 1px solid #404040;
}
.filter-title {
color: #ffffff;
font-size: 18px;
font-weight: 600;
margin: 0;
}
.filter-close-btn {
width: 32px;
height: 32px;
border: none;
background: none;
color: #ffffff;
font-size: 18px;
cursor: pointer;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
transition: background-color 0.2s ease;
}
.filter-close-btn:hover {
background: rgba(255, 255, 255, 0.1);
}
.filter-content {
padding: 20px;
max-height: 60vh;
overflow-y: auto;
}
.filter-section {
margin-bottom: 24px;
}
.filter-section:last-child {
margin-bottom: 0;
}
.filter-section-title {
color: #ffffff;
font-size: 16px;
font-weight: 500;
margin: 0 0 12px 0;
}
.filter-options {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
.filter-option {
padding: 8px 16px;
background: #404040;
border: 1px solid #555555;
border-radius: 20px;
color: #cccccc;
font-size: 14px;
cursor: pointer;
transition: all 0.2s ease;
white-space: nowrap;
}
.filter-option:hover {
background: #505050;
border-color: #666666;
}
.filter-option-selected {
background: #8b5cf6;
border-color: #8b5cf6;
color: #ffffff;
}
.filter-option-selected:hover {
background: #7c3aed;
border-color: #7c3aed;
}
.filter-actions {
display: flex;
gap: 12px;
padding: 20px;
border-top: 1px solid #404040;
}
.filter-reset-btn {
flex: 1;
padding: 12px;
background: #404040;
border: 1px solid #555555;
border-radius: 8px;
color: #cccccc;
font-size: 16px;
cursor: pointer;
transition: all 0.2s ease;
}
.filter-reset-btn:hover {
background: #505050;
border-color: #666666;
}
.filter-apply-btn {
flex: 2;
padding: 12px;
background: #8b5cf6;
border: 1px solid #8b5cf6;
border-radius: 8px;
color: #ffffff;
font-size: 16px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
}
.filter-apply-btn:hover {
background: #7c3aed;
border-color: #7c3aed;
}
</style>
......@@ -91,7 +91,7 @@
"whatMaterialsDoYouNeed": "创作视频需要什么素材呢?",
"pleaseEnterTheMostDetailedVideoScript": "请输入尽可能详细的视频脚本",
"pleaseUploadAnImageAsTheFirstFrameOfTheVideoAndTheMostDetailedVideoScript": "请上传一张图片作为视频的首帧图,以及尽可能详细的视频脚本",
"pleaseUploadARoleImageAnAudioAndTheGeneralVideoRequirements": "请上传一张角色图片一段音频、以及大致的视频要求",
"pleaseUploadARoleImageAnAudioAndTheGeneralVideoRequirements": "仅需要一张角色图片一段音频",
"collapseCreationArea": "收起创作区域",
"startCreatingVideo": "开始创作视频···",
"aiIsGeneratingYourVideo": "LightX2V 正在光速生成您的视频...",
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment