@henjicc/ai-sdk 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/CHANGELOG.md +225 -211
  2. package/README.md +2 -2
  3. package/dist/capabilities/speech-recognition/bailian/module.js +29 -14
  4. package/dist/capabilities/speech-recognition/bailian/types.d.ts +2 -0
  5. package/dist/catalog/apimart/gemini-omni-flash.model.js +3 -14
  6. package/dist/catalog/kie/gemini-omni-video.model.js +5 -26
  7. package/dist/catalog/ppio/minimax-speech.model.js +1 -1
  8. package/dist/catalog/volcengine-speech/seed-icl-2.0.model.d.ts +1 -0
  9. package/dist/catalog/volcengine-speech/seed-icl-2.0.model.js +52 -10
  10. package/dist/catalog/volcengine-speech/seed-tts-2.0-voices.d.ts +2 -0
  11. package/dist/catalog/volcengine-speech/seed-tts-2.0-voices.js +438 -0
  12. package/dist/catalog/volcengine-speech/seed-tts-2.0.model.js +2 -2
  13. package/dist/generation/core.d.ts +6 -0
  14. package/dist/generation/core.js +10 -2
  15. package/dist/index.d.ts +5 -0
  16. package/dist/index.js +7 -0
  17. package/dist/providers/volcengine-speech.d.ts +1 -1
  18. package/dist/providers/volcengine-speech.js +9 -3
  19. package/dist/providers/volcengine-voice-clone.d.ts +3 -0
  20. package/dist/providers/volcengine-voice-clone.js +129 -0
  21. package/dist/types/runtime.d.ts +3 -0
  22. package/dist/upload/media-binary.js +1 -0
  23. package/docs/consumers.md +27 -9
  24. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_APIMart.md +1 -0
  25. package/docs/model-adaptation/Gemini-Omni-Flash/Gemini-Omni-Flash_KIE.md +1 -0
  26. package/docs/model-adaptation/README.md +11 -9
  27. package/docs/model-adaptation/Seed-ICL-2.0/Seed-ICL-2.0_/347/201/253/345/261/261/345/274/225/346/223/216.md +65 -0
  28. package/docs/model-adaptation/TTS-/345/244/232/344/276/233/345/272/224/345/225/206-2026-09.md +69 -69
  29. package/docs/model-adaptation//344/276/233/345/272/224/345/225/206//347/231/276/347/202/274.md +6 -0
  30. package/docs/model-adaptation//346/226/207/346/241/243/351/207/207/351/233/206/346/211/213/345/206/214.md +6 -5
  31. package/package.json +1 -1
@@ -86,12 +86,9 @@ export const apimartGeminiOmniFlashModel = defineModel({
86
86
  { value: 'reference' },
87
87
  { value: 'frame' }
88
88
  ]
89
- },
90
- {
91
- id: 'apimartGeminiOmniFlashExtendTaskId', type: 'text', order: 5,
92
- default: '',
93
- visible: { condition: (params) => params.apimartGeminiOmniFlashChannel !== 'ext' }
94
89
  }
90
+ // extend_from_task_id(多轮延续)要填供应商侧的上一次任务 ID,界面不展示任务 ID、用户也拿不到:
91
+ // 按“不显示且不请求”处理(界面计划 5.8,P-17);以后做成生成记录上的“继续编辑”动作再接入
95
92
  ],
96
93
  endpoints: '/v1/videos/generations',
97
94
  request: {
@@ -136,13 +133,7 @@ export const apimartGeminiOmniFlashModel = defineModel({
136
133
  body.video_urls = videos.slice(0, 1);
137
134
  return body;
138
135
  }
139
- const extendTaskId = typeof params.apimartGeminiOmniFlashExtendTaskId === 'string'
140
- ? params.apimartGeminiOmniFlashExtendTaskId.trim()
141
- : '';
142
- if (videos.length > 0 && extendTaskId) {
143
- throw new Error('Gemini Omni Flash 官方渠道不能同时传入参考视频和延续任务 ID');
144
- }
145
- if (!prompt && images.length + videos.length === 0 && !extendTaskId) {
136
+ if (!prompt && images.length + videos.length === 0) {
146
137
  throw new Error('Gemini Omni Flash 官方渠道至少需要提示词或一份参考素材');
147
138
  }
148
139
  const body = {
@@ -156,8 +147,6 @@ export const apimartGeminiOmniFlashModel = defineModel({
156
147
  body.image_urls = images.slice(0, 4);
157
148
  if (videos.length > 0)
158
149
  body.video_urls = videos.slice(0, 1);
159
- if (extendTaskId)
160
- body.extend_from_task_id = extendTaskId;
161
150
  return body;
162
151
  }
163
152
  },
@@ -71,19 +71,9 @@ export const kieGeminiOmniVideoModel = defineModel({
71
71
  { value: '1080p' },
72
72
  { value: '4k' }
73
73
  ]
74
- },
75
- {
76
- id: 'kieGeminiOmniVideoAudioIds',
77
- type: 'textarea',
78
- order: 4,
79
- default: ''
80
- },
81
- {
82
- id: 'kieGeminiOmniVideoCharacterIds',
83
- type: 'textarea',
84
- order: 5,
85
- default: ''
86
74
  }
75
+ // audio_ids / character_ids 要先经 omni/audio、omni/character 两个端点创建资产才拿得到 ID,
76
+ // 本应用还没有资产创建与管理入口,用户填不出来:按“不显示且不请求”处理(界面计划 5.8,P-17)
87
77
  ],
88
78
  endpoints: KIE_CREATE_TASK_ENDPOINT,
89
79
  request: {
@@ -103,16 +93,9 @@ export const kieGeminiOmniVideoModel = defineModel({
103
93
  const images = pickSources(params.uploadedFilePaths, params.images);
104
94
  const videos = pickSources(params.uploadedVideoFilePaths, params.videos);
105
95
  const hasVideo = videos.length > 0;
106
- const splitIds = (value) => typeof value === 'string'
107
- ? value.split(/[\n,]/u).map((item) => item.trim()).filter(Boolean)
108
- : [];
109
- const audioIds = splitIds(params.kieGeminiOmniVideoAudioIds).slice(0, 3);
110
- const characterIds = splitIds(params.kieGeminiOmniVideoCharacterIds);
111
- if (hasVideo && characterIds.length > 3)
112
- throw new Error('Gemini Omni 带视频时最多支持 3 个角色资产');
113
- const availableImageSlots = (hasVideo ? MAX_IMAGES_WITH_VIDEO : MAX_IMAGES_NO_VIDEO) - characterIds.length;
114
- if (availableImageSlots < 0 || images.length > availableImageSlots) {
115
- throw new Error('Gemini Omni 的图片与角色资产超过共享的 7 个槽位');
96
+ const availableImageSlots = hasVideo ? MAX_IMAGES_WITH_VIDEO : MAX_IMAGES_NO_VIDEO;
97
+ if (images.length > availableImageSlots) {
98
+ throw new Error(`Gemini Omni 最多支持 ${availableImageSlots} 张参考图(共享 7 个槽位,参考视频占 2 个)`);
116
99
  }
117
100
  const resolution = params.kieGeminiOmniVideoResolution === '1080p' || params.kieGeminiOmniVideoResolution === '4k'
118
101
  ? params.kieGeminiOmniVideoResolution
@@ -149,10 +132,6 @@ export const kieGeminiOmniVideoModel = defineModel({
149
132
  if (images.length > 0) {
150
133
  input.image_urls = images;
151
134
  }
152
- if (audioIds.length > 0)
153
- input.audio_ids = audioIds;
154
- if (characterIds.length > 0)
155
- input.character_ids = characterIds;
156
135
  if (hasVideo) {
157
136
  const rawClipDuration = typeof params.__firstVideoDurationSeconds === 'number' && params.__firstVideoDurationSeconds > 0
158
137
  ? params.__firstVideoDurationSeconds
@@ -11,7 +11,7 @@ export const minimaxSpeechModel = defineModel({
11
11
  canonicalModelId: 'minimax-speech-2.8',
12
12
  provider: 'ppio',
13
13
  type: 'audio',
14
- tags: ['audio', 'text-to-speech', 'voice-synthesis', 'voice-cloning', 'provider-ppio'],
14
+ tags: ['audio', 'text-to-speech', 'voice-synthesis', 'voice-cloning', 'voice-clone', 'provider-ppio'],
15
15
  polling: {
16
16
  interval: 3000,
17
17
  maxAttempts: 120,
@@ -1,2 +1,3 @@
1
+ export declare const VOLC_CLONE_LANGUAGES: number[];
1
2
  export declare const volcengineSeedIcl20Model: import("../../index.js").ModelRuntimeDefinition;
2
3
  export default volcengineSeedIcl20Model;
@@ -1,26 +1,68 @@
1
1
  import { defineModel } from '../defineModel.js';
2
- import { speechString, speechText } from '../audio/tts-common.js';
2
+ import { speechCharacterPrice, speechString, speechText } from '../audio/tts-common.js';
3
+ import { DEFAULT_SEED_TTS_20_VOICE, isSeedTts20SystemVoice } from './seed-tts-2.0-voices.js';
4
+ const cloning = (params) => params.volcIclMode === 'clone';
5
+ const synth = (params) => !cloning(params);
6
+ export const VOLC_CLONE_LANGUAGES = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21];
3
7
  export const volcengineSeedIcl20Model = defineModel({
4
8
  meta: {
5
9
  id: 'volcengine-seed-icl-2.0', canonicalModelId: 'seed-icl-2.0', provider: 'volcengine-speech', type: 'audio',
6
- tags: ['text-to-audio', 'provider-volcengine'],
10
+ tags: ['text-to-audio', 'voice-clone', 'provider-volcengine'],
11
+ polling: { interval: 3000, maxAttempts: 120 },
7
12
  },
8
13
  inputLimits: { images: { max: 0 }, videos: { max: 0 } },
9
14
  params: [
10
- { id: 'volcSeedIclSpeaker', type: 'composite', valueType: 'string', required: true, order: 1, default: '' },
15
+ { id: 'volcIclMode', type: 'dropdown', order: 1, default: 'speech', options: [{ value: 'speech' }, { value: 'clone' }] },
16
+ { id: 'volcSeedIclSpeaker', type: 'composite', valueType: 'string', required: true, order: 2, default: DEFAULT_SEED_TTS_20_VOICE, visible: { condition: synth } },
17
+ { id: 'volcIclActivationConsent', type: 'switch', order: 3, default: false, visible: { condition: p => synth(p) && Boolean(p.volcSeedIclSpeaker) && !isSeedTts20SystemVoice(String(p.volcSeedIclSpeaker)) && !/^S_/i.test(String(p.volcSeedIclSpeaker)) } },
18
+ { id: 'volcCloneName', type: 'text', order: 4, default: '', maxLength: 80, required: true, visible: { condition: cloning } },
19
+ { id: 'volcCloneAudio', type: 'file-upload', order: 5, default: [], maxCount: 1, maxSize: 10_000_000, accept: ['audio/wav', 'audio/x-wav', 'audio/mpeg', 'audio/ogg', 'audio/mp4', 'audio/x-m4a', 'audio/aac'], required: true, visible: { condition: cloning } },
20
+ { id: 'volcCloneLanguage', type: 'dropdown', order: 6, default: 0, options: VOLC_CLONE_LANGUAGES.map(value => ({ value })), visible: { condition: cloning } },
21
+ { id: 'volcCloneTranscript', type: 'textarea', order: 7, default: '', visible: { condition: cloning } },
22
+ { id: 'volcCloneDenoise', type: 'switch', order: 8, default: false, visible: { condition: cloning } },
23
+ { id: 'volcClonePreserveVolume', type: 'switch', order: 9, default: false, visible: { condition: cloning } },
24
+ { id: 'volcCloneExistingSlot', type: 'text', order: 10, default: '', visible: { condition: cloning } },
25
+ { id: 'volcCloneCustomId', type: 'text', order: 11, default: '', visible: { condition: () => false } },
11
26
  ],
12
- endpoints: '/api/v3/tts/unidirectional',
27
+ runtimeConstraints: { mediaFields: [{ field: 'clone_audio', kind: 'audio' }] },
28
+ endpoints: { selector: params => cloning(params) ? '/api/v3/tts/voice_clone' : '/api/v3/tts/unidirectional' },
13
29
  request: {
14
30
  builder: (params) => {
15
- const speaker = speechString(params.volcSeedIclSpeaker);
16
- if (!speaker)
17
- throw new Error('Seed-ICL 2.0 需要已创建的复刻音色 ID');
31
+ if (cloning(params)) {
32
+ const name = speechString(params.volcCloneName);
33
+ const source = Array.isArray(params.volcCloneAudio) ? params.volcCloneAudio[0] : params.volcCloneAudio;
34
+ const audio = typeof source === 'string' ? source : source && typeof source === 'object' && !Array.isArray(source) ? source.path ?? source.url : undefined;
35
+ const demo = speechText(params).trim();
36
+ if (!name)
37
+ throw new Error('请填写音色名称');
38
+ if (typeof audio !== 'string' || !audio)
39
+ throw new Error('请上传声音样本');
40
+ if (Array.from(demo).length < 4 || Array.from(demo).length > 300)
41
+ throw new Error('克隆试听文本须为 4–300 字');
42
+ const language = params.volcCloneLanguage ?? 0;
43
+ if (!VOLC_CLONE_LANGUAGES.includes(language))
44
+ throw new Error('请选择有效的录音语言');
45
+ const custom = speechString(params.volcCloneCustomId);
46
+ if (custom && !/^henji[a-zA-Z0-9]{8,64}$/.test(custom))
47
+ throw new Error('克隆音色代号无效');
48
+ return {
49
+ clone_audio: audio, voice_name: name, language,
50
+ ...(speechString(params.volcCloneExistingSlot) ? { speaker_id: speechString(params.volcCloneExistingSlot) } : {}),
51
+ ...(custom ? { custom_speaker_id: custom } : {}),
52
+ ...(speechString(params.volcCloneTranscript) ? { text: speechString(params.volcCloneTranscript) } : {}),
53
+ extra_params: { demo_text: demo, enable_audio_denoise: params.volcCloneDenoise === true, disable_volume_normalization: params.volcClonePreserveVolume === true },
54
+ };
55
+ }
56
+ const speaker = speechString(params.volcSeedIclSpeaker) ?? DEFAULT_SEED_TTS_20_VOICE;
57
+ const systemVoice = isSeedTts20SystemVoice(speaker);
58
+ if (!systemVoice && !/^S_/i.test(speaker) && params.volcIclActivationConsent !== true)
59
+ throw new Error('后付费音色首次正式合成将收取 138 元槽位费并锁定音色,请先确认费用');
18
60
  return {
19
- resource_id: 'seed-icl-2.0',
20
- req_params: { text: speechText(params), model: 'seed-tts-2.0-standard', speaker, audio_params: { format: 'mp3', sample_rate: 24000 } },
61
+ resource_id: systemVoice ? 'seed-tts-2.0' : 'seed-icl-2.0',
62
+ req_params: { text: speechText(params), ...(!systemVoice ? { model: 'seed-tts-2.0-standard' } : {}), speaker, audio_params: { format: 'mp3', sample_rate: 24000 } },
21
63
  };
22
64
  },
23
65
  },
24
- pricing: { currency: '¥', calculator: () => Number.NaN, description: '火山语音按量计费单价未核实;不显示费用预估' },
66
+ pricing: { currency: '¥', calculator: params => speechCharacterPrice(params, 0.3), description: '3 元/万字符;后付费音色首次正式合成另收 138 元槽位费,训练试听按字符计费' },
25
67
  });
26
68
  export default volcengineSeedIcl20Model;
@@ -0,0 +1,2 @@
1
+ export declare const DEFAULT_SEED_TTS_20_VOICE = "zh_female_vv_uranus_bigtts";
2
+ export declare const isSeedTts20SystemVoice: (id: string) => boolean;
@@ -0,0 +1,438 @@
1
+ // Official Seed-TTS 2.0 system voice IDs, verified 2026-09-28.
2
+ // https://docs.volcengine.com/docs/DoubaoVoice/Tonelist-1?lang=zh
3
+ // Includes official ICL_uranus_* voices; those are NOT user-created clone slots.
4
+ const systemVoiceIds = new Set([
5
+ 'zh_female_vv_uranus_bigtts',
6
+ 'zh_female_xiaohe_uranus_bigtts',
7
+ 'zh_male_m191_uranus_bigtts',
8
+ 'zh_male_taocheng_uranus_bigtts',
9
+ 'zh_male_liufei_uranus_bigtts',
10
+ 'zh_female_sophie_uranus_bigtts',
11
+ 'zh_female_qingxinnvsheng_uranus_bigtts',
12
+ 'zh_female_cancan_uranus_bigtts',
13
+ 'zh_female_sajiaoxuemei_uranus_bigtts',
14
+ 'zh_female_tianmeixiaoyuan_uranus_bigtts',
15
+ 'zh_female_tianmeitaozi_uranus_bigtts',
16
+ 'zh_female_shuangkuaisisi_uranus_bigtts',
17
+ 'zh_female_peiqi_uranus_bigtts',
18
+ 'zh_female_linjianvhai_uranus_bigtts',
19
+ 'zh_male_shaonianzixin_uranus_bigtts',
20
+ 'zh_male_sunwukong_uranus_bigtts',
21
+ 'zh_female_yingyujiaoxue_uranus_bigtts',
22
+ 'zh_female_kefunvsheng_uranus_bigtts',
23
+ 'zh_female_xiaoxue_uranus_bigtts',
24
+ 'zh_male_dayi_uranus_bigtts',
25
+ 'zh_female_mizai_uranus_bigtts',
26
+ 'zh_female_jitangnv_uranus_bigtts',
27
+ 'zh_female_meilinvyou_uranus_bigtts',
28
+ 'zh_female_liuchangnv_uranus_bigtts',
29
+ 'zh_male_ruyayichen_uranus_bigtts',
30
+ 'en_male_tim_uranus_bigtts',
31
+ 'en_female_dacey_uranus_bigtts',
32
+ 'en_female_stokie_uranus_bigtts',
33
+ 'zh_female_wenroumama_uranus_bigtts',
34
+ 'zh_male_jieshuoxiaoming_uranus_bigtts',
35
+ 'zh_female_tvbnv_uranus_bigtts',
36
+ 'zh_male_yizhipiannan_uranus_bigtts',
37
+ 'zh_female_qiaopinv_uranus_bigtts',
38
+ 'zh_female_zhishuaiyingzi_uranus_bigtts',
39
+ 'zh_male_linjiananhai_uranus_bigtts',
40
+ 'zh_male_silang_uranus_bigtts',
41
+ 'zh_male_ruyaqingnian_uranus_bigtts',
42
+ 'zh_male_qingcang_uranus_bigtts',
43
+ 'zh_male_xionger_uranus_bigtts',
44
+ 'zh_female_yingtaowanzi_uranus_bigtts',
45
+ 'zh_male_wennuanahu_uranus_bigtts',
46
+ 'zh_male_naiqimengwa_uranus_bigtts',
47
+ 'zh_female_popo_uranus_bigtts',
48
+ 'zh_female_gaolengyujie_uranus_bigtts',
49
+ 'zh_male_aojiaobazong_uranus_bigtts',
50
+ 'zh_male_lanyinmianbao_uranus_bigtts',
51
+ 'zh_male_fanjuanqingnian_uranus_bigtts',
52
+ 'zh_female_wenroushunv_uranus_bigtts',
53
+ 'zh_female_gufengshaoyu_uranus_bigtts',
54
+ 'zh_male_huolixiaoge_uranus_bigtts',
55
+ 'zh_male_baqiqingshu_uranus_bigtts',
56
+ 'zh_male_xuanyijieshuo_uranus_bigtts',
57
+ 'zh_female_mengyatou_uranus_bigtts',
58
+ 'zh_female_tiexinnvsheng_uranus_bigtts',
59
+ 'zh_female_jitangmei_uranus_bigtts',
60
+ 'zh_male_cixingjieshuonan_uranus_bigtts',
61
+ 'zh_male_liangsangmengzai_uranus_bigtts',
62
+ 'zh_female_kailangjiejie_uranus_bigtts',
63
+ 'zh_male_gaolengchenwen_uranus_bigtts',
64
+ 'zh_male_shenyeboke_uranus_bigtts',
65
+ 'zh_male_lubanqihao_uranus_bigtts',
66
+ 'zh_female_jiaochuannv_uranus_bigtts',
67
+ 'zh_female_linxiao_uranus_bigtts',
68
+ 'zh_female_lingling_uranus_bigtts',
69
+ 'zh_female_chunribu_uranus_bigtts',
70
+ 'zh_male_tangseng_uranus_bigtts',
71
+ 'zh_male_zhuangzhou_uranus_bigtts',
72
+ 'zh_male_kailangdidi_uranus_bigtts',
73
+ 'zh_male_zhubajie_uranus_bigtts',
74
+ 'zh_female_ganmaodianyin_uranus_bigtts',
75
+ 'zh_female_chanmeinv_uranus_bigtts',
76
+ 'zh_female_nvleishen_uranus_bigtts',
77
+ 'zh_female_qinqienv_uranus_bigtts',
78
+ 'zh_male_kuailexiaodong_uranus_bigtts',
79
+ 'zh_male_kailangxuezhang_uranus_bigtts',
80
+ 'zh_male_youyoujunzi_uranus_bigtts',
81
+ 'zh_female_wenjingmaomao_uranus_bigtts',
82
+ 'zh_female_zhixingnv_uranus_bigtts',
83
+ 'zh_male_qingshuangnanda_uranus_bigtts',
84
+ 'zh_male_yuanboxiaoshu_uranus_bigtts',
85
+ 'zh_male_yangguangqingnian_uranus_bigtts',
86
+ 'zh_female_qingchezizi_uranus_bigtts',
87
+ 'zh_female_tianmeiyueyue_uranus_bigtts',
88
+ 'zh_female_xinlingjitang_uranus_bigtts',
89
+ 'zh_male_wenrouxiaoge_uranus_bigtts',
90
+ 'zh_female_roumeinvyou_uranus_bigtts',
91
+ 'zh_male_dongfanghaoran_uranus_bigtts',
92
+ 'zh_female_wenrouxiaoya_uranus_bigtts',
93
+ 'zh_male_tiancaitongsheng_uranus_bigtts',
94
+ 'zh_female_wuzetian_uranus_bigtts',
95
+ 'zh_female_gujie_uranus_bigtts',
96
+ 'zh_male_guanggaojieshuo_uranus_bigtts',
97
+ 'zh_female_shaoergushi_uranus_bigtts',
98
+ 'ICL_uranus_en_female_charlie_tob',
99
+ 'ICL_uranus_en_male_ethan_tob',
100
+ 'ICL_uranus_en_male_alastor_tob',
101
+ 'ICL_uranus_en_male_chucky_tob',
102
+ 'ICL_uranus_en_male_noah_tob',
103
+ 'ICL_uranus_en_male_jigsaw_tob',
104
+ 'ICL_uranus_en_male_clown_man_tob',
105
+ 'ICL_uranus_en_male_cartoon_chef_tob',
106
+ 'ICL_uranus_en_male_frosty_man_tob',
107
+ 'ICL_uranus_en_male_the_grinch_tob',
108
+ 'ICL_uranus_en_male_kevin_mccallister_tob',
109
+ 'ICL_uranus_en_male_michael_tob',
110
+ 'ICL_uranus_en_male_big_boogie_tob',
111
+ 'ICL_uranus_en_male_xavier_tob',
112
+ 'ICL_uranus_en_male_zayne_tob',
113
+ 'ICL_uranus_zh_female_kefuwanjun_tob',
114
+ 'ICL_uranus_zh_female_yingxiaokefu_v2_tob',
115
+ 'ICL_uranus_zh_female_aojiaonvyou_tob',
116
+ 'ICL_uranus_zh_female_aomanjiaosheng_tob',
117
+ 'ICL_uranus_zh_female_xiemeinvwang_tob',
118
+ 'ICL_uranus_zh_female_bingjiaojiejie_tob',
119
+ 'ICL_uranus_zh_female_bingjiaomengmei_tob',
120
+ 'ICL_uranus_zh_female_bingruoshaonv_tob',
121
+ 'ICL_uranus_zh_female_chengshuwenrou_tob',
122
+ 'ICL_uranus_zh_female_chengshujiejie_tob',
123
+ 'ICL_uranus_zh_female_chunzhenshaonv_tob',
124
+ 'ICL_uranus_zh_female_chunchenvsheng_tob',
125
+ 'ICL_uranus_zh_female_wumeikeren_tob',
126
+ 'ICL_uranus_zh_female_guaiqiaokeer_tob',
127
+ 'ICL_uranus_zh_female_heainainai_tob',
128
+ 'ICL_uranus_zh_female_huopodiaoman_tob',
129
+ 'ICL_uranus_zh_female_huoponvhai_tob',
130
+ 'ICL_uranus_zh_female_jiaohannvwang_tob',
131
+ 'ICL_uranus_zh_female_jiaoruoluoli_tob',
132
+ 'ICL_uranus_zh_female_jiaxiaozi_tob',
133
+ 'ICL_uranus_zh_female_jinglingxiangdao_tob',
134
+ 'ICL_uranus_zh_female_kailangtingting_tob',
135
+ 'ICL_uranus_zh_female_kefunvshengwenhecuishou_tob',
136
+ 'ICL_uranus_zh_female_kaixinxiaohong_tob',
137
+ 'ICL_uranus_zh_female_keainvsheng_tob',
138
+ 'ICL_uranus_zh_female_lingdongxinxin_tob',
139
+ 'ICL_uranus_zh_female_linjuayi_tob',
140
+ 'ICL_uranus_zh_female_tianmeijiaoqiao_tob',
141
+ 'ICL_uranus_zh_female_qinglenggaoya_tob',
142
+ 'ICL_uranus_zh_female_lixingyuanzi_tob',
143
+ 'ICL_uranus_zh_female_xingganmeihuo_tob',
144
+ 'ICL_uranus_zh_female_nuanxinqianqian_tob',
145
+ 'ICL_uranus_zh_female_nuanxinxuejie_tob',
146
+ 'ICL_uranus_zh_female_qingtianmeimei_tob',
147
+ 'ICL_uranus_zh_female_qingtiantaotao_tob',
148
+ 'ICL_uranus_zh_female_qingxixiaoxue_tob',
149
+ 'ICL_uranus_zh_female_qingxinshaonv_tob',
150
+ 'ICL_uranus_zh_female_rouguhunshi_tob',
151
+ 'ICL_uranus_zh_female_ruanmengtangtang_tob',
152
+ 'ICL_uranus_zh_female_ruanmengtuanzi_tob',
153
+ 'ICL_uranus_zh_female_tianmeihuopo_tob',
154
+ 'ICL_uranus_zh_female_tianmeixiaoju_tob',
155
+ 'ICL_uranus_zh_female_tianmeixiaoyu_tob',
156
+ 'ICL_uranus_zh_female_tiaopigongzhu_tob',
157
+ 'ICL_uranus_zh_female_tiexinnvyou_tob',
158
+ 'ICL_uranus_zh_female_wenrounvshen_tob',
159
+ 'ICL_uranus_zh_female_wenrouwenya_tob',
160
+ 'ICL_uranus_zh_female_zhixinjiejie_tob',
161
+ 'ICL_uranus_zh_female_wumeiyujie_tob',
162
+ 'ICL_uranus_zh_female_yuanqitianmei_tob',
163
+ 'ICL_uranus_zh_female_xiemeiyujie_tob',
164
+ 'ICL_uranus_zh_female_xingganyujie_tob',
165
+ 'ICL_uranus_zh_female_xiuliqianqian_tob',
166
+ 'ICL_uranus_zh_female_tiexinguimi_tob',
167
+ 'ICL_uranus_zh_female_tiexinmeimei_tob',
168
+ 'ICL_uranus_zh_female_wenroubaiyueguang_tob',
169
+ 'ICL_uranus_zh_female_chuliannvyou_tob',
170
+ 'ICL_uranus_zh_female_zhixingwenwan_tob',
171
+ 'ICL_uranus_zh_male_aoqilingren_tob',
172
+ 'ICL_uranus_zh_male_anrenqinzhu_tob',
173
+ 'ICL_uranus_zh_male_aojiaogongzi_tob',
174
+ 'ICL_uranus_zh_male_aojiaojingying_tob',
175
+ 'ICL_uranus_zh_male_aomanqingnian_tob',
176
+ 'ICL_uranus_zh_male_aomanshaoye_tob',
177
+ 'ICL_uranus_zh_male_zhenbiandiyu_tob',
178
+ 'ICL_uranus_zh_male_badaoshaoye_tob',
179
+ 'ICL_uranus_zh_male_badaozongcai_tob',
180
+ 'ICL_uranus_zh_male_bingjiaobailian_tob',
181
+ 'ICL_uranus_zh_male_bingjiaodidi_tob',
182
+ 'ICL_uranus_zh_male_bingjiaogege_tob',
183
+ 'ICL_uranus_zh_male_bingjiaonanyou_tob',
184
+ 'ICL_uranus_zh_male_bingjiaoshaonian_tob',
185
+ 'ICL_uranus_zh_male_bingruogongzi_tob',
186
+ 'ICL_uranus_zh_male_bingruoshaonian_tob',
187
+ 'ICL_uranus_zh_male_bujiqingnian_tob',
188
+ 'ICL_uranus_zh_male_chunhoudiyin_tob',
189
+ 'ICL_uranus_zh_male_paoxiaoxiaoge_tob',
190
+ 'ICL_uranus_zh_male_yangyang_tob',
191
+ 'ICL_uranus_zh_male_chanruoshaoye_tob',
192
+ 'ICL_uranus_zh_male_chengshuzongcai_tob',
193
+ 'ICL_uranus_zh_male_chenwenmingzai_tob',
194
+ 'ICL_uranus_zh_male_qingyisugan_tob',
195
+ 'ICL_uranus_zh_male_chunzhenxuedi_tob',
196
+ 'ICL_uranus_zh_male_cixingnansang_tob',
197
+ 'ICL_uranus_zh_male_cujingnansheng_tob',
198
+ 'ICL_uranus_zh_male_cujingnanyou_tob',
199
+ 'ICL_uranus_zh_male_diyinchenyu_tob',
200
+ 'ICL_uranus_zh_male_fengfashaonian_tob',
201
+ 'ICL_uranus_zh_male_ruyagongzi_tob',
202
+ 'ICL_uranus_zh_male_fuheigongzi_tob',
203
+ 'ICL_uranus_zh_male_ganjingshaonian_tob',
204
+ 'ICL_uranus_zh_male_gaolengzongcai_tob',
205
+ 'ICL_uranus_zh_male_guaogongzi_tob',
206
+ 'ICL_uranus_zh_male_gugaogongzi_tob',
207
+ 'ICL_uranus_zh_male_guiyishenmi_tob',
208
+ 'ICL_uranus_zh_male_guzhibingjiao_tob',
209
+ 'ICL_uranus_zh_male_hanhoudunshi_tob',
210
+ 'ICL_uranus_zh_male_huoliqingnian_tob',
211
+ 'ICL_uranus_zh_male_huoponanyou_tob',
212
+ 'ICL_uranus_zh_male_huoposhuanglang_tob',
213
+ 'ICL_uranus_zh_male_huzishushu_tob',
214
+ 'ICL_uranus_zh_male_jijiazhineng_tob',
215
+ 'ICL_uranus_zh_male_jingyingqingnian_tob',
216
+ 'ICL_uranus_zh_male_junyigongzi_tob',
217
+ 'ICL_uranus_zh_male_kailangqingkuai_tob',
218
+ 'ICL_uranus_zh_male_kailangqingnian_tob',
219
+ 'ICL_uranus_zh_male_lanyincaohunshi_tob',
220
+ 'ICL_uranus_zh_male_lengaozongcai_tob',
221
+ 'ICL_uranus_zh_male_lengdanshuli_tob',
222
+ 'ICL_uranus_zh_male_lengjungaozhi_tob',
223
+ 'ICL_uranus_zh_male_lengjunshangsi_tob',
224
+ 'ICL_uranus_zh_male_lengkugege_tob',
225
+ 'ICL_uranus_zh_male_lenglianxiongzhang_tob',
226
+ 'ICL_uranus_zh_male_lenglianxueba_tob',
227
+ 'ICL_uranus_zh_male_lengmonanyou_tob',
228
+ 'ICL_uranus_zh_male_lengmoxiongzhang_tob',
229
+ 'ICL_uranus_zh_male_lingyunqingnian_tob',
230
+ 'ICL_uranus_zh_male_qinglengjingui_tob',
231
+ 'ICL_uranus_zh_male_lvchaxiaoge_tob',
232
+ 'ICL_uranus_zh_male_mengdongqingnian_tob',
233
+ 'ICL_uranus_zh_male_menyoupingxiaoge_tob',
234
+ 'ICL_uranus_zh_male_xiaozhangxiaoge_tob',
235
+ 'ICL_uranus_zh_male_nianrennanyou_tob',
236
+ 'ICL_uranus_zh_male_neiliancaijun_tob',
237
+ 'ICL_uranus_zh_male_nuanxintitie_tob',
238
+ 'ICL_uranus_zh_male_pianpiangongzi_tob',
239
+ 'ICL_uranus_zh_male_chenwenyouya_tob',
240
+ 'ICL_uranus_zh_male_qingsexiaosheng_tob',
241
+ 'ICL_uranus_zh_male_qingseqingnian_tob',
242
+ 'ICL_uranus_zh_male_qingshuangshaonian_tob',
243
+ 'ICL_uranus_zh_male_qingxinbobo_tob',
244
+ 'ICL_uranus_zh_male_qinqieqingnian_tob',
245
+ 'ICL_uranus_zh_male_qinqiexiaozhuo_tob',
246
+ 'ICL_uranus_zh_male_qinglangwenrun_tob',
247
+ 'ICL_uranus_zh_male_rexueshaonian_tob',
248
+ 'ICL_uranus_zh_male_ruyacaijun_tob',
249
+ 'ICL_uranus_zh_male_ruyajunzi_tob',
250
+ 'ICL_uranus_zh_male_ruyazongcai_tob',
251
+ 'ICL_uranus_zh_male_sajiaonansheng_tob',
252
+ 'ICL_uranus_zh_male_sajiaonanyou_tob',
253
+ 'ICL_uranus_zh_male_sajiaonianren_tob',
254
+ 'ICL_uranus_zh_male_satuoqingnian_tob',
255
+ 'ICL_uranus_zh_male_shaonianjiangjun_tob',
256
+ 'ICL_uranus_zh_male_shenchenzongcai_tob',
257
+ 'ICL_uranus_zh_male_jilingxiaohuo_tob',
258
+ 'ICL_uranus_zh_male_shenmifashi_tob',
259
+ 'ICL_uranus_zh_male_shuaizhenxiaohuo_tob',
260
+ 'ICL_uranus_zh_male_shuanglangxiaoyang_tob',
261
+ 'ICL_uranus_zh_male_dichenqianquan_tob',
262
+ 'ICL_uranus_zh_male_siwenqingnian_tob',
263
+ 'ICL_uranus_zh_male_tianxinanyou_tob',
264
+ 'ICL_uranus_zh_male_tiexinnanyou_tob',
265
+ 'ICL_uranus_zh_male_wenrounantongzhuo_tob',
266
+ 'ICL_uranus_zh_male_wenrounanyou_tob',
267
+ 'ICL_uranus_zh_male_wenrouxuezhang_tob',
268
+ 'ICL_uranus_zh_male_wenrunxuezhe_tob',
269
+ 'ICL_uranus_zh_male_wenshunshaonian_tob',
270
+ 'ICL_uranus_zh_male_guayanxiaoge_tob',
271
+ 'ICL_uranus_zh_male_xiaohouye_tob',
272
+ 'ICL_uranus_zh_male_naiqixiaosheng_tob',
273
+ 'ICL_uranus_zh_male_xiaosasuixing_tob',
274
+ 'ICL_uranus_zh_male_wenrouneilian_tob',
275
+ 'ICL_uranus_zh_male_xuebanantongzhuo_tob',
276
+ 'ICL_uranus_zh_male_xuebatongzhuo_tob',
277
+ 'ICL_uranus_zh_male_yangguangyangyang_tob',
278
+ 'ICL_uranus_zh_male_wennuanshaonian_tob',
279
+ 'ICL_uranus_zh_male_yiqishaonian_tob',
280
+ 'ICL_uranus_zh_male_younidashu_tob',
281
+ 'ICL_uranus_zh_male_youmodaye_tob',
282
+ 'ICL_uranus_zh_male_youmoshushu_tob',
283
+ 'ICL_uranus_zh_male_youroubangzhu_tob',
284
+ 'ICL_uranus_zh_male_yourougongzi_tob',
285
+ 'ICL_uranus_zh_male_yuanqishaonian_tob',
286
+ 'ICL_uranus_zh_male_zhangjianjunzi_tob',
287
+ 'ICL_uranus_zh_male_zhangjianxiake_tob',
288
+ 'ICL_uranus_zh_male_zhengzhiqingnian_tob',
289
+ 'ICL_uranus_zh_male_zhishuaiqingnian_tob',
290
+ 'ICL_uranus_zh_male_zhongerqingnian_tob',
291
+ 'ICL_uranus_zh_male_zifuqingnian_tob',
292
+ 'ICL_uranus_zh_male_zixinqingnian_tob',
293
+ 'ICL_uranus_zh_male_tiancaitongzhuo_tob',
294
+ 'ICL_uranus_zh_male_qingxinmumu_tob',
295
+ 'ICL_uranus_zh_female_wenwanshanshan_tob',
296
+ 'ICL_uranus_zh_female_reqingaina_tob',
297
+ 'ICL_uranus_zh_male_shuanglangshaonian_tob',
298
+ 'ICL_uranus_zh_female_qingyingduoduo_tob',
299
+ 'ar_female_dina_uranus_bigtts',
300
+ 'ar_female_fatma_uranus_bigtts',
301
+ 'ar_male_youssef_uranus_bigtts',
302
+ 'de_female_bv081_uranus_bigtts',
303
+ 'de_male_sven_uranus_bigtts',
304
+ 'en_male_alberto_uranus_bigtts',
305
+ 'en_male_alex_uranus_bigtts',
306
+ 'en_female_allison_uranus_bigtts',
307
+ 'en_male_bill_jones_corey_uranus_bigtts',
308
+ 'en_male_brad_pitt_p1_uranus_bigtts',
309
+ 'en_female_brittney_uranus_bigtts',
310
+ 'en_female_brittney_pimintel_uranus_bigtts',
311
+ 'en_male_bruce_uranus_bigtts',
312
+ 'en_male_chandler_p1_uranus_bigtts',
313
+ 'en_male_cowboy_john_b_uranus_bigtts',
314
+ 'en_male_david_uranus_bigtts',
315
+ 'en_male_diyuwenrounan_uranus_bigtts',
316
+ 'en_male_godfather_uranus_bigtts',
317
+ 'en_male_gollum_uranus_bigtts',
318
+ 'en_male_hades_uranus_bigtts',
319
+ 'en_female_hayley_uranus_bigtts',
320
+ 'en_male_jamie_uranus_bigtts',
321
+ 'en_female_jane_uranus_bigtts',
322
+ 'en_female_jenny_uranus_bigtts',
323
+ 'en_male_jidongchuanjiaoshi_uranus_bigtts',
324
+ 'en_male_jimmy_uranus_bigtts',
325
+ 'en_female_joanne_uranus_bigtts',
326
+ 'en_male_joker_uranus_bigtts',
327
+ 'en_male_josh_uranus_bigtts',
328
+ 'en_male_josh_coery_uranus_bigtts',
329
+ 'en_male_kevin_uranus_bigtts',
330
+ 'en_male_knightley_uranus_bigtts',
331
+ 'en_female_lana_del_rey_kelley_d_p1_uranus_bigtts',
332
+ 'en_female_lana_del_rey_parky_s_p1_uranus_bigtts',
333
+ 'en_male_marcus_uranus_bigtts',
334
+ 'en_female_mel_uranus_bigtts',
335
+ 'en_male_michael_uranus_bigtts',
336
+ 'en_male_michael_kevin_uranus_bigtts',
337
+ 'en_female_myra_uranus_bigtts',
338
+ 'en_female_myra_cmb_uranus_bigtts',
339
+ 'en_female_nadia_uranus_bigtts',
340
+ 'en_female_natasha_uranus_bigtts',
341
+ 'en_female_rachel_p1_uranus_bigtts',
342
+ 'en_male_ronald_uranus_bigtts',
343
+ 'en_male_russell_uranus_bigtts',
344
+ 'en_female_scarlet_p1_uranus_bigtts',
345
+ 'en_female_sharron_uranus_bigtts',
346
+ 'en_male_simba_p1_uranus_bigtts',
347
+ 'en_female_skye_uranus_bigtts',
348
+ 'en_male_tom_hiddleston_p1_uranus_bigtts',
349
+ 'en_male_valentino_uranus_bigtts',
350
+ 'en_male_valentino_corey_uranus_bigtts',
351
+ 'en_female_wenrouzhishijieshuonv_uranus_bigtts',
352
+ 'en_female_xinwenjieshuonv_uranus_bigtts',
353
+ 'en_male_yangguangjieshuonan_uranus_bigtts',
354
+ 'en_female_zendaya_p1_uranus_bigtts',
355
+ 'es_female_bv084_uranus_bigtts',
356
+ 'es_male_dani_uranus_bigtts',
357
+ 'es_male_guillem_uranus_bigtts',
358
+ 'es_female_ht_mx_f6_uranus_bigtts',
359
+ 'fr_female_fr_bv078_uranus_bigtts',
360
+ 'fr_female_fr_f47_uranus_bigtts',
361
+ 'fr_male_fr_m29_uranus_bigtts',
362
+ 'fr_male_usseau_uranus_bigtts',
363
+ 'id_male_bv160_uranus_bigtts',
364
+ 'id_male_bv160dialogue_uranus_bigtts',
365
+ 'id_male_bv160narration_uranus_bigtts',
366
+ 'id_female_bv161_uranus_bigtts',
367
+ 'id_female_bv161dialogue_uranus_bigtts',
368
+ 'id_female_bv161narration_uranus_bigtts',
369
+ 'id_female_bv164_uranus_bigtts',
370
+ 'id_male_bv164dialogue_uranus_bigtts',
371
+ 'id_male_bv164narration_uranus_bigtts',
372
+ 'id_female_f20_uranus_bigtts',
373
+ 'id_male_han_uranus_bigtts',
374
+ 'id_male_m08_uranus_bigtts',
375
+ 'id_female_phulia_uranus_bigtts',
376
+ 'ja_female_bv024_uranus_bigtts',
377
+ 'ja_female_bv520_uranus_bigtts',
378
+ 'ja_female_bv521_uranus_bigtts',
379
+ 'ja_female_bv522_uranus_bigtts',
380
+ 'ja_female_bv523_uranus_bigtts',
381
+ 'ja_male_bv524_uranus_bigtts',
382
+ 'ja_female_minimi_uranus_bigtts',
383
+ 'ja_female_shirou_uranus_bigtts',
384
+ 'ko_male_bv545_uranus_bigtts',
385
+ 'ko_female_bv546_uranus_bigtts',
386
+ 'ko_male_m03_uranus_bigtts',
387
+ 'ko_male_shane_uranus_bigtts',
388
+ 'ms_male_ham_uranus_bigtts',
389
+ 'ms_male_naim_uranus_bigtts',
390
+ 'mx_female_bv065_uranus_bigtts',
391
+ 'mx_male_bv165dialogue_uranus_bigtts',
392
+ 'mx_male_bv165narrator_uranus_bigtts',
393
+ 'mx_female_bv166dialogue_uranus_bigtts',
394
+ 'mx_female_bv166emotion_uranus_bigtts',
395
+ 'mx_female_bv166narrator_uranus_bigtts',
396
+ 'mx_male_felipe_uranus_bigtts',
397
+ 'mx_male_ht_mx_m012_uranus_bigtts',
398
+ 'mx_female_leslie_uranus_bigtts',
399
+ 'mx_male_marcelo_uranus_bigtts',
400
+ 'pt_male_bv172_uranus_bigtts',
401
+ 'pt_male_bv172dialogue_uranus_bigtts',
402
+ 'pt_male_bv172emotion_uranus_bigtts',
403
+ 'pt_male_bv172narrator_uranus_bigtts',
404
+ 'pt_female_bv173_uranus_bigtts',
405
+ 'pt_female_bv173dialogue_uranus_bigtts',
406
+ 'pt_female_bv173emotion_uranus_bigtts',
407
+ 'pt_female_bv173narrator_uranus_bigtts',
408
+ 'pt_female_bv530_uranus_bigtts',
409
+ 'pt_male_bv531_uranus_bigtts',
410
+ 'pt_female_mari_uranus_bigtts',
411
+ 'pt_male_martins_uranus_bigtts',
412
+ 'pt_male_rael_uranus_bigtts',
413
+ 'ru_female_af07_uranus_bigtts',
414
+ 'ru_female_irinae_uranus_bigtts',
415
+ 'ru_male_pavel_uranus_bigtts',
416
+ 'ru_female_sophie_uranus_bigtts',
417
+ 'ru_male_vlad_uranus_bigtts',
418
+ 'th_female_bv568_angry_uranus_bigtts',
419
+ 'th_female_bv568_fear_uranus_bigtts',
420
+ 'th_female_bv568_happy_uranus_bigtts',
421
+ 'th_female_bv568_hate_uranus_bigtts',
422
+ 'th_female_bv568_neutral_uranus_bigtts',
423
+ 'th_female_bv568_sad_uranus_bigtts',
424
+ 'th_female_bv568_suprise_uranus_bigtts',
425
+ 'tl_female_annika_uranus_bigtts',
426
+ 'tl_male_ed_uranus_bigtts',
427
+ 'tl_female_hervie_uranus_bigtts',
428
+ 'vi_female_hong_uranus_bigtts',
429
+ 'vi_female_ling_uranus_bigtts',
430
+ 'vi_female_linh_uranus_bigtts',
431
+ 'vi_female_partner_uranus_bigtts',
432
+ 'vi_female_ruan_uranus_bigtts',
433
+ 'vi_female_wu_uranus_bigtts',
434
+ 'vi_male_wumg_uranus_bigtts',
435
+ 'it_male_enzo_uranus_bigtts',
436
+ ]);
437
+ export const DEFAULT_SEED_TTS_20_VOICE = 'zh_female_vv_uranus_bigtts';
438
+ export const isSeedTts20SystemVoice = (id) => systemVoiceIds.has(id);
@@ -1,5 +1,5 @@
1
1
  import { defineModel } from '../defineModel.js';
2
- import { speechString, speechText } from '../audio/tts-common.js';
2
+ import { speechCharacterPrice, speechString, speechText } from '../audio/tts-common.js';
3
3
  export const volcengineSeedTts20Model = defineModel({
4
4
  meta: {
5
5
  id: 'volcengine-seed-tts-2.0', canonicalModelId: 'seed-tts-2.0', provider: 'volcengine-speech', type: 'audio',
@@ -20,6 +20,6 @@ export const volcengineSeedTts20Model = defineModel({
20
20
  },
21
21
  }),
22
22
  },
23
- pricing: { currency: '¥', calculator: () => Number.NaN, description: '火山语音按量计费单价未核实;不显示费用预估' },
23
+ pricing: { currency: '¥', calculator: params => speechCharacterPrice(params, 0.3), description: '3 元/万字符(公开后付费刊例价)' },
24
24
  });
25
25
  export default volcengineSeedTts20Model;