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;

    /**
     * audioName
     */
    private String  audioName;
    
    /**
     * 构造函数
     * 
     * @param model 模型名称
     * @param input 输入文本
     */
    public SiliconFlowTtsRequest(String model, String input) {
        this.model = model;
        this.input = input;
    }
}
