From 3a82f7b7f5c253de929745bcb9c2d33c6143b266 Mon Sep 17 00:00:00 2001 From: bielie Date: Tue, 24 Feb 2026 17:25:11 +0800 Subject: [PATCH] feat(tts): switch free voices to EdgeTTS worker mapping --- modules/tts/tts-api.js | 32 +++++++++++++++++++------------- modules/tts/tts-overlay.html | 30 ++++++++++++++++++------------ modules/tts/tts.js | 7 +++++-- 3 files changed, 42 insertions(+), 27 deletions(-) diff --git a/modules/tts/tts-api.js b/modules/tts/tts-api.js index 7fb38cb..54d929e 100644 --- a/modules/tts/tts-api.js +++ b/modules/tts/tts-api.js @@ -1,23 +1,28 @@ -/** +/** * 火山引擎 TTS API 封装 * V3 单向流式 + V1试用 */ const V3_URL = 'https://openspeech.bytedance.com/api/v3/tts/unidirectional'; -const FREE_V1_URL = 'https://hstts.velure.codes'; +const FREE_V1_URL = 'https://edgetts.velure.codes'; export const FREE_VOICES = [ - { key: 'female_1', name: '桃夭', tag: '甜蜜仙子', gender: 'female' }, - { key: 'female_2', name: '霜华', tag: '清冷仙子', gender: 'female' }, - { key: 'female_3', name: '顾姐', tag: '御姐烟嗓', gender: 'female' }, - { key: 'female_4', name: '苏菲', tag: '优雅知性', gender: 'female' }, - { key: 'female_5', name: '嘉欣', tag: '港风甜心', gender: 'female' }, - { key: 'female_6', name: '青梅', tag: '清秀少年音', gender: 'female' }, - { key: 'female_7', name: '可莉', tag: '奶音萝莉', gender: 'female' }, - { key: 'male_1', name: '夜枭', tag: '磁性低音', gender: 'male' }, - { key: 'male_2', name: '君泽', tag: '温润公子', gender: 'male' }, - { key: 'male_3', name: '沐阳', tag: '沉稳暖男', gender: 'male' }, - { key: 'male_4', name: '梓辛', tag: '青春少年', gender: 'male' }, + { key: 'female_1', name: '晓晓', tag: '温暖百变', gender: 'female' }, + { key: 'female_2', name: '晓伊', tag: '清冷知性', gender: 'female' }, + { key: 'female_3', name: '晓墨', tag: '情感丰富', gender: 'female' }, + { key: 'female_4', name: '晓涵', tag: '温柔深情', gender: 'female' }, + { key: 'female_5', name: '晓萱', tag: '沉稳大气', gender: 'female' }, + { key: 'female_6', name: '晓睿', tag: '成熟知性', gender: 'female' }, + { key: 'female_7', name: '晓甄', tag: '活力少女', gender: 'female' }, + { key: 'male_1', name: '云希', tag: '少年温暖', gender: 'male' }, + { key: 'male_2', name: '云健', tag: '阳刚有力', gender: 'male' }, + { key: 'male_3', name: '云扬', tag: '专业播报', gender: 'male' }, + { key: 'male_4', name: '云泽', tag: '沉稳磁性', gender: 'male' }, + { key: 'en_female_1', name: 'Jenny', tag: '美式甜美', gender: 'female' }, + { key: 'en_female_2', name: 'Aria', tag: '美式知性', gender: 'female' }, + { key: 'en_male_1', name: 'Guy', tag: '美式磁性', gender: 'male' }, + { key: 'ja_female_1', name: '七海', tag: '日式温柔', gender: 'female' }, + { key: 'ja_male_1', name: '圭太', tag: '日式少年', gender: 'male' }, ]; export const FREE_DEFAULT_VOICE = 'female_1'; @@ -333,3 +338,4 @@ export async function synthesizeFreeV1(params, options = {}) { return { audioBase64: data.data }; } + diff --git a/modules/tts/tts-overlay.html b/modules/tts/tts-overlay.html index 34afe7e..a127a2e 100644 --- a/modules/tts/tts-overlay.html +++ b/modules/tts/tts-overlay.html @@ -1,4 +1,4 @@ - + @@ -1721,17 +1721,22 @@ let editingVoiceValue = null; let activeSaveBtn = null; const TRIAL_VOICES = [ - { key: 'female_1', name: '桃夭', tag: '甜蜜仙子', gender: 'female' }, - { key: 'female_2', name: '霜华', tag: '清冷仙子', gender: 'female' }, - { key: 'female_3', name: '顾姐', tag: '御姐烟嗓', gender: 'female' }, - { key: 'female_4', name: '苏菲', tag: '优雅知性', gender: 'female' }, - { key: 'female_5', name: '嘉欣', tag: '港风甜心', gender: 'female' }, - { key: 'female_6', name: '青梅', tag: '清秀少年音', gender: 'female' }, - { key: 'female_7', name: '可莉', tag: '奶音萝莉', gender: 'female' }, - { key: 'male_1', name: '夜枭', tag: '磁性低音', gender: 'male' }, - { key: 'male_2', name: '君泽', tag: '温润公子', gender: 'male' }, - { key: 'male_3', name: '沐阳', tag: '沉稳暖男', gender: 'male' }, - { key: 'male_4', name: '梓辛', tag: '青春少年', gender: 'male' }, + { key: 'female_1', name: '晓晓', tag: '温暖百变', gender: 'female' }, + { key: 'female_2', name: '晓伊', tag: '清冷知性', gender: 'female' }, + { key: 'female_3', name: '晓墨', tag: '情感丰富', gender: 'female' }, + { key: 'female_4', name: '晓涵', tag: '温柔深情', gender: 'female' }, + { key: 'female_5', name: '晓萱', tag: '沉稳大气', gender: 'female' }, + { key: 'female_6', name: '晓睿', tag: '成熟知性', gender: 'female' }, + { key: 'female_7', name: '晓甄', tag: '活力少女', gender: 'female' }, + { key: 'male_1', name: '云希', tag: '少年温暖', gender: 'male' }, + { key: 'male_2', name: '云健', tag: '阳刚有力', gender: 'male' }, + { key: 'male_3', name: '云扬', tag: '专业播报', gender: 'male' }, + { key: 'male_4', name: '云泽', tag: '沉稳磁性', gender: 'male' }, + { key: 'en_female_1', name: 'Jenny', tag: '美式甜美', gender: 'female' }, + { key: 'en_female_2', name: 'Aria', tag: '美式知性', gender: 'female' }, + { key: 'en_male_1', name: 'Guy', tag: '美式磁性', gender: 'male' }, + { key: 'ja_female_1', name: '七海', tag: '日式温柔', gender: 'female' }, + { key: 'ja_male_1', name: '圭太', tag: '日式少年', gender: 'male' }, ]; const TRIAL_VOICE_KEYS = new Set(TRIAL_VOICES.map(v => v.key)); @@ -2477,3 +2482,4 @@ document.addEventListener('DOMContentLoaded', () => { + diff --git a/modules/tts/tts.js b/modules/tts/tts.js index 33f784e..7cedc5b 100644 --- a/modules/tts/tts.js +++ b/modules/tts/tts.js @@ -1,4 +1,4 @@ -// ============ 导入 ============ +// ============ 导入 ============ import { event_types } from "../../../../../../script.js"; import { extension_settings, getContext } from "../../../../../extensions.js"; @@ -43,7 +43,9 @@ const TTS_DIRECTIVE_REGEX = /\[tts:([^\]]*)\]/gi; const FREE_VOICE_KEYS = new Set([ 'female_1', 'female_2', 'female_3', 'female_4', 'female_5', 'female_6', 'female_7', - 'male_1', 'male_2', 'male_3', 'male_4' + 'male_1', 'male_2', 'male_3', 'male_4', + 'en_female_1', 'en_female_2', 'en_male_1', + 'ja_female_1', 'ja_male_1', ]); // ============ NovelDraw 兼容 ============ @@ -1472,3 +1474,4 @@ export function cleanupTts() { cacheCounters.misses = 0; delete window.xiaobaixTts; } +