Commit 3acd0586355e9c70bab48c89dac364a0a93c872a

Authored by xiaoxin
1 parent bdd7d0c1

【优化】AI 音乐:生成支持指定模型生成,支持回写音乐时长

yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/dal/dataobject/music/AiMusicDO.java
@@ -30,7 +30,7 @@ public class AiMusicDO extends BaseDO { @@ -30,7 +30,7 @@ public class AiMusicDO extends BaseDO {
30 30
31 /** 31 /**
32 * 用户编号 32 * 用户编号
33 - * 33 + * <p>
34 * 关联 AdminUserDO 的 userId 字段 34 * 关联 AdminUserDO 的 userId 字段
35 */ 35 */
36 private Long userId; 36 private Long userId;
@@ -67,7 +67,7 @@ public class AiMusicDO extends BaseDO { @@ -67,7 +67,7 @@ public class AiMusicDO extends BaseDO {
67 67
68 /** 68 /**
69 * 生成模式 69 * 生成模式
70 - * 70 + * <p>
71 * 枚举 {@link AiMusicGenerateModeEnum} 71 * 枚举 {@link AiMusicGenerateModeEnum}
72 */ 72 */
73 private Integer generateMode; 73 private Integer generateMode;
@@ -113,4 +113,10 @@ public class AiMusicDO extends BaseDO { @@ -113,4 +113,10 @@ public class AiMusicDO extends BaseDO {
113 */ 113 */
114 private String errorMessage; 114 private String errorMessage;
115 115
  116 +
  117 + /**
  118 + * 音乐时长
  119 + */
  120 + private Double duration;
  121 +
116 } 122 }
yudao-module-ai/yudao-module-ai-biz/src/main/java/cn/iocoder/yudao/module/ai/service/music/AiMusicServiceImpl.java
@@ -132,7 +132,7 @@ public class AiMusicServiceImpl implements AiMusicService { @@ -132,7 +132,7 @@ public class AiMusicServiceImpl implements AiMusicService {
132 return convertList(musicList, musicData -> new AiMusicDO() 132 return convertList(musicList, musicData -> new AiMusicDO()
133 .setTaskId(musicData.id()).setModel(musicData.modelName()) 133 .setTaskId(musicData.id()).setModel(musicData.modelName())
134 .setPrompt(musicData.prompt()).setGptDescriptionPrompt(musicData.gptDescriptionPrompt()) 134 .setPrompt(musicData.prompt()).setGptDescriptionPrompt(musicData.gptDescriptionPrompt())
135 - .setAudioUrl(createFile(musicData.audioUrl())).setVideoUrl(createFile(musicData.videoUrl())).setImageUrl(createFile(musicData.imageUrl())) 135 + .setAudioUrl(createFile(musicData.audioUrl())).setVideoUrl(createFile(musicData.videoUrl())).setImageUrl(createFile(musicData.imageUrl())).setDuration(musicData.duration())
136 .setTitle(musicData.title()).setLyric(musicData.lyric()).setTags(StrUtil.split(musicData.tags(), StrPool.COMMA)) 136 .setTitle(musicData.title()).setLyric(musicData.lyric()).setTags(StrUtil.split(musicData.tags(), StrPool.COMMA))
137 .setStatus(Objects.equals("complete", musicData.status()) ? 137 .setStatus(Objects.equals("complete", musicData.status()) ?
138 AiMusicStatusEnum.SUCCESS.getStatus() : AiMusicStatusEnum.IN_PROGRESS.getStatus())); 138 AiMusicStatusEnum.SUCCESS.getStatus() : AiMusicStatusEnum.IN_PROGRESS.getStatus()));
yudao-module-ai/yudao-spring-boot-starter-ai/src/main/java/cn/iocoder/yudao/framework/ai/core/model/suno/api/SunoApi.java
@@ -117,7 +117,7 @@ public class SunoApi { @@ -117,7 +117,7 @@ public class SunoApi {
117 * @param prompt 用于生成音乐音频的提示 117 * @param prompt 用于生成音乐音频的提示
118 * @param tags 音乐风格 118 * @param tags 音乐风格
119 * @param title 音乐名称 119 * @param title 音乐名称
120 - * @param mv 模型 120 + * @param model 模型
121 * @param waitAudio false 表示后台模式,仅返回音频任务信息,需要调用 get API 获取详细的音频信息。 121 * @param waitAudio false 表示后台模式,仅返回音频任务信息,需要调用 get API 获取详细的音频信息。
122 * true 表示同步模式,API 最多等待 100s,音频生成完毕后直接返回音频链接等信息,建议在 GPT 等 agent 中使用。 122 * true 表示同步模式,API 最多等待 100s,音频生成完毕后直接返回音频链接等信息,建议在 GPT 等 agent 中使用。
123 * @param makeInstrumental 指示音乐音频是否为定制,如果为 true,则从歌词生成,否则从提示生成 123 * @param makeInstrumental 指示音乐音频是否为定制,如果为 true,则从歌词生成,否则从提示生成
@@ -127,7 +127,7 @@ public class SunoApi { @@ -127,7 +127,7 @@ public class SunoApi {
127 String prompt, 127 String prompt,
128 String tags, 128 String tags,
129 String title, 129 String title,
130 - String mv, 130 + String model,
131 @JsonProperty("wait_audio") boolean waitAudio, 131 @JsonProperty("wait_audio") boolean waitAudio,
132 @JsonProperty("make_instrumental") boolean makeInstrumental 132 @JsonProperty("make_instrumental") boolean makeInstrumental
133 ) { 133 ) {
@@ -136,12 +136,12 @@ public class SunoApi { @@ -136,12 +136,12 @@ public class SunoApi {
136 this(prompt, null, null, null, false, false); 136 this(prompt, null, null, null, false, false);
137 } 137 }
138 138
139 - public MusicGenerateRequest(String prompt, String mv, boolean makeInstrumental) {  
140 - this(prompt, null, null, mv, false, makeInstrumental); 139 + public MusicGenerateRequest(String prompt, String model, boolean makeInstrumental) {
  140 + this(prompt, null, null, model, false, makeInstrumental);
141 } 141 }
142 142
143 - public MusicGenerateRequest(String prompt, String mv, String tags, String title) {  
144 - this(prompt, tags, title, mv, false, false); 143 + public MusicGenerateRequest(String prompt, String model, String tags, String title) {
  144 + this(prompt, tags, title, model, false, false);
145 } 145 }
146 146
147 } 147 }
@@ -162,6 +162,7 @@ public class SunoApi { @@ -162,6 +162,7 @@ public class SunoApi {
162 * @param prompt 生成音乐音频的提示 162 * @param prompt 生成音乐音频的提示
163 * @param type 操作类型 163 * @param type 操作类型
164 * @param tags 音乐类型标签 164 * @param tags 音乐类型标签
  165 + * @param duration 音乐时长
165 */ 166 */
166 public record MusicData( 167 public record MusicData(
167 String id, 168 String id,
@@ -176,7 +177,8 @@ public class SunoApi { @@ -176,7 +177,8 @@ public class SunoApi {
176 @JsonProperty("gpt_description_prompt") String gptDescriptionPrompt, 177 @JsonProperty("gpt_description_prompt") String gptDescriptionPrompt,
177 String prompt, 178 String prompt,
178 String type, 179 String type,
179 - String tags 180 + String tags,
  181 + Double duration
180 ) { 182 ) {
181 } 183 }
182 184