VoiceInfoDTO.java
4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
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();
}
}