diff --git a/main/manager-api/src/main/java/xiaozhi/modules/config/service/impl/ConfigServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/config/service/impl/ConfigServiceImpl.java index b9a7918c..a5256a66 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/config/service/impl/ConfigServiceImpl.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/config/service/impl/ConfigServiceImpl.java @@ -66,6 +66,7 @@ public class ConfigServiceImpl implements ConfigService { null, null, null, + null, agent.getVadModelId(), agent.getAsrModelId(), null, @@ -102,9 +103,11 @@ public class ConfigServiceImpl implements ConfigService { } // 获取音色信息 String voice = null; + String voiceRemark = null; TimbreDetailsVO timbre = timbreService.get(agent.getTtsVoiceId()); if (timbre != null) { voice = timbre.getTtsVoice(); + voiceRemark = timbre.getRemark(); } // 构建返回数据 Map result = new HashMap<>(); @@ -138,6 +141,7 @@ public class ConfigServiceImpl implements ConfigService { agent.getSystemPrompt(), agent.getSummaryMemory(), voice, + voiceRemark, agent.getVadModelId(), agent.getAsrModelId(), agent.getLlmModelId(), @@ -154,7 +158,7 @@ public class ConfigServiceImpl implements ConfigService { /** * 构建配置信息 * - * @param paramsList 系统参数列表 + * @param config 系统参数列表 * @return 配置信息 */ private Object buildConfig(Map config) { @@ -227,6 +231,7 @@ public class ConfigServiceImpl implements ConfigService { * * @param prompt 提示词 * @param voice 音色 + * @param voiceRemark 備註 * @param vadModelId VAD模型ID * @param asrModelId ASR模型ID * @param llmModelId LLM模型ID @@ -240,6 +245,7 @@ public class ConfigServiceImpl implements ConfigService { String prompt, String summaryMemory, String voice, + String voiceRemark, String vadModelId, String asrModelId, String llmModelId, @@ -265,8 +271,9 @@ public class ConfigServiceImpl implements ConfigService { if (model.getConfigJson() != null) { typeConfig.put(model.getId(), model.getConfigJson()); // 如果是TTS类型,添加private_voice属性 - if ("TTS".equals(modelTypes[i]) && voice != null) { - ((Map) model.getConfigJson()).put("private_voice", voice); + if ("TTS".equals(modelTypes[i])){ + if (voice != null) ((Map) model.getConfigJson()).put("private_voice", voice); + if (voiceRemark != null) ((Map) model.getConfigJson()).put("voice_remark", voiceRemark); } // 如果是Intent类型,且type=intent_llm,则给他添加附加模型 if ("Intent".equals(modelTypes[i])) { diff --git a/main/xiaozhi-server/core/providers/tts/fishspeech.py b/main/xiaozhi-server/core/providers/tts/fishspeech.py index 3bcb1229..8e8782df 100644 --- a/main/xiaozhi-server/core/providers/tts/fishspeech.py +++ b/main/xiaozhi-server/core/providers/tts/fishspeech.py @@ -129,6 +129,13 @@ class TTSProvider(TTSProviderBase): self.use_memory_cache = config.get("use_memory_cache", "on") self.seed = int(config.get("seed")) if config.get("seed") else None self.api_url = config.get("api_url", "http://127.0.0.1:8080/v1/tts") + self.get_voice_data(config) + + def get_voice_data(self, config: dict): + if not config.get('private_voice', '') and not config.get('voice_remark', ''): + return + self.reference_audio = config.get('private_voice') + self.reference_text = config.get('voice_remark') async def text_to_speak(self, text, output_file): # Prepare reference data diff --git a/main/xiaozhi-server/core/providers/tts/gpt_sovits_v2.py b/main/xiaozhi-server/core/providers/tts/gpt_sovits_v2.py index 7f43ad7d..a22be6d4 100644 --- a/main/xiaozhi-server/core/providers/tts/gpt_sovits_v2.py +++ b/main/xiaozhi-server/core/providers/tts/gpt_sovits_v2.py @@ -67,6 +67,14 @@ class TTSProvider(TTSProviderBase): ) self.audio_file_type = config.get("format", "wav") + self.get_voice_data(config) + + def get_voice_data(self, config: dict): + if not config.get('private_voice', '') and not config.get('voice_remark', ''): + return + self.ref_audio_path = config.get('private_voice') + self.prompt_text = config.get('voice_remark') + async def text_to_speak(self, text, output_file): request_json = { "text": text, diff --git a/main/xiaozhi-server/core/providers/tts/gpt_sovits_v3.py b/main/xiaozhi-server/core/providers/tts/gpt_sovits_v3.py index ae41fc4e..577a2794 100644 --- a/main/xiaozhi-server/core/providers/tts/gpt_sovits_v3.py +++ b/main/xiaozhi-server/core/providers/tts/gpt_sovits_v3.py @@ -34,6 +34,14 @@ class TTSProvider(TTSProviderBase): self.if_sr = str(config.get("if_sr", False)).lower() in ("true", "1", "yes") self.audio_file_type = config.get("format", "wav") + self.get_voice_data(config) + + def get_voice_data(self, config: dict): + if not config.get('private_voice', '') and not config.get('voice_remark', ''): + return + self.refer_wav_path = config.get('private_voice') + self.prompt_text = config.get('voice_remark') + async def text_to_speak(self, text, output_file): request_params = { "refer_wav_path": self.refer_wav_path,