@visionengine/audio-tts 1.0.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.
package/README-zh.md ADDED
@@ -0,0 +1,31 @@
1
+ # @visionengine/audio-tts
2
+
3
+
4
+
5
+
6
+ ## 安装
7
+
8
+ ### 作为 MCP 服务器使用
9
+
10
+ 将以下配置添加到您的 MCP 客户端配置文件中:
11
+
12
+ ```json
13
+ {
14
+ "mcpServers": {
15
+ "ve-image-generate": {
16
+ "type": "local",
17
+ "command": "npx",
18
+ "args": ["-y", "@visionengine/audio-tts@latest"],
19
+ "transport": "stdio",
20
+ "env": {
21
+ "API_URL":"",
22
+ "X-Api-App-Id": "",
23
+ "X-Api-Access-Key": "",
24
+ "X-Api-Resource-Id":"",
25
+ "WORKDIR": "./public"
26
+ }
27
+ }
28
+ }
29
+ }
30
+ ```
31
+
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # @visionengine/audio-tts
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { server } from "./server.js";
3
+ // Start the MCP server using stdio transport
4
+ server.start({
5
+ transportType: "stdio",
6
+ });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,6CAA6C;AAC7C,MAAM,CAAC,KAAK,CAAC;IACX,aAAa,EAAE,OAAO;CACvB,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { FastMCP } from "fastmcp";
2
+ declare const server: FastMCP<Record<string, unknown> | undefined>;
3
+ export { server };
4
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAQlC,QAAA,MAAM,MAAM,8CAGV,CAAC;AA6VH,OAAO,EAAE,MAAM,EAAE,CAAC"}
package/dist/server.js ADDED
@@ -0,0 +1,274 @@
1
+ import { FastMCP } from "fastmcp";
2
+ import { z } from "zod";
3
+ import * as fs from "fs";
4
+ import * as path from "path";
5
+ import * as https from "https";
6
+ import * as http from "http";
7
+ import { filterVoicesByLanguage } from "./voices.js";
8
+ const server = new FastMCP({
9
+ name: "VE Audio TTS",
10
+ version: "1.0.0",
11
+ });
12
+ // Get configuration from environment variables
13
+ const API_URL = process.env.API_URL || "https://openspeech.bytedance.com/api/v3/tts/unidirectional";
14
+ const X_API_APP_ID = process.env.X_API_APP_ID || "";
15
+ const X_API_ACCESS_KEY = process.env.X_API_ACCESS_KEY || "";
16
+ const X_API_RESOURCE_ID = process.env.X_API_RESOURCE_ID || "seed-tts-2.0";
17
+ const WORKDIR = process.env.WORKDIR || "./";
18
+ // Generate unique filename with timestamp
19
+ function generateFilename(format) {
20
+ const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
21
+ const randomSuffix = Math.random().toString(36).substring(2, 8);
22
+ return `tts_${timestamp}_${randomSuffix}.${format === "ogg_opus" ? "ogg" : format}`;
23
+ }
24
+ // Ensure WORKDIR exists
25
+ async function ensureWorkdir() {
26
+ const resolvedPath = path.resolve(WORKDIR);
27
+ try {
28
+ await fs.promises.access(resolvedPath);
29
+ }
30
+ catch {
31
+ await fs.promises.mkdir(resolvedPath, { recursive: true });
32
+ }
33
+ }
34
+ // Make HTTP POST request with streaming response
35
+ function httpPostStream(url, headers, body) {
36
+ return new Promise((resolve, reject) => {
37
+ const parsedUrl = new URL(url);
38
+ const isHttps = parsedUrl.protocol === "https:";
39
+ const httpModule = isHttps ? https : http;
40
+ const options = {
41
+ hostname: parsedUrl.hostname,
42
+ port: parsedUrl.port || (isHttps ? 443 : 80),
43
+ path: parsedUrl.pathname + parsedUrl.search,
44
+ method: "POST",
45
+ headers: {
46
+ ...headers,
47
+ "Content-Type": "application/json",
48
+ "Content-Length": Buffer.byteLength(body),
49
+ "Connection": "keep-alive",
50
+ },
51
+ };
52
+ const req = httpModule.request(options, (res) => {
53
+ const chunks = [];
54
+ const audioData = [];
55
+ let buffer = "";
56
+ res.on("data", (chunk) => {
57
+ chunks.push(chunk);
58
+ buffer += chunk.toString("utf-8");
59
+ // Process line by line
60
+ const lines = buffer.split("\n");
61
+ buffer = lines.pop() || "";
62
+ for (const line of lines) {
63
+ if (!line.trim())
64
+ continue;
65
+ try {
66
+ const data = JSON.parse(line);
67
+ if (data.code === 0 && data.data) {
68
+ // Decode base64 audio data
69
+ const audioChunk = Buffer.from(data.data, "base64");
70
+ audioData.push(audioChunk);
71
+ }
72
+ else if (data.code === 20000000) {
73
+ // Synthesis complete
74
+ if (data.usage) {
75
+ console.log(`TTS usage: ${data.usage.text_words} characters`);
76
+ }
77
+ }
78
+ else if (data.code > 0 && data.code !== 20000000) {
79
+ // Error response
80
+ reject(new Error(`TTS API error: ${data.code} - ${data.message}`));
81
+ return;
82
+ }
83
+ }
84
+ catch {
85
+ // Continue if JSON parse fails (incomplete data)
86
+ }
87
+ }
88
+ });
89
+ res.on("end", () => {
90
+ // Process remaining buffer
91
+ if (buffer.trim()) {
92
+ try {
93
+ const data = JSON.parse(buffer);
94
+ if (data.code === 0 && data.data) {
95
+ const audioChunk = Buffer.from(data.data, "base64");
96
+ audioData.push(audioChunk);
97
+ }
98
+ else if (data.code > 0 && data.code !== 20000000) {
99
+ reject(new Error(`TTS API error: ${data.code} - ${data.message}`));
100
+ return;
101
+ }
102
+ }
103
+ catch {
104
+ // Ignore parse errors at end
105
+ }
106
+ }
107
+ if (audioData.length === 0) {
108
+ reject(new Error("No audio data received from TTS API"));
109
+ return;
110
+ }
111
+ resolve(Buffer.concat(audioData));
112
+ });
113
+ res.on("error", reject);
114
+ });
115
+ req.on("error", reject);
116
+ req.write(body);
117
+ req.end();
118
+ });
119
+ }
120
+ // Call TTS API and save audio file
121
+ async function synthesizeSpeech(options) {
122
+ if (!X_API_APP_ID || !X_API_ACCESS_KEY) {
123
+ throw new Error("X_API_APP_ID and X_API_ACCESS_KEY environment variables are required");
124
+ }
125
+ await ensureWorkdir();
126
+ const format = options.format || "mp3";
127
+ const sampleRate = options.sampleRate || 24000;
128
+ const fileName = generateFilename(format);
129
+ const filePath = path.resolve(WORKDIR, fileName);
130
+ // Build additions object
131
+ const additions = {
132
+ cache_config: {
133
+ text_type: 1,
134
+ use_cache: true,
135
+ },
136
+ };
137
+ if (options.explicitLanguage) {
138
+ additions.explicit_language = options.explicitLanguage;
139
+ }
140
+ if (options.disableMarkdownFilter !== undefined) {
141
+ additions.disable_markdown_filter = options.disableMarkdownFilter;
142
+ }
143
+ if (options.contextTexts && options.contextTexts.length > 0) {
144
+ additions.context_texts = options.contextTexts;
145
+ }
146
+ if (options.pitch !== undefined) {
147
+ additions.post_process = { pitch: options.pitch };
148
+ }
149
+ // Build request body
150
+ const requestBody = {
151
+ user: {
152
+ uid: "mcp-user",
153
+ },
154
+ req_params: {
155
+ text: options.text,
156
+ speaker: options.speaker,
157
+ audio_params: {
158
+ format,
159
+ sample_rate: sampleRate,
160
+ },
161
+ additions: JSON.stringify(additions),
162
+ },
163
+ };
164
+ // Add optional audio params
165
+ if (options.speechRate !== undefined) {
166
+ requestBody.req_params.audio_params.speech_rate = options.speechRate;
167
+ }
168
+ if (options.loudnessRate !== undefined) {
169
+ requestBody.req_params.audio_params.loudness_rate = options.loudnessRate;
170
+ }
171
+ if (options.emotion) {
172
+ requestBody.req_params.audio_params.emotion = options.emotion;
173
+ }
174
+ if (options.emotionScale !== undefined) {
175
+ requestBody.req_params.audio_params.emotion_scale = options.emotionScale;
176
+ }
177
+ // Build headers
178
+ const headers = {
179
+ "X-Api-App-Id": X_API_APP_ID,
180
+ "X-Api-Access-Key": X_API_ACCESS_KEY,
181
+ "X-Api-Resource-Id": X_API_RESOURCE_ID,
182
+ };
183
+ // Make request and get audio data
184
+ const audioBuffer = await httpPostStream(API_URL, headers, JSON.stringify(requestBody));
185
+ // Save audio file
186
+ await fs.promises.writeFile(filePath, audioBuffer);
187
+ await fs.promises.chmod(filePath, 0o644);
188
+ return {
189
+ filePath,
190
+ fileName,
191
+ size: audioBuffer.length,
192
+ };
193
+ }
194
+ // Tool: tts - Text to Speech synthesis
195
+ server.addTool({
196
+ annotations: {
197
+ openWorldHint: true,
198
+ readOnlyHint: false,
199
+ title: "Text to Speech",
200
+ },
201
+ description: "Synthesize speech from text using Volcengine TTS API. Generates audio file and saves to WORKDIR.",
202
+ execute: async (args) => {
203
+ const result = await synthesizeSpeech({
204
+ text: args.text,
205
+ speaker: args.speaker,
206
+ format: args.format,
207
+ sampleRate: args.sampleRate,
208
+ speechRate: args.speechRate,
209
+ loudnessRate: args.loudnessRate,
210
+ emotion: args.emotion,
211
+ emotionScale: args.emotionScale,
212
+ contextTexts: args.contextTexts,
213
+ explicitLanguage: args.explicitLanguage,
214
+ disableMarkdownFilter: args.disableMarkdownFilter,
215
+ pitch: args.pitch,
216
+ });
217
+ return JSON.stringify({
218
+ success: true,
219
+ message: "Audio file generated successfully",
220
+ filePath: result.filePath,
221
+ fileName: result.fileName,
222
+ size: result.size,
223
+ sizeKB: (result.size / 1024).toFixed(2) + " KB",
224
+ }, null, 2);
225
+ },
226
+ name: "tts",
227
+ parameters: z.object({
228
+ text: z.string().describe("Text content to synthesize into speech"),
229
+ speaker: z.string().describe("Voice speaker ID (e.g., 'zh_female_vv_uranus_bigtts'). Use list-voices tool to get available voices."),
230
+ format: z.enum(["mp3", "ogg_opus", "pcm"]).optional().describe("Audio format: mp3 (default), ogg_opus, or pcm"),
231
+ sampleRate: z.enum(["8000", "16000", "22050", "24000", "32000", "44100", "48000"]).transform(Number).optional().describe("Audio sample rate in Hz. Default: 24000"),
232
+ speechRate: z.number().min(-50).max(100).optional().describe("Speech rate: -50 (0.5x) to 100 (2.0x). Default: 0 (normal speed)"),
233
+ loudnessRate: z.number().min(-50).max(100).optional().describe("Volume: -50 (0.5x) to 100 (2.0x). Default: 0 (normal volume)"),
234
+ emotion: z.string().optional().describe("Emotion setting for supported voices (e.g., 'happy', 'sad', 'angry')"),
235
+ emotionScale: z.number().min(1).max(5).optional().describe("Emotion intensity: 1-5. Default: 4"),
236
+ contextTexts: z.array(z.string()).optional().describe("Context hints for TTS 2.0 to adjust style (e.g., ['Please speak slowly'])"),
237
+ explicitLanguage: z.string().optional().describe("Explicit language: zh-cn, en, ja, es-mx, id, pt-br, de, fr, or 'crosslingual'"),
238
+ disableMarkdownFilter: z.boolean().optional().describe("Disable markdown parsing. Default: false"),
239
+ pitch: z.number().min(-12).max(12).optional().describe("Pitch adjustment: -12 to 12. Default: 0"),
240
+ }),
241
+ });
242
+ // Tool: list-voices - Query available voices by language
243
+ server.addTool({
244
+ annotations: {
245
+ openWorldHint: true,
246
+ readOnlyHint: true,
247
+ title: "List Available Voices",
248
+ },
249
+ description: "Query available TTS voices filtered by language. Returns voice information including ID, name, gender, and description.",
250
+ execute: async (args) => {
251
+ const filteredVoices = filterVoicesByLanguage(args.language);
252
+ const voiceList = filteredVoices.map((voice) => ({
253
+ voiceType: voice.VoiceType,
254
+ name: voice.Name,
255
+ gender: voice.Gender,
256
+ age: voice.Age,
257
+ description: voice.Description,
258
+ categories: voice.Categories.flatMap((c) => c.Categories),
259
+ languages: voice.Languages.map((l) => l.Language),
260
+ trialURL: voice.TrialURL,
261
+ }));
262
+ return JSON.stringify({
263
+ total: voiceList.length,
264
+ language: args.language || "all",
265
+ voices: voiceList,
266
+ }, null, 2);
267
+ },
268
+ name: "list-voices",
269
+ parameters: z.object({
270
+ language: z.string().optional().describe("Filter by language code: zh, zh-cn, en, ja, es, id, pt, de, fr. Leave empty for all voices."),
271
+ }),
272
+ });
273
+ export { server };
274
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface Voice {
2
+ ID: string;
3
+ VoiceType: string;
4
+ Name: string;
5
+ Avatar: string;
6
+ Gender: string;
7
+ Age: string;
8
+ Categories: {
9
+ Categories: string[];
10
+ }[];
11
+ Languages: {
12
+ Language: string;
13
+ Text: string;
14
+ Flag: string;
15
+ }[];
16
+ Emotions: string[];
17
+ Description: string;
18
+ Status: string;
19
+ ResourceID: string;
20
+ TrialURL: string;
21
+ }
22
+ export declare const voices: Voice[];
23
+ export declare const languageMap: Record<string, string[]>;
24
+ export declare function filterVoicesByLanguage(language?: string): Voice[];
25
+ //# sourceMappingURL=voices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voices.d.ts","sourceRoot":"","sources":["../src/voices.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE;QAAE,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;IACvC,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC9D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,EAuJzB,CAAC;AAGF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAWhD,CAAC;AAGF,wBAAgB,sBAAsB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE,CAgBjE"}
package/dist/voices.js ADDED
@@ -0,0 +1,176 @@
1
+ export const voices = [
2
+ {
3
+ ID: "7574011450654457882",
4
+ VoiceType: "zh_female_xiaohe_uranus_bigtts",
5
+ Name: "小何 2.0",
6
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/小何.png",
7
+ Gender: "女",
8
+ Age: "青年",
9
+ Categories: [{ Categories: ["通用场景"] }],
10
+ Languages: [{ Language: "zh-cn", Text: "清晨的阳光跳上窗台,让我们带着笑脸,去赴一场春天的约会吧!", Flag: "🇨🇳🇺🇸" }],
11
+ Emotions: [],
12
+ Description: "声线甜美有活力的妹妹,活泼开朗,笑容明媚。",
13
+ Status: "online",
14
+ ResourceID: "seed-tts-2.0",
15
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/zh_female_xiaohe_uranus_bigtts.mp3"
16
+ },
17
+ {
18
+ ID: "7569915035259256875",
19
+ VoiceType: "zh_female_vv_uranus_bigtts",
20
+ Name: "Vivi 2.0",
21
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/vivi_v2.png",
22
+ Gender: "女",
23
+ Age: "青年",
24
+ Categories: [{ Categories: ["通用场景"] }],
25
+ Languages: [{ Language: "zh-cn", Text: "今天的阳光真好啊!感觉整个人都充满了活力呢。真想去外面跑一跑,去探索那些有趣的地方,去邂逅一些奇妙的事情。生活嘛,就该这样自由自在、充满朝气的呀!哈哈!", Flag: "🇨🇳" }],
26
+ Emotions: [],
27
+ Description: "语调平稳、咬字柔和、自带治愈安抚力的女声音色",
28
+ Status: "online",
29
+ ResourceID: "seed-tts-2.0",
30
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/zh_female_vv_uranus_bigtts.wav"
31
+ },
32
+ {
33
+ ID: "7574012101065179182",
34
+ VoiceType: "zh_male_taocheng_uranus_bigtts",
35
+ Name: "小天 2.0",
36
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/小天.png",
37
+ Gender: "男",
38
+ Age: "青年",
39
+ Categories: [{ Categories: ["通用场景"] }],
40
+ Languages: [{ Language: "zh-cn", Text: "宝贝别着急,每颗星星都散发着属于自己的光芒,慢慢长大,你也会闪闪发光。", Flag: "🇨🇳🇺🇸" }],
41
+ Emotions: [],
42
+ Description: "眉目清朗男大,清澈温润有朝气,开朗真诚。",
43
+ Status: "online",
44
+ ResourceID: "seed-tts-2.0",
45
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/zh_male_taocheng_uranus_bigtts.mp3"
46
+ },
47
+ {
48
+ ID: "7574011909091885094",
49
+ VoiceType: "zh_male_m191_uranus_bigtts",
50
+ Name: "云舟 2.0",
51
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/云舟.png",
52
+ Gender: "男",
53
+ Age: "青年",
54
+ Categories: [{ Categories: ["通用场景"] }],
55
+ Languages: [{ Language: "zh-cn", Text: "风穿过林间的低语,像清泉淌过心尖,听着就好像可以吹散所有烦恼。", Flag: "🇨🇳🇺🇸" }],
56
+ Emotions: [],
57
+ Description: "声音磁性的男生,成熟理性,做事有条理,让人信赖。",
58
+ Status: "online",
59
+ ResourceID: "seed-tts-2.0",
60
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/zh_male_m191_uranus_bigtts.mp3"
61
+ },
62
+ {
63
+ ID: "7569913658966016042",
64
+ VoiceType: "zh_female_santongyongns_saturn_bigtts",
65
+ Name: "流畅女声",
66
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/流畅女声.png",
67
+ Gender: "女",
68
+ Age: "青年",
69
+ Categories: [{ Categories: ["视频配音"] }],
70
+ Languages: [{ Language: "zh-cn", Text: "这家奶茶店的珍珠超有嚼劲!三分糖加冰,一口下去又甜又清爽,夏天喝这个真的太绝啦!", Flag: "🇨🇳" }],
71
+ Emotions: [],
72
+ Description: "语调顺滑自然、咬字利落不拖沓、适配多种场景的百搭女声音色",
73
+ Status: "online",
74
+ ResourceID: "seed-tts-2.0",
75
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/流畅女声.wav"
76
+ },
77
+ {
78
+ ID: "7569915380160921663",
79
+ VoiceType: "zh_female_meilinvyou_saturn_bigtts",
80
+ Name: "魅力女友",
81
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/魅力女友_v2.png",
82
+ Gender: "女",
83
+ Age: "青年",
84
+ Categories: [{ Categories: ["视频配音"] }],
85
+ Languages: [{ Language: "zh-cn", Text: "这支豆沙色的口红,涂在唇上是柔雾感,像傍晚的晚霞落在嘴角,不张扬,却能让你回头率满满。", Flag: "🇨🇳" }],
86
+ Emotions: [],
87
+ Description: "嗲软轻飘的轻熟美人,妩媚有耐心,温柔勾人。",
88
+ Status: "online",
89
+ ResourceID: "seed-tts-2.0",
90
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/zh_female_meilinvyou_saturn_bigtts.wav"
91
+ },
92
+ {
93
+ ID: "7569915380160905279",
94
+ VoiceType: "zh_female_mizai_saturn_bigtts",
95
+ Name: "黑猫侦探社咪仔",
96
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/黑猫侦探社咪仔.png",
97
+ Gender: "女",
98
+ Age: "青年",
99
+ Categories: [{ Categories: ["视频配音"] }],
100
+ Languages: [{ Language: "zh-cn", Text: "杨绛先生说:我们曾如此渴望命运的波澜,到最后才发现,人生最曼妙的风景,是内心的淡定与从容。愿你也能在喧嚣里,守住这份平静。", Flag: "🇨🇳" }],
101
+ Emotions: [],
102
+ Description: "语调沉稳、咬字扎实、自带踏实和包容感的女声音色",
103
+ Status: "online",
104
+ ResourceID: "seed-tts-2.0",
105
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/zh_female_mizai_saturn_bigtts.wav"
106
+ },
107
+ {
108
+ ID: "7569915035259256875",
109
+ VoiceType: "saturn_zh_male_tiancaitongzhuo_tob",
110
+ Name: "天才同桌",
111
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/天才同桌.png",
112
+ Gender: "男",
113
+ Age: "青年",
114
+ Categories: [{ Categories: ["角色扮演"] }],
115
+ Languages: [{ Language: "zh-cn", Text: "这么基础的公式还弄不明白?不过没关系,我现在跟你讲,你认真听好了啊!这个公式其实很简单,你看,只把这个关键值代进去,再按这三步推导,就能得出结果..明白了吗?", Flag: "🇨🇳" }],
116
+ Emotions: [],
117
+ Description: "语气明快利落、咬字清晰带活力、聪明机敏又毒舌的少年音色",
118
+ Status: "online",
119
+ ResourceID: "seed-tts-2.0",
120
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/saturn_zh_male_tiancaitongzhuo_tob.wav"
121
+ },
122
+ {
123
+ ID: "7569915380160856127",
124
+ VoiceType: "saturn_zh_female_cancan_tob",
125
+ Name: "知性灿灿",
126
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/灿灿.png",
127
+ Gender: "女",
128
+ Age: "青年",
129
+ Categories: [{ Categories: ["角色扮演"] }],
130
+ Languages: [{ Language: "zh-cn", Text: "早上出门忘记带伞了,走到半路下起了小雨。我没跑,就慢慢走在雨里,感受雨滴落在头发上的轻凉。走了大概十分钟,雨居然停了。我摸了摸微湿的发梢,忽然明白 —— 有时候不用急着躲避风雨,或许它并不会持续太久,反而能让你多感受一种天气的味道。", Flag: "🇨🇳" }],
131
+ Emotions: [],
132
+ Description: "语气温柔平缓、带有些许软绵感却又善解人意的少女音色",
133
+ Status: "online",
134
+ ResourceID: "seed-tts-2.0",
135
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/saturn_zh_female_cancan_tob.wav"
136
+ },
137
+ {
138
+ ID: "7569915035259273259",
139
+ VoiceType: "zh_female_jitangnv_saturn_bigtts",
140
+ Name: "鸡汤女",
141
+ Avatar: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/avatar/鸡汤女.png",
142
+ Gender: "女",
143
+ Age: "青年",
144
+ Categories: [{ Categories: ["视频配音"] }],
145
+ Languages: [{ Language: "zh-cn", Text: "早安呀~新的一天不用急着追赶别人,先喝杯热粥,把自己照顾好,再慢慢去遇见今天的小美好。", Flag: "🇨🇳" }],
146
+ Emotions: [],
147
+ Description: "语气轻软、尾音轻落、带有自然呼吸感且十分亲切的女声音色",
148
+ Status: "online",
149
+ ResourceID: "seed-tts-2.0",
150
+ TrialURL: "https://lf3-static.bytednsdoc.com/obj/eden-cn/lm_hz_ihsph/ljhwZthlaukjlkulzlp/portal/bigtts/zh_female_jitangnv_saturn_bigtts.wav"
151
+ }
152
+ ];
153
+ // Language code mapping
154
+ export const languageMap = {
155
+ "zh": ["zh-cn", "zh"],
156
+ "zh-cn": ["zh-cn", "zh"],
157
+ "en": ["en", "en-us", "en-gb"],
158
+ "en-us": ["en", "en-us"],
159
+ "ja": ["ja"],
160
+ "es": ["es", "es-mx"],
161
+ "id": ["id"],
162
+ "pt": ["pt", "pt-br"],
163
+ "de": ["de"],
164
+ "fr": ["fr"]
165
+ };
166
+ // Filter voices by language
167
+ export function filterVoicesByLanguage(language) {
168
+ if (!language) {
169
+ return voices;
170
+ }
171
+ const normalizedLang = language.toLowerCase();
172
+ const matchLanguages = languageMap[normalizedLang] || [normalizedLang];
173
+ return voices.filter(voice => voice.Languages.some(lang => matchLanguages.some(matchLang => lang.Language.toLowerCase().includes(matchLang) ||
174
+ matchLang.includes(lang.Language.toLowerCase()))));
175
+ }
176
+ //# sourceMappingURL=voices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voices.js","sourceRoot":"","sources":["../src/voices.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@visionengine/audio-tts",
3
+ "version": "1.0.0",
4
+ "description": "VisionEngine Audio TTS MCP Server - Text-to-speech synthesis and voice list query service",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "bin": {
8
+ "ve-audio-tts": "./dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "README-zh.md"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "clear": "node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"",
18
+ "test": "vitest run",
19
+ "test:watch": "vitest",
20
+ "prepublishOnly": "npm run build"
21
+ },
22
+ "keywords": [
23
+ "mcp",
24
+ "tts",
25
+ "text-to-speech",
26
+ "audio",
27
+ "speech-synthesis",
28
+ "volcengine",
29
+ "visionengine"
30
+ ],
31
+ "author": "ve@visionengine-tech.com",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/crazyyanchao/ve-mcp.git",
36
+ "directory": "packages/audio-tts"
37
+ },
38
+ "homepage": "https://visionengine-tech.com/mcp",
39
+ "dependencies": {
40
+ "fastmcp": "^3.26.8",
41
+ "zod": "^4.1.12"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^24.10.1",
45
+ "typescript": "^5.8.3",
46
+ "vitest": "^3.1.3"
47
+ },
48
+ "engines": {
49
+ "node": ">=18.0.0"
50
+ }
51
+ }