@@ -18,7 +18,7 @@ public class TtsServiceFactory {
1818
1919 private static final Logger logger = LoggerFactory .getLogger (TtsServiceFactory .class );
2020
21- // 缓存已初始化的服务:对于API服务, 键为"provider:configId"格式;对于本地服务,键为provider名称
21+ // 缓存已初始化的服务:键为"provider:configId:voiceName "格式,确保音色变化时创建新实例
2222 private final Map <String , TtsService > serviceCache = new ConcurrentHashMap <>();
2323
2424 // 语音生成文件保存地址
@@ -38,11 +38,11 @@ public TtsService getDefaultTtsService() {
3838 return getTtsService (config , TtsServiceFactory .DEFAULT_VOICE );
3939 }
4040
41- // 对于API服务,使用"provider:configId"作为缓存键,确保每个配置使用独立的服务实例
42- private String createCacheKey (SysConfig config , String provider ) {
41+ // 创建缓存键,包含provider、configId和voiceName,确保音色变化时创建新的服务实例
42+ private String createCacheKey (SysConfig config , String provider , String voiceName ) {
4343 var configId = config .getConfigId ();
4444 var configIdStr = configId != null ? String .valueOf (configId ) : "default" ;
45- return provider + ":" + configIdStr ;
45+ return provider + ":" + configIdStr + ":" + voiceName ;
4646 }
4747
4848 /**
@@ -51,7 +51,7 @@ private String createCacheKey(SysConfig config, String provider) {
5151 public TtsService getTtsService (SysConfig config , String voiceName ) {
5252 // 如果提供商为空,则使用默认提供商
5353 var provider = ObjectUtils .isEmpty (config ) ? DEFAULT_PROVIDER : config .getProvider ();
54- var cacheKey = createCacheKey (config , provider );
54+ var cacheKey = createCacheKey (config , provider , voiceName );
5555
5656 // 检查是否已有该配置的服务实例
5757 if (serviceCache .containsKey (cacheKey )) {
@@ -79,13 +79,6 @@ private TtsService createApiService(SysConfig config, String voiceName, String o
7979 };
8080 }
8181
82- public void removeCache (SysConfig config ) {
83- // 对于API服务,使用"provider:configId"作为缓存键,确保每个配置使用独立的服务实例
84- Integer configId = config .getConfigId ();
85- String provider = config .getProvider ();
86- String cacheKey = provider + ":" + (configId != null ? configId : "default" );
87- serviceCache .remove (cacheKey );
88- }
8982
9083 private void ensureOutputPath (String outputPath ) {
9184 File dir = new File (outputPath );
0 commit comments