diff --git a/suimangService/src/main/java/com/iformall/enums/EnumVoiceFrom.java b/suimangService/src/main/java/com/iformall/enums/EnumVoiceFrom.java index 4133511..b2f0b43 100644 --- a/suimangService/src/main/java/com/iformall/enums/EnumVoiceFrom.java +++ b/suimangService/src/main/java/com/iformall/enums/EnumVoiceFrom.java @@ -7,6 +7,7 @@ public enum EnumVoiceFrom { FROM_MOULD(1, "模板"), FROM_UPD(2,"用户上传"), + MUSIC(3,"音乐"), ; public static EnumVoiceFrom getEnum(Integer code) { diff --git a/suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java b/suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java index ec79e67..df1f241 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java +++ b/suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java @@ -1,6 +1,7 @@ package com.iformall.service.sm; import com.iformall.domain.po.sm.MusicInfo; +import com.iformall.domain.po.sm.VoiceMaterial; import java.util.List; @@ -8,4 +9,5 @@ public interface MusicInfoService { List music(); + MusicInfo getById(Long voiceMaterialId); } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java index 723ca61..1832ec4 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java @@ -2,6 +2,7 @@ package com.iformall.service.sm.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.iformall.domain.po.sm.MusicInfo; +import com.iformall.domain.po.sm.VoiceMaterial; import com.iformall.mapper.MusicInfoServiceMapper; import com.iformall.service.sm.MusicInfoService; import org.slf4j.Logger; @@ -20,6 +21,11 @@ public class MusicInfoServiceImpl implements MusicInfoService { @Override public List music() { - return musicInfoServiceMapper.selectList(new LambdaQueryWrapper().eq(MusicInfo::getIsDel,0)); + return musicInfoServiceMapper.selectList(new LambdaQueryWrapper().eq(MusicInfo::getIsDel, 0)); + } + + @Override + public MusicInfo getById(Long voiceMaterialId) { + return musicInfoServiceMapper.selectById(voiceMaterialId); } } diff --git a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java index fea38b8..434c5aa 100644 --- a/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java @@ -63,6 +63,9 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { @Autowired private UserCreateVideoNumService userCreateVideoNumService; + @Autowired + private MusicInfoService musicInfoService; + @Override public PageInfo listAsPage(PhotoSpeakVideo record, Integer pageIndex, Integer pageSize) { @@ -131,6 +134,12 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { } voiceMaterialService.handVideoUrl(voiceMaterial); record.setVoiceMaterialUrl(voiceMaterial.getMaterial()); + }else if(EnumVoiceFrom.MUSIC.getCode().equals(record.getVoiceFrom())){ + if(record.getVoiceMaterialId() == null){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"未选择音乐文件"); + } + MusicInfo musicInfo = musicInfoService.getById(record.getVoiceMaterialId()); + record.setVoiceMaterialUrl(musicInfo.getUrl()); } } @@ -222,7 +231,17 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { if(StringUtils.isBlank(voiceMaterialUrl)){ msg = "未找到上传声音文件"; } - } else{ + } else if (EnumVoiceFrom.MUSIC.getCode().equals(voiceFrom)) { + Long materialId = photoSpeakVideo.getVoiceMaterialId(); + MusicInfo musicInfo = musicInfoService.getById(materialId); + if (ObjectUtils.isEmpty(musicInfo)){ + msg = "未找到音乐文件"; + } + voiceMaterialUrl = musicInfo.getUrl(); + if (StringUtils.isBlank(voiceMaterialUrl)) { + msg = "音乐文件错误"; + } + } else { msg = "声音数据异常"; } @@ -263,6 +282,9 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { } try { + AiPreviewParam previewParam = new AiPreviewParam(); + previewParam.setVoice_id(voiceMouldSmId); + AiPhotoSpeakParam param = new AiPhotoSpeakParam(); param.setImg(Base64Util.imageUrlToBase64(photoSpeakVideo.getPersonPhotoUrl())); param.setVoice_id(voiceMouldSmId); @@ -271,15 +293,22 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { JSONObject jsonObject = JSON.parseObject(voiceMouldSm); Integer speakTypeStr = jsonObject.getInteger("speakType"); param.setVoice_style(StringUtils.isBlank(voiceType) ? "default" : EnumSpeakType.getEnum(speakTypeStr).getType()); + + previewParam.setVoice_style(StringUtils.isBlank(voiceType) ? "default" : EnumSpeakType.getEnum(speakTypeStr).getType()); + Integer sex = jsonObject.getInteger("sex"); if (EnumVoiceFrom.FROM_MOULD.getCode().equals(voiceFrom)) { param.setGen_txt(paperwork); + previewParam.setGen_txt(paperwork); if (sex == 1){ param.setGender("male"); + previewParam.setGender("male"); }else if (sex == 2){ param.setGender("female"); + previewParam.setGender("female"); }else { param.setGender("unknown"); + previewParam.setGender("unknown"); } param.setUrl("None"); } else if (EnumVoiceFrom.FROM_UPD.getCode().equals(voiceFrom)) { @@ -288,6 +317,21 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService { param.setUrl(voiceMaterialUrl); } + //TTS音色预览 + AiPreviewResult result = AiVideoHelper.voicePreview(previewParam); + if (!result.isSuccess()) { + videoUpd.setVideoStatus(EnumVideoStatus.fail.getCode()); + videoUpd.setVideoMsg(result.getMsgInfo(result.getCode(), result.getMsg())); + videoUpd.setCreateVideoDate(new Date()); + this.saveOrUpdate(videoUpd); + + if (flag) { + //如果生成视频失败了,就把创建视频的次数加回去 + userCreateVideoNumService.addOrSubtractNumberOfTimes(2, createVideoNum); + } + return new AsyncResult<>(0); + } + AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param); if (video.isSuccess()) { videoUpd.setVideoPath(video.getUrl());