Browse Source

选择音乐创建视频接口

private_deployment
lrh 2 years ago
parent
commit
3d91fbfbfd
4 changed files with 55 additions and 2 deletions
  1. +1
    -0
      suimangService/src/main/java/com/iformall/enums/EnumVoiceFrom.java
  2. +2
    -0
      suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java
  3. +7
    -1
      suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java
  4. +45
    -1
      suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java

+ 1
- 0
suimangService/src/main/java/com/iformall/enums/EnumVoiceFrom.java View File

@@ -7,6 +7,7 @@ public enum EnumVoiceFrom {


FROM_MOULD(1, "模板"), FROM_MOULD(1, "模板"),
FROM_UPD(2,"用户上传"), FROM_UPD(2,"用户上传"),
MUSIC(3,"音乐"),
; ;


public static EnumVoiceFrom getEnum(Integer code) { public static EnumVoiceFrom getEnum(Integer code) {


+ 2
- 0
suimangService/src/main/java/com/iformall/service/sm/MusicInfoService.java View File

@@ -1,6 +1,7 @@
package com.iformall.service.sm; package com.iformall.service.sm;


import com.iformall.domain.po.sm.MusicInfo; import com.iformall.domain.po.sm.MusicInfo;
import com.iformall.domain.po.sm.VoiceMaterial;


import java.util.List; import java.util.List;


@@ -8,4 +9,5 @@ public interface MusicInfoService {


List<MusicInfo> music(); List<MusicInfo> music();


MusicInfo getById(Long voiceMaterialId);
} }

+ 7
- 1
suimangService/src/main/java/com/iformall/service/sm/impl/MusicInfoServiceImpl.java View File

@@ -2,6 +2,7 @@ package com.iformall.service.sm.impl;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.iformall.domain.po.sm.MusicInfo; import com.iformall.domain.po.sm.MusicInfo;
import com.iformall.domain.po.sm.VoiceMaterial;
import com.iformall.mapper.MusicInfoServiceMapper; import com.iformall.mapper.MusicInfoServiceMapper;
import com.iformall.service.sm.MusicInfoService; import com.iformall.service.sm.MusicInfoService;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -20,6 +21,11 @@ public class MusicInfoServiceImpl implements MusicInfoService {


@Override @Override
public List<MusicInfo> music() { public List<MusicInfo> music() {
return musicInfoServiceMapper.selectList(new LambdaQueryWrapper<MusicInfo>().eq(MusicInfo::getIsDel,0));
return musicInfoServiceMapper.selectList(new LambdaQueryWrapper<MusicInfo>().eq(MusicInfo::getIsDel, 0));
}

@Override
public MusicInfo getById(Long voiceMaterialId) {
return musicInfoServiceMapper.selectById(voiceMaterialId);
} }
} }

+ 45
- 1
suimangService/src/main/java/com/iformall/service/sm/impl/PhotoSpeakVideoServiceImpl.java View File

@@ -63,6 +63,9 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService {
@Autowired @Autowired
private UserCreateVideoNumService userCreateVideoNumService; private UserCreateVideoNumService userCreateVideoNumService;


@Autowired
private MusicInfoService musicInfoService;



@Override @Override
public PageInfo<PhotoSpeakVideo> listAsPage(PhotoSpeakVideo record, Integer pageIndex, Integer pageSize) { public PageInfo<PhotoSpeakVideo> listAsPage(PhotoSpeakVideo record, Integer pageIndex, Integer pageSize) {
@@ -131,6 +134,12 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService {
} }
voiceMaterialService.handVideoUrl(voiceMaterial); voiceMaterialService.handVideoUrl(voiceMaterial);
record.setVoiceMaterialUrl(voiceMaterial.getMaterial()); 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)){ if(StringUtils.isBlank(voiceMaterialUrl)){
msg = "未找到上传声音文件"; 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 = "声音数据异常"; msg = "声音数据异常";
} }


@@ -263,6 +282,9 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService {
} }


try { try {
AiPreviewParam previewParam = new AiPreviewParam();
previewParam.setVoice_id(voiceMouldSmId);

AiPhotoSpeakParam param = new AiPhotoSpeakParam(); AiPhotoSpeakParam param = new AiPhotoSpeakParam();
param.setImg(Base64Util.imageUrlToBase64(photoSpeakVideo.getPersonPhotoUrl())); param.setImg(Base64Util.imageUrlToBase64(photoSpeakVideo.getPersonPhotoUrl()));
param.setVoice_id(voiceMouldSmId); param.setVoice_id(voiceMouldSmId);
@@ -271,15 +293,22 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService {
JSONObject jsonObject = JSON.parseObject(voiceMouldSm); JSONObject jsonObject = JSON.parseObject(voiceMouldSm);
Integer speakTypeStr = jsonObject.getInteger("speakType"); Integer speakTypeStr = jsonObject.getInteger("speakType");
param.setVoice_style(StringUtils.isBlank(voiceType) ? "default" : EnumSpeakType.getEnum(speakTypeStr).getType()); 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"); Integer sex = jsonObject.getInteger("sex");
if (EnumVoiceFrom.FROM_MOULD.getCode().equals(voiceFrom)) { if (EnumVoiceFrom.FROM_MOULD.getCode().equals(voiceFrom)) {
param.setGen_txt(paperwork); param.setGen_txt(paperwork);
previewParam.setGen_txt(paperwork);
if (sex == 1){ if (sex == 1){
param.setGender("male"); param.setGender("male");
previewParam.setGender("male");
}else if (sex == 2){ }else if (sex == 2){
param.setGender("female"); param.setGender("female");
previewParam.setGender("female");
}else { }else {
param.setGender("unknown"); param.setGender("unknown");
previewParam.setGender("unknown");
} }
param.setUrl("None"); param.setUrl("None");
} else if (EnumVoiceFrom.FROM_UPD.getCode().equals(voiceFrom)) { } else if (EnumVoiceFrom.FROM_UPD.getCode().equals(voiceFrom)) {
@@ -288,6 +317,21 @@ public class PhotoSpeakVideoServiceImpl implements PhotoSpeakVideoService {
param.setUrl(voiceMaterialUrl); 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); AiPhotoSpeakResult video = AiVideoHelper.createPhotoSpeakVideo(param);
if (video.isSuccess()) { if (video.isSuccess()) {
videoUpd.setVideoPath(video.getUrl()); videoUpd.setVideoPath(video.getUrl());


Loading…
Cancel
Save