|
|
@@ -150,22 +150,43 @@ function langLabel(key, base, dialect) {
|
|
|
}
|
|
|
|
|
|
// ── 3. 推荐音色(从 docs/alicloud-tts-lang-voice-matrix.md §三 手动权威) ───────
|
|
|
+const DIALECT_INSTRUCTIONS = {
|
|
|
+ // 普通话:不需要指令
|
|
|
+ 'zh-CMN': undefined,
|
|
|
+ // 方言:通过 instruction 控制 longanhuan_v3 的方言输出
|
|
|
+ 'zh-YUE': '请用粤语表达。',
|
|
|
+ 'zh-NEN': '请用东北话表达。',
|
|
|
+ 'zh-SCN': '请用四川话表达。',
|
|
|
+ 'zh-SHD': '请用山东话表达。',
|
|
|
+ 'zh-HEN': '请用河南话表达。',
|
|
|
+ 'zh-HNN': '请用湖南话表达。',
|
|
|
+ 'zh-SHX': '请用陕西话表达。',
|
|
|
+ 'zh-AHM': '请用安徽话表达。',
|
|
|
+ 'zh-MNN': '请用闽南话表达。',
|
|
|
+ // 外语:不需要指令(音色本身就说那种语言)
|
|
|
+ 'en-US': undefined,
|
|
|
+ 'en-GB': undefined,
|
|
|
+ 'ja-JP': undefined,
|
|
|
+ 'ko-KR': undefined,
|
|
|
+ 'id-ID': undefined,
|
|
|
+};
|
|
|
+
|
|
|
const RECOMMENDED = {
|
|
|
- 'zh-CMN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '欢脱元气女,支持 9 种方言' },
|
|
|
- 'zh-YUE': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanyue', desc: '粤语标准女声' },
|
|
|
- 'zh-NEN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '东北话 → longanhuan_v3 兜底' },
|
|
|
- 'zh-SCN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '四川话兜底' },
|
|
|
- 'zh-SHD': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '山东话兜底' },
|
|
|
- 'zh-HEN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '河南话兜底' },
|
|
|
- 'zh-HNN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '湖南话兜底' },
|
|
|
- 'zh-SHX': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longshange', desc: '陕西话专用户(陕哥)' },
|
|
|
- 'zh-AHM': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '安徽话 → longanhuan_v3 兜底' },
|
|
|
- 'zh-MNN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanmin', desc: '闽南话专用户' },
|
|
|
- 'en-US': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longava', desc: '美式英语女声' },
|
|
|
- 'en-GB': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'loongluna', desc: '英语英伦少女' },
|
|
|
- 'ja-JP': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'loongtomoka', desc: '日语女声' },
|
|
|
- 'ko-KR': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'sohee', desc: '韩语女声' },
|
|
|
- 'id-ID': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'loongindah', desc: '印尼女声' },
|
|
|
+ 'zh-CMN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '欢脱元气女,支持 9 种方言', dialectInstruction: DIALECT_INSTRUCTIONS['zh-CMN'] },
|
|
|
+ 'zh-YUE': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanyue', desc: '粤语标准女声', dialectInstruction: DIALECT_INSTRUCTIONS['zh-YUE'] },
|
|
|
+ 'zh-NEN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '东北话,指令控制', dialectInstruction: DIALECT_INSTRUCTIONS['zh-NEN'] },
|
|
|
+ 'zh-SCN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '四川话,指令控制', dialectInstruction: DIALECT_INSTRUCTIONS['zh-SCN'] },
|
|
|
+ 'zh-SHD': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '山东话,指令控制', dialectInstruction: DIALECT_INSTRUCTIONS['zh-SHD'] },
|
|
|
+ 'zh-HEN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '河南话,指令控制', dialectInstruction: DIALECT_INSTRUCTIONS['zh-HEN'] },
|
|
|
+ 'zh-HNN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '湖南话,指令控制', dialectInstruction: DIALECT_INSTRUCTIONS['zh-HNN'] },
|
|
|
+ 'zh-SHX': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longshange', desc: '陕西话专用(无需指令)', dialectInstruction: DIALECT_INSTRUCTIONS['zh-SHX'] },
|
|
|
+ 'zh-AHM': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanhuan_v3', desc: '安徽话,指令控制', dialectInstruction: DIALECT_INSTRUCTIONS['zh-AHM'] },
|
|
|
+ 'zh-MNN': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longanmin', desc: '闽南话专用(无需指令)', dialectInstruction: DIALECT_INSTRUCTIONS['zh-MNN'] },
|
|
|
+ 'en-US': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'longava', desc: '美式英语女声', dialectInstruction: DIALECT_INSTRUCTIONS['en-US'] },
|
|
|
+ 'en-GB': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'loongluna', desc: '英语英伦少女', dialectInstruction: DIALECT_INSTRUCTIONS['en-GB'] },
|
|
|
+ 'ja-JP': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'loongtomoka', desc: '日语女声', dialectInstruction: DIALECT_INSTRUCTIONS['ja-JP'] },
|
|
|
+ 'ko-KR': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'sohee', desc: '韩语女声', dialectInstruction: DIALECT_INSTRUCTIONS['ko-KR'] },
|
|
|
+ 'id-ID': { vendor: 'bailian', model: 'cosyvoice-v3-flash', voice: 'loongindah', desc: '印尼女声', dialectInstruction: DIALECT_INSTRUCTIONS['id-ID'] },
|
|
|
};
|
|
|
|
|
|
// ── 4. 主流程: 读 raw → 生成 routes ─────────────────────────────
|