From aebe177d8b88446123496d623fb59c0de1d27585 Mon Sep 17 00:00:00 2001 From: du <13220750630.163.com> Date: 星期一, 14 四月 2025 16:36:47 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceUtil.java | 81 ++++++++++++++++++++++++++++++++-------- yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/util/PPTUtil.java | 3 + yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/VoicesDO.java | 6 ++- yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceImpl.java | 9 +--- 4 files changed, 73 insertions(+), 26 deletions(-) diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/VoicesDO.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/VoicesDO.java index 91e0f89..3f492b5 100644 --- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/VoicesDO.java +++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/dal/dataobject/voices/VoicesDO.java @@ -64,7 +64,7 @@ */ private Integer quality; /** - * 澹伴煶绫诲瀷 + * 澹伴煶绫诲瀷 * * 鏋氫妇 {@link TODO digitalcourse_voices_type 瀵瑰簲鐨勭被} */ @@ -84,5 +84,7 @@ * 鍏嬮殕绫诲瀷锛�1锛氭櫘閫氾紝2锛氶珮绾э級 */ private Integer type; + private String referenceAudioText; + private String asrFormatAudioUrl; -} \ 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 7268984..3f5604f 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 @@ -55,14 +55,11 @@ createReqVO.setCode(UUID.fastUUID().toString()); // 鎻掑叆 VoicesDO voices = BeanUtils.toBean(createReqVO, VoicesDO.class); + voices.setStatus(3); + voices.setFixAuditionUrl(voices.getAuditionUrl()); voicesMapper.insert(voices); // 鍒ゆ柇濡傛灉鏄瀬閫熸ā寮忥紝鑷姩寮�濮嬭缁� - if(voices.getType()==1) { - VoicesSaveReqVO reqVO = BeanUtils.toBean(voices, VoicesSaveReqVO.class); - reqVO.setStatus(3); - reqVO.setFixAuditionUrl(voices.getAuditionUrl()); - updateVoices(reqVO); - } + voicesServiceUtil.remoteTrain(transferVO(voices.getId())); // 杩斿洖 return voices.getId(); } diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceUtil.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceUtil.java index b2bad44..0ababbb 100644 --- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceUtil.java +++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/service/voices/VoicesServiceUtil.java @@ -3,6 +3,7 @@ import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.iocoder.yudao.module.digitalcourse.controller.admin.voices.vo.VoicesTrailVO; +import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.digitalhumans.DigitalHumansDO; import cn.iocoder.yudao.module.digitalcourse.dal.dataobject.voices.VoicesDO; import cn.iocoder.yudao.module.digitalcourse.dal.mysql.voices.VoicesMapper; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; @@ -19,6 +20,12 @@ import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -44,20 +51,53 @@ private ConfigApi configApi; @Resource private VoicesMapper voicesMapper; + private static final String HEYGEM_VOICE_DATA = "heygem.voice.data"; + private static final String HEYGEM_FACE2FACE = "heygem.face2face"; + + private static final String EASEGEN_URL = "easegen.url"; + + private static final String HEYGEM_CORE_URL = "heygem.core.url"; + @Async public void remoteTrain(VoicesTrailVO trailVO){ + String origin_audio = configApi.getConfigValueByKey(HEYGEM_VOICE_DATA) + "/origin_audio"; + //璁粌鍓嶆牎楠� + try { + Files.createDirectories(Path.of(origin_audio)); + } catch (IOException e) { + throw new RuntimeException(e); + } + String extname = trailVO.getFixAuditionUrl().substring(trailVO.getFixAuditionUrl().lastIndexOf(".")); + String modelFileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()) + extname; + String modelFilePath = Paths.get(origin_audio, modelFileName).toString(); + + String substring = configApi.getConfigValueByKey(EASEGEN_URL)+trailVO.getFixAuditionUrl().substring(trailVO.getFixAuditionUrl().lastIndexOf("/")); + + try { + Files.copy(Path.of(substring), Path.of(modelFilePath), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + throw new RuntimeException(e); + } + + String configValueByKey = configApi.getConfigValueByKey(HEYGEM_VOICE_DATA); + // 璁$畻鐩稿璺緞 + Path relativeAudioPath = Path.of(configValueByKey).relativize(Path.of(modelFilePath)); + Map<String, Object> map = Map.of( + "format", "wav", + "reference_audio", relativeAudioPath.toString().replace("\\", "/"), + "lang", "zh" + ); + // 灏嗚矾寰勪腑鐨刓鏇挎崲涓�/ relativeAudioPath.toString() + int maxRetries = 3; // 鏈�澶ч噸璇曟鏁� int retryCount = 0; // 褰撳墠閲嶈瘯娆℃暟 boolean success = false; - ObjectMapper mapper = new ObjectMapper(); - mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE); while (retryCount < maxRetries && !success) { try { // 鍙戦�丳OST璇锋眰 - HttpResponse execute = HttpRequest.post(configApi.getConfigValueByKey(EASEGEN_CORE_URL) + "/api/clone_voice") - .header("X-API-Key", configApi.getConfigValueByKey(EASEGEN_CORE_KEY)) - .body(mapper.writeValueAsString(trailVO)) + HttpResponse execute = HttpRequest.post(configApi.getConfigValueByKey(HEYGEM_CORE_URL) + "/v1/preprocess_and_tran") + .body(JSON.toJSONString(map)) .execute(); String body = execute.body(); @@ -72,20 +112,27 @@ } continue; // 閲嶆柊灏濊瘯 } - + retryCount++; + if (retryCount >= maxRetries) { + voicesMapper.update(new UpdateWrapper<VoicesDO>().lambda().eq(VoicesDO::getCode, trailVO.getCode()).set(VoicesDO::getStatus, ERROR_STATUS)); + log.error("璁粌澶辫触锛�->>>>>>>>>"); + return; + } // 瑙f瀽鍝嶅簲锛屾鏌ユ槸鍚︽湁閿欒淇℃伅 JSONObject responseJson = JSON.parseObject(body); - if (!responseJson.getBoolean("success")) { - // 澶勭悊涓氬姟閫昏緫閿欒锛屾洿鏂扮姸鎬佸拰閿欒淇℃伅 - String errorDetail = responseJson.getString("detail"); - retryCount++; - if (retryCount >= maxRetries) { - voicesMapper.update(new UpdateWrapper<VoicesDO>().lambda().eq(VoicesDO::getCode, trailVO.getCode()).set(VoicesDO::getStatus, ERROR_STATUS)); - log.error("璁粌澶辫触锛�->>>>>>>>>", errorDetail); - return; - } - continue; // 閲嶆柊灏濊瘯 - } + // 澶勭悊涓氬姟閫昏緫閿欒锛屾洿鏂扮姸鎬佸拰閿欒淇℃伅 + String referenceAudioText = responseJson.getString("reference_audio_text"); + String asrFormatAudioUrl = responseJson.getString("asr_format_audio_url"); + + + voicesMapper.update( + new UpdateWrapper<VoicesDO>() + .lambda() + .eq(VoicesDO::getCode, trailVO.getCode()) // 鏉′欢锛歝ode 绛変簬浼犲叆鐨勫�� + .set(VoicesDO::getStatus, 0) // 鏇存柊瀛楁 status 涓� 0 + .set(VoicesDO::getAsrFormatAudioUrl,asrFormatAudioUrl) + .set(VoicesDO::getReferenceAudioText,referenceAudioText) + ); success = true; }catch (Exception e){ retryCount++; diff --git a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/util/PPTUtil.java b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/util/PPTUtil.java index ec3723b..f917600 100644 --- a/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/util/PPTUtil.java +++ b/yudao-module-digitalcourse/yudao-module-digitalcourse-biz/src/main/java/cn/iocoder/yudao/module/digitalcourse/util/PPTUtil.java @@ -115,7 +115,7 @@ try { // 鏇存柊杩涘害涓哄紑濮� redisCache.opsForValue().set(ANALYSIS_PPT_KEY + pptId, "0", 1, TimeUnit.DAYS); - + // 涓嬭浇鏂囦欢 log.info("[analysisPptLocal][寮�濮嬩笅杞絔 pptId:{}, url:{}", pptId, fileUrl); downloadedFile = downloadFile(fileUrl); @@ -168,6 +168,7 @@ } private File downloadFile(String fileUrl) throws IOException { + fileUrl = "http://127.0.0.1:48080" + fileUrl; log.info("[downloadFile][寮�濮媇 url:{}", fileUrl); URL url = new URL(fileUrl); String tempFileName = UUID.randomUUID().toString(); -- Gitblit v1.9.3