TtsRequest.java

package com.shengzhiai.yugu.model;

import java.util.LinkedHashMap;
import java.util.Map;

/** Speech synthesis request, JSON body of {@code POST /api/v1/tts/generate}. */
public class TtsRequest {
    private String text;
    private String language;
    private String voice;
    private String format;
    private Integer speed;
    private Integer pitch;
    private Integer volume;
    private String style;

    /** Creates an empty request; set at least the text. */
    public TtsRequest() {
    }

    /**
     * @param text     text to speak
     * @param language zh-CN or en-US
     * @param voice    xiaoyan or xiaofeng for Chinese, female or male for English
     */
    public TtsRequest(String text, String language, String voice) {
        this.text = text;
        this.language = language;
        this.voice = voice;
    }

    /** @param v text @return this */
    public TtsRequest text(String v) {
        this.text = v;
        return this;
    }

    /** @param v language @return this */
    public TtsRequest language(String v) {
        this.language = v;
        return this;
    }

    /** @param v voice @return this */
    public TtsRequest voice(String v) {
        this.voice = v;
        return this;
    }

    /** @param v mp3 (default), wav or ogg @return this */
    public TtsRequest format(String v) {
        this.format = v;
        return this;
    }

    /** @param v speed in [0, 100], default 50 @return this */
    public TtsRequest speed(Integer v) {
        this.speed = v;
        return this;
    }

    /** @param v pitch in [0, 100], default 50 @return this */
    public TtsRequest pitch(Integer v) {
        this.pitch = v;
        return this;
    }

    /** @param v volume in [0, 100], default 50 @return this */
    public TtsRequest volume(Integer v) {
        this.volume = v;
        return this;
    }

    /** @param v style @return this */
    public TtsRequest style(String v) {
        this.style = v;
        return this;
    }

    /** @return text */
    public String getText() {
        return text;
    }

    /** @return language */
    public String getLanguage() {
        return language;
    }

    /** @return voice */
    public String getVoice() {
        return voice;
    }

    /** @return format */
    public String getFormat() {
        return format;
    }

    /** @return speed */
    public Integer getSpeed() {
        return speed;
    }

    /** @return pitch */
    public Integer getPitch() {
        return pitch;
    }

    /** @return volume */
    public Integer getVolume() {
        return volume;
    }

    /** @return style */
    public String getStyle() {
        return style;
    }

    /**
     * Body fields in the order they are sent; null fields are left out.
     *
     * @return field name to value
     */
    public Map<String, Object> toBody() {
        Map<String, Object> m = new LinkedHashMap<>();
        put(m, "text", text);
        put(m, "language", language);
        put(m, "voice", voice);
        put(m, "format", format);
        put(m, "speed", speed);
        put(m, "pitch", pitch);
        put(m, "volume", volume);
        put(m, "style", style);
        return m;
    }

    private static void put(Map<String, Object> m, String k, Object v) {
        if (v != null) {
            m.put(k, v);
        }
    }
}