package com.xly.tts.bean; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.io.Serializable; /** * 语音信息数据传输对象 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class VoiceInfoDTO implements Serializable { private static final long serialVersionUID = 1L; /** * 语音唯一标识(如:zh-CN-XiaoxiaoNeural) */ private String name; /** * 语音显示名称(友好名称) */ private String displayName; /** * 语言区域代码(如:zh-CN, en-US, ja-JP) */ private String locale; /** * 性别:Male, Female */ private String gender; /** * 建议的使用代码 */ private String suggestedCode; /** * 语音类型:Standard, Neural */ @Builder.Default private String voiceType = "Neural"; /** * 是否本地可用 */ @Builder.Default private Boolean localAvailable = true; /** * 状态:available, unavailable, deprecated */ @Builder.Default private String status = "available"; /** * 采样率 */ private Integer sampleRate; /** * 比特率 */ private Integer bitRate; /** * 语速范围(如:-50% 到 +50%) */ private String rateRange; /** * 音量范围 */ private String volumeRange; /** * 音高范围 */ private String pitchRange; /** * 描述信息 */ private String description; /** * 创建时间戳 */ private Long createTime; /** * 更新时间戳 */ private Long updateTime; /** * 是否为默认语音 */ @Builder.Default private Boolean isDefault = false; /** * 是否为推荐语音 */ @Builder.Default private Boolean isRecommended = false; /** * 排序权重 */ @Builder.Default private Integer sortWeight = 0; /** * 额外属性(JSON格式) */ private String extraProperties; // 便捷方法 /** * 获取语言代码(如:zh, en, ja) */ public String getLanguageCode() { if (locale != null && locale.contains("-")) { return locale.split("-")[0]; } return locale; } /** * 获取国家/地区代码(如:CN, US, JP) */ public String getCountryCode() { if (locale != null && locale.contains("-")) { String[] parts = locale.split("-"); if (parts.length > 1) { return parts[1]; } } return ""; } /** * 是否为中文语音 */ public Boolean isChinese() { return locale != null && locale.startsWith("zh-"); } /** * 是否为英文语音 */ public Boolean isEnglish() { return locale != null && locale.startsWith("en-"); } /** * 是否为女性语音 */ public Boolean isFemale() { return "Female".equalsIgnoreCase(gender); } /** * 是否为男性语音 */ public Boolean isMale() { return "Male".equalsIgnoreCase(gender); } /** * 获取语音分类 */ public String getCategory() { if (isChinese()) { return "中文语音"; } else if (isEnglish()) { return "英文语音"; } else if (locale != null) { String lang = getLanguageCode(); switch (lang) { case "ja": return "日语语音"; case "ko": return "韩语语音"; case "fr": return "法语语音"; case "de": return "德语语音"; case "es": return "西班牙语语音"; default: return "其他语音"; } } return "未知"; } /** * 获取完整的显示名称 */ public String getFullDisplayName() { StringBuilder sb = new StringBuilder(); if (displayName != null) { sb.append(displayName); } else if (name != null) { sb.append(name); } if (locale != null) { sb.append(" (").append(locale).append(")"); } if (gender != null) { sb.append(" - ").append("Female".equalsIgnoreCase(gender) ? "女声" : "男声"); } return sb.toString(); } }