From 1972364a34dde64877b831588389312779547102 Mon Sep 17 00:00:00 2001
From: 康鲁杰 <60095866+KangLujie@users.noreply.github.com>
Date: 星期一, 24 三月 2025 17:04:44 +0800
Subject: [PATCH] 试听

---
 easegen-front/src/views/chooseTemplate/index.vue                                                                                                            |    2 
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/AuditionDO.java         |   33 --------
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/AuditionVO.java         |   14 +++
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/InvokeVO.java           |   56 ++++++++++++++
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceImpl.java         |  114 ++++++++++-----------------
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesService.java             |    7 -
 yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/voices/VoicesController.java |    9 +-
 7 files changed, 122 insertions(+), 113 deletions(-)

diff --git a/easegen-front/src/views/chooseTemplate/index.vue b/easegen-front/src/views/chooseTemplate/index.vue
index 470b021..5c2f5d0 100644
--- a/easegen-front/src/views/chooseTemplate/index.vue
+++ b/easegen-front/src/views/chooseTemplate/index.vue
@@ -1707,7 +1707,7 @@
     const html = editorRef.value.getText();
   const params = {
     text: html,
-    humans: humanId
+    humanId: humanId
   }
   showAudioPlay.value = true
   pptTemplateApi
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/voices/VoicesController.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/voices/VoicesController.java
index f636e4d..e832bc4 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/voices/VoicesController.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/controller/admin/voices/VoicesController.java
@@ -9,6 +9,7 @@
 import cn.iocoder.yudao.module.digitalcourse.controller.admin.voices.vo.VoicesRespVO;
 import cn.iocoder.yudao.module.digitalcourse.controller.admin.voices.vo.VoicesSaveReqVO;
 import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.AuditionDO;
+import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.AuditionVO;
 import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.VoicesDO;
 import cn.iocoder.yudao.module.digitalcourse.service.voices.VoicesService;
 import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
@@ -112,12 +113,12 @@
 
     @PostMapping("/audition")
     @Operation(summary = "璇曞惉")
-    public CommonResult<String> audition(@Valid @RequestBody AuditionDO auditionDO) {
+    public CommonResult<String> audition(@Valid @RequestBody AuditionVO auditionVO) {
         int limitWord = Integer.parseInt(configApi.getConfigValueByKey(Limit_AUDITIONWORD));
-        if (limitWord<(auditionDO.getText().length())) {
+        if (limitWord<(auditionVO.getText().length())) {
             return CommonResult.error(BAD_REQUEST.getCode(), "璇曞惉鏂囧瓧瓒呭嚭瀛楁暟闄愬埗锛屾渶澶氥��"+limitWord+"銆戝瓧");
         }
-        return success(voicesService.audition(auditionDO));
+        return success(voicesService.audition(auditionVO));
     }
 
-}
\ No newline at end of file
+}
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/AuditionDO.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/AuditionDO.java
index b64d914..738dda8 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/AuditionDO.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/AuditionDO.java
@@ -4,9 +4,6 @@
 
 @Data
 @ToString(callSuper = true)
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
 public class AuditionDO {
 
     /**
@@ -15,38 +12,8 @@
     private String text;
 
     /**
-     * 璇��
-     */
-    private Float speed;
-
-    /**
-     * 闊抽珮
-     */
-    private Float pitch;
-
-    /**
-     * 闊抽噺
-     */
-    private Float volume;
-
-    /**
-     * 澹伴煶绫诲瀷
-     */
-    private Integer voiceType;
-
-    /**
-     * 澹伴煶绫诲瀷Id
-     */
-    private Integer voiceTypeId;
-
-    /**
      * 澹伴煶Id
      */
     private String voiceId;
-
-    /**
-     * 鏅鸿兘璇��
-     */
-    private Integer smartSpeed;
 
 }
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/AuditionVO.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/AuditionVO.java
new file mode 100644
index 0000000..80a89db
--- /dev/null
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/AuditionVO.java
@@ -0,0 +1,14 @@
+package cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices;
+
+import lombok.Data;
+
+/**
+ * @author kanglujie
+ * @date 2025-03-24 15:50:10
+ */
+@Data
+public class AuditionVO {
+    private String text;
+    private String humanId;
+
+}
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/InvokeVO.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/InvokeVO.java
new file mode 100644
index 0000000..b057ed9
--- /dev/null
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/InvokeVO.java
@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.*;
+
+import java.util.UUID;
+
+@Data
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class InvokeVO {
+    private String speaker; // UUID锛屼繚鎸佸敮涓�
+    private String text; // 闇�瑕佸悎鎴愮殑鏂囨湰鍐呭
+    private String format = "wav"; // 鍥哄畾浼犲弬 "wav"
+
+    @JsonProperty("topP")
+    private double topP = 0.7; // 鍥哄畾浼犲弬 0.7
+
+    @JsonProperty("max_new_tokens")
+    private int maxNewTokens = 1024; // 鍥哄畾浼犲弬 1024
+
+    @JsonProperty("chunk_length")
+    private int chunkLength = 100; // 鍥哄畾浼犲弬 100
+
+    @JsonProperty("repetition_penalty")
+    private double repetitionPenalty = 1.2; // 鍥哄畾浼犲弬 1.2
+
+    private double temperature = 0.7; // 鍥哄畾浼犲弬 0.7
+
+    @JsonProperty("need_asr")
+    private boolean needAsr = false; // 鍥哄畾浼犲弬 false
+
+    private boolean streaming = false; // 鍥哄畾浼犲弬 false
+
+    @JsonProperty("is_fixed_seed")
+    private int isFixedSeed = 0; // 鍥哄畾浼犲弬 0
+
+    @JsonProperty("is_norm")
+    private int isNorm = 0; // 鍥哄畾浼犲弬 0
+
+    @JsonProperty("reference_audio")
+    private String referenceAudio; // 涓婁竴姝モ�滄ā鐗硅缁冣�濈殑杩斿洖鍊�
+
+    @JsonProperty("reference_text")
+    private String referenceText; // 涓婁竴姝モ�滄ā鐗硅缁冣�濈殑杩斿洖鍊�
+
+    // 鐢熸垚榛樿 UUID 鏂逛究娴嬭瘯
+    public static String generateUUID() {
+        return UUID.randomUUID().toString();
+    }
+
+
+
+}
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesService.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesService.java
index 875e4d5..5ea3f5d 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesService.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesService.java
@@ -1,7 +1,6 @@
 package cn.iocoder.yudao.module.digitalcourse.service.voices;
 
-import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.AuditionDO;
-import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.TTSDTO;
+import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.AuditionVO;
 import jakarta.validation.*;
 import cn.iocoder.yudao.module.digitalcourse.controller.admin.voices.vo.*;
 import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.VoicesDO;
@@ -53,7 +52,7 @@
     PageResult<VoicesDO> getVoicesPage(VoicesPageReqVO pageReqVO);
     PageResult<VoicesDO> getVoicesCommonPage(VoicesPageReqVO pageReqVO);
 
-    String audition(AuditionDO auditionDO);
+    String audition(AuditionVO auditionVO);
 
     Boolean auditing();
-}
\ No newline at end of file
+}
diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceImpl.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceImpl.java
index 8ed3c4e..60ff852 100644
--- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceImpl.java
+++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceImpl.java
@@ -2,36 +2,25 @@
 
 import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
 import cn.iocoder.yudao.module.digitalcourse.controller.admin.voices.vo.VoicesPageReqVO;
 import cn.iocoder.yudao.module.digitalcourse.controller.admin.voices.vo.VoicesSaveReqVO;
 import cn.iocoder.yudao.module.digitalcourse.controller.admin.voices.vo.VoicesTrailVO;
-import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.AuditionDO;
-import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.TTSDTO;
-import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.VoicesDO;
+import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.digitalhumans.DigitalHumansDO;
+import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.*;
+import cn.iocoder.yudao.module.digitalcourse.dal.mysql.digitalhumans.DigitalHumansMapper;
 import cn.iocoder.yudao.module.digitalcourse.dal.mysql.voices.VoicesMapper;
 import cn.iocoder.yudao.module.infra.api.config.ConfigApi;
 import cn.iocoder.yudao.module.infra.api.file.FileApi;
-import com.alibaba.fastjson.JSON;
-import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import jakarta.annotation.Resource;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.hc.client5.http.classic.methods.HttpPost;
-import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
-import org.apache.hc.client5.http.impl.classic.HttpClients;
-import org.apache.hc.core5.http.ContentType;
-import org.apache.hc.core5.http.ParseException;
-import org.apache.hc.core5.http.io.entity.EntityUtils;
-import org.apache.hc.core5.http.io.entity.StringEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
-
-import java.io.IOException;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.digitalcourse.enums.ErrorCodeConstants.VOICES_NOT_EXISTS;
@@ -129,7 +118,7 @@
         }else {
             pageReqVO.setVoiceType(0);
         }
-        
+
         return voicesMapper.selectPage(pageReqVO);
     }
     @Override
@@ -145,61 +134,44 @@
         return (auditing == null || auditing == 0);
     }
 
+    @Resource
+    private DigitalHumansMapper digitalHumansMapper;
+    private static final String EASEGEN_URL = "easegen.url";
     @Override
-    public String audition(AuditionDO auditionDO) {
-        VoicesDO voice = voicesMapper.selectById(auditionDO.getVoiceId());
-        TTSDTO ttsdto = new TTSDTO();
-        if (voice != null) {
-            ttsdto.setModel_code(voice.getCode());
-            ttsdto.setSentence(auditionDO.getText());
-            ttsdto.setRequest_id(StrUtil.uuid());
-            ttsdto.setUser_id(String.valueOf(SecurityFrameworkUtils.getLoginUser().getId()));
-            ttsdto.setVoice_type(String.valueOf(voice.getVoiceType()));
-            ttsdto.setPitch(auditionDO.getPitch());
-            ttsdto.setSpeed(auditionDO.getSpeed());
-            ttsdto.setVolume(auditionDO.getVolume());
-        } else {
-            throw exception(VOICES_NOT_EXISTS);
+    public String audition(AuditionVO auditionVO) {
+        DigitalHumansDO digitalHumansDO = digitalHumansMapper.selectById(auditionVO.getHumanId());
+        InvokeVO invokeVO = new InvokeVO();
+        invokeVO.setSpeaker(InvokeVO.generateUUID());
+        invokeVO.setReferenceText(digitalHumansDO.getReferenceAudioText());
+        invokeVO.setReferenceAudio(digitalHumansDO.getAsrFormatAudioUrl());
+        invokeVO.setText(auditionVO.getText());
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonString = null;
+        try {
+            jsonString = objectMapper.writeValueAsString(invokeVO);
+        } catch (JsonProcessingException e) {
+            throw new RuntimeException(e);
+        }
+        HttpResponse execute = HttpRequest.post("http://192.168.3.161:18180/v1/invoke")
+                .body(jsonString)
+                .execute();
+
+        if (execute.getStatus() != 200) {
+            return null;
         }
 
-        String apiUrl = configApi.getConfigValueByKey(EASEGEN_CORE_URL)+"/api/tts";
-        String apiKey = configApi.getConfigValueByKey(EASEGEN_CORE_KEY);
-        // 鍒涘缓HTTP瀹㈡埛绔�
-        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
-            // 鍒涘缓POST璇锋眰
-            HttpPost httpPost = new HttpPost(apiUrl);
-            httpPost.setHeader("Content-Type", "application/json");
-            httpPost.setHeader("X-API-Key", apiKey);
-            httpPost.setEntity(new StringEntity(JSON.toJSONString(ttsdto), ContentType.APPLICATION_JSON));
-            // 鎵ц璇锋眰
-            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
-                int statusCode = response.getCode();
-                String responseString = EntityUtils.toString(response.getEntity());
-                if (statusCode == 200) {
-                    // 瑙f瀽JSON鍝嶅簲
-                    ObjectMapper objectMapper = new ObjectMapper();
-                    JsonNode jsonResponse = objectMapper.readTree(responseString);
-                    String audioBase64 = jsonResponse.get("audio").asText();
-                    // 瑙g爜Base64闊抽瀛楃涓�
-                    byte[] audioBytes = Base64.decodeBase64(audioBase64);
-                    // 淇濆瓨闊抽鏂囦欢
-                    // 鎸囧畾鏂囦欢璺緞锛堜綘鍙互鏍规嵁瀹為檯鎯呭喌璁剧疆锛�
-                    String fileName = StrUtil.uuid() + ".wav";
-                    String filePath = "temp/wav/" + fileName;
-                    return fileApi.createFile(fileName, filePath, audioBytes);
-//                    try (FileOutputStream fos = new FileOutputStream("output.wav")) {
-//                        fos.write(audioBytes);
-//                        String path = fileApi.createFile("output.wav", null, audioBytes);
-//                        return path;
-//                    }
-                } else {
-                    System.out.println("Error: " + responseString);
-                }
-            }
-        } catch (IOException | ParseException e) {
-            e.printStackTrace();
-        }
-        return null;
+        String fileName = UUID.randomUUID().toString() + ".wav";
+
+        // 鑾峰彇闊抽鏂囦欢鐨勪簩杩涘埗鏁版嵁
+        byte[] content = execute.bodyBytes();
+
+        // 浣跨敤 `createFile` 鏂规硶瀛樺偍鏂囦欢锛屽苟鑾峰彇 URL
+        String fileUrl = fileApi.createFile(fileName, null, content);
+
+        return fileUrl;  // 杩斿洖瀛樺偍鐨勬枃浠� URL
+        // 杩斿洖闊抽鏂囦欢璺緞
+
+
     }
 
-}
\ No newline at end of file
+}

--
Gitblit v1.9.3