文字转语音

This commit is contained in:
spllzh
2025-10-04 19:52:06 +08:00
parent 24c00c22ab
commit 06730b656e
51 changed files with 5157 additions and 8 deletions

View File

@@ -87,6 +87,10 @@ public class DifyWorkflowResponseDto {

View File

@@ -0,0 +1,112 @@
package com.rj.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
/**
* SiliconFlow TTS 请求DTO
* https://docs.siliconflow.cn/cn/userguide/capabilities/text-to-speech#5
*
* 主要请求参数:
* model用于语音合成的模型支持的模型列表。
* input待转换为音频的文本内容。
* voice参考音色支持系统预置音色、用户预置音色、用户动态音色。 详细参数请参考:创建文本转语音请求。
* speed可以控制音频速度float类型默认值是1.0,可选范围是[0.25,4.0]
* gain音频增益单位dB可以控制音频声音大小float类型默认值是0.0,可选范围是[-10,10]
* response_format控制输出格式支持 mp3、opus、wav 和 pcm 格式。在选择不同的输出格式时,输出的采样率也会有所不同。
* sample_rate可以控制输出采样率对于不同的视频输出类型默认值和可取值范围均不同具体如下
* opus: 目前只支持48000hz
* wav, pcm: 支持 (8000, 16000, 24000, 32000, 44100), 默认44100
* mp3: 支持(32000, 44100), 默认44100
*
*
* @author rj
* @date 2025-01-02
*/
@Data
public class SiliconFlowTtsRequest {
/**
* TTS模型名称
*/
@JsonProperty("model")
private String model;
/**
* 要转换的文本内容
*/
@JsonProperty("input")
private String input;
/**
* 语音参数(必填)
* fnlp/MOSS-TTSD-v0.5 模型支持的voice值
* - fnlp/MOSS-TTSD-v0.5:alex (沉稳男声)
* - fnlp/MOSS-TTSD-v0.5:anna (沉稳女声)
* - fnlp/MOSS-TTSD-v0.5:bella (激情女声)
* - fnlp/MOSS-TTSD-v0.5:benjamin (低沉男声)
* - fnlp/MOSS-TTSD-v0.5:charles (磁性男声)
* - fnlp/MOSS-TTSD-v0.5:claire (温柔女声)
* - fnlp/MOSS-TTSD-v0.5:david (欢快男声)
* - fnlp/MOSS-TTSD-v0.5:diana (欢快女声)
*/
@JsonProperty("voice")
private String voice = "fnlp/MOSS-TTSD-v0.5:claire";
/**
* 语速(可选)
*/
@JsonProperty("speed")
private Double speed=1.0;
/**
* 音调(可选)
*/
@JsonProperty("pitch")
private Double pitch;
/**
* 音量(可选)
*/
@JsonProperty("volume")
private Double volume;
/**
* 输出格式(可选)
*/
@JsonProperty("format")
private String format;
/**
* 采样率(可选)
*/
@JsonProperty("sample_rate")
private Integer sampleRate;
/**
* 构造函数
*/
public SiliconFlowTtsRequest() {
}
/**
* 创建人姓名
*/
private String creatorName;
/**
* 创建人电话
*/
private String creatorPhone;
/**
* 构造函数
*
* @param model 模型名称
* @param input 输入文本
*/
public SiliconFlowTtsRequest(String model, String input) {
this.model = model;
this.input = input;
}
}

View File

@@ -0,0 +1,137 @@
package com.rj.dto;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* SiliconFlow TTS 响应DTO
*
* @author rj
* @date 2025-01-02
*/
@Data
public class SiliconFlowTtsResponse {
/**
* 音频数据Base64编码
*/
@JsonProperty("audio")
private String audio;
/**
* 音频格式
*/
@JsonProperty("format")
private String format;
/**
* 采样率
*/
@JsonProperty("sample_rate")
private Integer sampleRate;
/**
* 音频时长(秒)
*/
@JsonProperty("duration")
private Double duration;
/**
* 错误信息
*/
@JsonProperty("error")
private String error;
/**
* 错误代码
*/
@JsonProperty("error_code")
private String errorCode;
/**
* 请求ID
*/
@JsonProperty("request_id")
private String requestId;
/**
* 是否成功
*/
private boolean success;
/**
* 错误消息
*/
private String message;
/**
* MinIO访问URL
*/
private String minioUrl;
/**
* 短链临时访问URL
*/
private String shortUrl;
/**
* 短链过期时间
*/
private LocalDateTime shortUrlExpireTime;
/**
* 构造函数
*/
public SiliconFlowTtsResponse() {
}
/**
* 创建成功响应
*
* @param audio 音频数据
* @param format 音频格式
* @param sampleRate 采样率
* @param duration 时长
* @return 成功响应
*/
public static SiliconFlowTtsResponse success(String audio, String format, Integer sampleRate, Double duration) {
SiliconFlowTtsResponse response = new SiliconFlowTtsResponse();
response.setSuccess(true);
response.setAudio(audio);
response.setFormat(format);
response.setSampleRate(sampleRate);
response.setDuration(duration);
return response;
}
/**
* 创建错误响应
*
* @param error 错误信息
* @param errorCode 错误代码
* @return 错误响应
*/
public static SiliconFlowTtsResponse error(String error, String errorCode) {
SiliconFlowTtsResponse response = new SiliconFlowTtsResponse();
response.setSuccess(false);
response.setError(error);
response.setErrorCode(errorCode);
response.setMessage(error);
return response;
}
/**
* 创建错误响应
*
* @param message 错误消息
* @return 错误响应
*/
public static SiliconFlowTtsResponse error(String message) {
SiliconFlowTtsResponse response = new SiliconFlowTtsResponse();
response.setSuccess(false);
response.setMessage(message);
return response;
}
}