@aituber-onair/core 0.14.0 → 0.16.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 (87) hide show
  1. package/dist/constants/gemini.d.ts +1 -0
  2. package/dist/constants/gemini.js +2 -0
  3. package/dist/constants/gemini.js.map +1 -1
  4. package/dist/constants/index.d.ts +0 -1
  5. package/dist/constants/index.js +0 -1
  6. package/dist/constants/index.js.map +1 -1
  7. package/dist/core/AITuberOnAirCore.d.ts +1 -1
  8. package/dist/core/AITuberOnAirCore.js +1 -1
  9. package/dist/core/AITuberOnAirCore.js.map +1 -1
  10. package/dist/index.d.ts +1 -3
  11. package/dist/index.js +10 -2
  12. package/dist/index.js.map +1 -1
  13. package/dist/services/chat/providers/claude/ClaudeChatService.js +2 -7
  14. package/dist/services/chat/providers/claude/ClaudeChatService.js.map +1 -1
  15. package/dist/services/chat/providers/gemini/GeminiChatService.js +5 -10
  16. package/dist/services/chat/providers/gemini/GeminiChatService.js.map +1 -1
  17. package/dist/services/chat/providers/openai/OpenAIChatService.js +8 -27
  18. package/dist/services/chat/providers/openai/OpenAIChatService.js.map +1 -1
  19. package/dist/types/index.d.ts +1 -8
  20. package/dist/types/index.js +0 -6
  21. package/dist/types/index.js.map +1 -1
  22. package/dist/utils/chatServiceHttpClient.d.ts +46 -0
  23. package/dist/utils/chatServiceHttpClient.js +126 -0
  24. package/dist/utils/chatServiceHttpClient.js.map +1 -0
  25. package/dist/utils/emotionParser.d.ts +45 -0
  26. package/dist/utils/emotionParser.js +55 -0
  27. package/dist/utils/emotionParser.js.map +1 -0
  28. package/dist/utils/index.d.ts +3 -0
  29. package/dist/utils/index.js +3 -0
  30. package/dist/utils/index.js.map +1 -1
  31. package/dist/utils/screenplay.js +5 -13
  32. package/dist/utils/screenplay.js.map +1 -1
  33. package/dist/utils/streamTextAccumulator.d.ts +24 -0
  34. package/dist/utils/streamTextAccumulator.js +43 -0
  35. package/dist/utils/streamTextAccumulator.js.map +1 -0
  36. package/package.json +4 -1
  37. package/dist/constants/voiceEngine.d.ts +0 -9
  38. package/dist/constants/voiceEngine.js +0 -12
  39. package/dist/constants/voiceEngine.js.map +0 -1
  40. package/dist/services/voice/VoiceEngineAdapter.d.ts +0 -46
  41. package/dist/services/voice/VoiceEngineAdapter.js +0 -205
  42. package/dist/services/voice/VoiceEngineAdapter.js.map +0 -1
  43. package/dist/services/voice/VoiceService.d.ts +0 -65
  44. package/dist/services/voice/VoiceService.js +0 -2
  45. package/dist/services/voice/VoiceService.js.map +0 -1
  46. package/dist/services/voice/engines/AivisSpeechEngine.d.ts +0 -16
  47. package/dist/services/voice/engines/AivisSpeechEngine.js +0 -80
  48. package/dist/services/voice/engines/AivisSpeechEngine.js.map +0 -1
  49. package/dist/services/voice/engines/MinimaxEngine.d.ts +0 -131
  50. package/dist/services/voice/engines/MinimaxEngine.js +0 -372
  51. package/dist/services/voice/engines/MinimaxEngine.js.map +0 -1
  52. package/dist/services/voice/engines/NijiVoiceEngine.d.ts +0 -11
  53. package/dist/services/voice/engines/NijiVoiceEngine.js +0 -105
  54. package/dist/services/voice/engines/NijiVoiceEngine.js.map +0 -1
  55. package/dist/services/voice/engines/NoneEngine.d.ts +0 -28
  56. package/dist/services/voice/engines/NoneEngine.js +0 -34
  57. package/dist/services/voice/engines/NoneEngine.js.map +0 -1
  58. package/dist/services/voice/engines/OpenAiEngine.d.ts +0 -9
  59. package/dist/services/voice/engines/OpenAiEngine.js +0 -35
  60. package/dist/services/voice/engines/OpenAiEngine.js.map +0 -1
  61. package/dist/services/voice/engines/VoiceEngine.d.ts +0 -25
  62. package/dist/services/voice/engines/VoiceEngine.js +0 -2
  63. package/dist/services/voice/engines/VoiceEngine.js.map +0 -1
  64. package/dist/services/voice/engines/VoiceEngineFactory.d.ts +0 -15
  65. package/dist/services/voice/engines/VoiceEngineFactory.js +0 -40
  66. package/dist/services/voice/engines/VoiceEngineFactory.js.map +0 -1
  67. package/dist/services/voice/engines/VoicePeakEngine.d.ts +0 -19
  68. package/dist/services/voice/engines/VoicePeakEngine.js +0 -58
  69. package/dist/services/voice/engines/VoicePeakEngine.js.map +0 -1
  70. package/dist/services/voice/engines/VoiceVoxEngine.d.ts +0 -19
  71. package/dist/services/voice/engines/VoiceVoxEngine.js +0 -77
  72. package/dist/services/voice/engines/VoiceVoxEngine.js.map +0 -1
  73. package/dist/services/voice/engines/index.d.ts +0 -8
  74. package/dist/services/voice/engines/index.js +0 -8
  75. package/dist/services/voice/engines/index.js.map +0 -1
  76. package/dist/services/voice/messages.d.ts +0 -3
  77. package/dist/services/voice/messages.js +0 -43
  78. package/dist/services/voice/messages.js.map +0 -1
  79. package/dist/types/nijiVoice.d.ts +0 -27
  80. package/dist/types/nijiVoice.js +0 -2
  81. package/dist/types/nijiVoice.js.map +0 -1
  82. package/dist/types/voice.d.ts +0 -35
  83. package/dist/types/voice.js +0 -19
  84. package/dist/types/voice.js.map +0 -1
  85. package/dist/types/voiceEngine.d.ts +0 -1
  86. package/dist/types/voiceEngine.js +0 -2
  87. package/dist/types/voiceEngine.js.map +0 -1
@@ -1,372 +0,0 @@
1
- import { MINIMAX_GLOBAL_API_URL, MINIMAX_CHINA_API_URL, MINIMAX_GLOBAL_VOICE_LIST_URL, MINIMAX_CHINA_VOICE_LIST_URL, } from '../../../constants';
2
- /**
3
- * MiniMax TTS voice synthesis engine
4
- */
5
- export class MinimaxEngine {
6
- constructor() {
7
- this.model = 'speech-02-hd';
8
- this.defaultVoiceId = 'male-qn-qingse';
9
- this.language = 'Japanese';
10
- this.endpoint = 'global';
11
- }
12
- /**
13
- * Set GroupId for MiniMax API
14
- *
15
- * GroupId is a unique identifier for the user group in MiniMax's system.
16
- * Unlike other TTS engines that only require an API key, MiniMax requires both
17
- * an API key and a GroupId for authentication and usage tracking.
18
- *
19
- * This GroupId is used by MiniMax for:
20
- * - User group management
21
- * - Usage statistics tracking
22
- * - Billing and quota management
23
- *
24
- * You must obtain this pre-generated value from your MiniMax account dashboard.
25
- *
26
- * @param groupId GroupId for MiniMax API (required for production synthesis)
27
- */
28
- setGroupId(groupId) {
29
- this.groupId = groupId;
30
- }
31
- /**
32
- * Set endpoint region for MiniMax API
33
- * @param endpoint Endpoint region ('global' or 'china')
34
- */
35
- setEndpoint(endpoint) {
36
- this.endpoint = endpoint;
37
- }
38
- /**
39
- * Set model for MiniMax TTS
40
- * @param model Model name (speech-02-hd, speech-02-turbo, speech-01-hd, speech-01-turbo)
41
- */
42
- setModel(model) {
43
- this.model = model;
44
- }
45
- /**
46
- * Set language boost
47
- * @param language Language to boost recognition
48
- */
49
- setLanguage(language) {
50
- this.language = language;
51
- }
52
- /**
53
- * Get current API endpoint URL based on selected endpoint
54
- * @returns API endpoint URL
55
- */
56
- getTtsApiUrl() {
57
- return this.endpoint === 'china'
58
- ? MINIMAX_CHINA_API_URL
59
- : MINIMAX_GLOBAL_API_URL;
60
- }
61
- /**
62
- * Get current voice list API endpoint URL based on selected endpoint
63
- * @returns Voice list API endpoint URL
64
- */
65
- getVoiceListApiUrl() {
66
- return this.endpoint === 'china'
67
- ? MINIMAX_CHINA_VOICE_LIST_URL
68
- : MINIMAX_GLOBAL_VOICE_LIST_URL;
69
- }
70
- /**
71
- * Get available voice speakers list
72
- * Requires only API key
73
- * @param apiKey MiniMax API key
74
- * @returns Promise<MinimaxVoiceSpeaker[]>
75
- */
76
- async getVoiceList(apiKey) {
77
- if (!apiKey) {
78
- throw new Error('MiniMax API key is required');
79
- }
80
- const response = await fetch(this.getVoiceListApiUrl(), {
81
- method: 'GET',
82
- headers: {
83
- Authorization: `Bearer ${apiKey}`,
84
- 'Content-Type': 'application/json',
85
- },
86
- });
87
- if (!response.ok) {
88
- let errorMessage = `Failed to fetch voice list: ${response.status}`;
89
- try {
90
- const errorText = await response.text();
91
- console.error('Failed to fetch voice list from MiniMax:', response.status, errorText);
92
- errorMessage = `Failed to fetch voice list: ${response.status} - ${errorText}`;
93
- }
94
- catch (e) {
95
- console.error('Failed to fetch voice list from MiniMax:', response.status, response.statusText);
96
- errorMessage = `Failed to fetch voice list: ${response.status} - ${response.statusText}`;
97
- }
98
- throw new Error(errorMessage);
99
- }
100
- const result = await response.json();
101
- // Check base_resp for API errors
102
- if (result.base_resp && result.base_resp.status_code !== 0) {
103
- const errorMsg = result.base_resp.status_msg || 'Unknown error';
104
- throw new Error(`MiniMax API error: ${result.base_resp.status_code} - ${errorMsg}`);
105
- }
106
- // Return voice speakers data
107
- return result.data?.speakers || [];
108
- }
109
- /**
110
- * Test voice synthesis with minimal requirements
111
- * Requires API key and voice ID, but not GroupId
112
- * @param text Text to synthesize (shorter text recommended for testing)
113
- * @param voiceId Voice ID to test
114
- * @param apiKey MiniMax API key
115
- * @returns Promise<ArrayBuffer>
116
- */
117
- async testVoice(text, voiceId, apiKey) {
118
- if (!apiKey) {
119
- throw new Error('MiniMax API key is required');
120
- }
121
- if (!voiceId) {
122
- throw new Error('Voice ID is required');
123
- }
124
- // Limit test text length to avoid quota waste
125
- const testText = text.length > 100 ? text.substring(0, 100) + '...' : text;
126
- // Use a temporary GroupId for testing or make it optional
127
- const tempGroupId = this.groupId || '1';
128
- const requestBody = {
129
- model: this.model,
130
- text: testText,
131
- stream: false,
132
- voice_setting: {
133
- voice_id: voiceId,
134
- speed: 1.0,
135
- vol: 1.0,
136
- pitch: 0,
137
- },
138
- audio_setting: {
139
- sample_rate: 32000,
140
- bitrate: 128000,
141
- format: 'mp3',
142
- channel: 1,
143
- },
144
- language_boost: this.language,
145
- };
146
- const response = await fetch(`${this.getTtsApiUrl()}?GroupId=${tempGroupId}`, {
147
- method: 'POST',
148
- headers: {
149
- 'Content-Type': 'application/json',
150
- Authorization: `Bearer ${apiKey}`,
151
- },
152
- body: JSON.stringify(requestBody),
153
- });
154
- if (!response.ok) {
155
- let errorMessage = `HTTP error ${response.status}`;
156
- try {
157
- const errorText = await response.text();
158
- console.error('Failed to test voice from MiniMax:', response.status, errorText);
159
- errorMessage = `Failed to test voice: ${response.status} - ${errorText}`;
160
- }
161
- catch (e) {
162
- console.error('Failed to test voice from MiniMax:', response.status, response.statusText);
163
- errorMessage = `Failed to test voice: ${response.status} - ${response.statusText}`;
164
- }
165
- throw new Error(errorMessage);
166
- }
167
- const result = await response.json();
168
- // Check base_resp for API errors
169
- if (result.base_resp && result.base_resp.status_code !== 0) {
170
- const errorMsg = result.base_resp.status_msg || 'Unknown error';
171
- throw new Error(`MiniMax API error: ${result.base_resp.status_code} - ${errorMsg}`);
172
- }
173
- // Get audio data from response
174
- if (!result.data || !result.data.audio) {
175
- console.error('Invalid response structure:', result);
176
- throw new Error('Audio data not found in MiniMax response');
177
- }
178
- // Convert hex string to ArrayBuffer
179
- try {
180
- return this.hexToArrayBuffer(result.data.audio);
181
- }
182
- catch (error) {
183
- console.error('Failed to convert hex audio data:', error);
184
- throw new Error(`Failed to process audio data: ${error}`);
185
- }
186
- }
187
- /**
188
- * Full production audio synthesis
189
- * Requires API key, voice ID, and GroupId
190
- * @param input Talk object
191
- * @param speaker Voice ID
192
- * @param apiKey MiniMax API key
193
- * @param voiceActor Not used for MiniMax (for interface compatibility)
194
- * @returns Promise<ArrayBuffer>
195
- */
196
- async fetchAudio(input, speaker, apiKey, voiceActor) {
197
- return this.fetchAudioWithOptions(input, speaker, apiKey, true);
198
- }
199
- /**
200
- * Audio synthesis with flexible GroupId requirement
201
- * @param input Talk object
202
- * @param speaker Voice ID
203
- * @param apiKey MiniMax API key
204
- * @param requireGroupId Whether to require GroupId (default: true)
205
- * @returns Promise<ArrayBuffer>
206
- */
207
- async fetchAudioWithOptions(input, speaker, apiKey, requireGroupId = true) {
208
- if (!apiKey) {
209
- throw new Error('MiniMax API key is required');
210
- }
211
- if (requireGroupId && !this.groupId) {
212
- throw new Error('MiniMax GroupId is required for production synthesis. Please set it using setGroupId(), or use testVoice() for testing.');
213
- }
214
- const talk = input;
215
- const text = talk.message.trim();
216
- // Validate text length (max 5000 characters)
217
- if (text.length > 5000) {
218
- throw new Error('Text exceeds maximum length of 5000 characters');
219
- }
220
- // Get emotion from talk.style and adjust voice settings
221
- const voiceSettings = this.getVoiceSettings(talk.style || 'talk');
222
- const requestBody = {
223
- model: this.model,
224
- text: text,
225
- stream: false,
226
- voice_setting: {
227
- voice_id: speaker || this.defaultVoiceId,
228
- speed: voiceSettings.speed,
229
- vol: voiceSettings.vol,
230
- pitch: voiceSettings.pitch,
231
- },
232
- audio_setting: {
233
- sample_rate: 32000,
234
- bitrate: 128000,
235
- format: 'mp3',
236
- channel: 1,
237
- },
238
- language_boost: this.language,
239
- };
240
- // Use provided GroupId or temporary one for testing
241
- const groupIdToUse = this.groupId || '1';
242
- const response = await fetch(`${this.getTtsApiUrl()}?GroupId=${groupIdToUse}`, {
243
- method: 'POST',
244
- headers: {
245
- 'Content-Type': 'application/json',
246
- Authorization: `Bearer ${apiKey}`,
247
- },
248
- body: JSON.stringify(requestBody),
249
- });
250
- if (!response.ok) {
251
- let errorMessage = `HTTP error ${response.status}`;
252
- try {
253
- const errorText = await response.text();
254
- console.error('Failed to fetch TTS from MiniMax:', response.status, errorText);
255
- errorMessage = `Failed to fetch TTS from MiniMax: ${response.status} - ${errorText}`;
256
- }
257
- catch (e) {
258
- console.error('Failed to fetch TTS from MiniMax:', response.status, response.statusText);
259
- errorMessage = `Failed to fetch TTS from MiniMax: ${response.status} - ${response.statusText}`;
260
- }
261
- throw new Error(errorMessage);
262
- }
263
- const result = await response.json();
264
- // Check base_resp for API errors
265
- if (result.base_resp && result.base_resp.status_code !== 0) {
266
- const errorMsg = result.base_resp.status_msg || 'Unknown error';
267
- throw new Error(`MiniMax API error: ${result.base_resp.status_code} - ${errorMsg}`);
268
- }
269
- // Get audio data from response
270
- if (!result.data || !result.data.audio) {
271
- console.error('Invalid response structure:', result);
272
- throw new Error('Audio data not found in MiniMax response');
273
- }
274
- // Convert hex string to ArrayBuffer
275
- try {
276
- return this.hexToArrayBuffer(result.data.audio);
277
- }
278
- catch (error) {
279
- console.error('Failed to convert hex audio data:', error);
280
- throw new Error(`Failed to process audio data: ${error}`);
281
- }
282
- }
283
- /**
284
- * Check if GroupId is configured
285
- * @returns boolean
286
- */
287
- hasGroupId() {
288
- return !!this.groupId;
289
- }
290
- /**
291
- * Get current endpoint setting
292
- * @returns MinimaxEndpoint
293
- */
294
- getEndpoint() {
295
- return this.endpoint;
296
- }
297
- /**
298
- * Set custom API endpoint URL (VoiceEngine interface compatibility)
299
- * @param apiUrl custom API endpoint URL
300
- */
301
- setApiEndpoint(apiUrl) {
302
- // For MiniMax, we override the endpoint URLs directly
303
- if (apiUrl.includes('minimaxi.com')) {
304
- this.endpoint = 'china';
305
- }
306
- else {
307
- this.endpoint = 'global';
308
- }
309
- }
310
- /**
311
- * Get voice settings based on emotion
312
- * @param emotion Emotion type
313
- * @returns Voice settings
314
- */
315
- getVoiceSettings(emotion) {
316
- // Default settings
317
- let speed = 1.0;
318
- let vol = 1.0;
319
- let pitch = 0;
320
- // Adjust settings based on emotion
321
- switch (emotion.toLowerCase()) {
322
- case 'happy':
323
- speed = 1.1;
324
- pitch = 1;
325
- break;
326
- case 'sad':
327
- speed = 0.9;
328
- pitch = -1;
329
- break;
330
- case 'angry':
331
- speed = 1.0;
332
- vol = 1.1;
333
- pitch = 0;
334
- break;
335
- case 'surprised':
336
- speed = 1.2;
337
- pitch = 2;
338
- break;
339
- default:
340
- // Keep default values
341
- break;
342
- }
343
- return { speed, vol, pitch };
344
- }
345
- /**
346
- * Convert hex string to ArrayBuffer
347
- * @param hex Hex string
348
- * @returns ArrayBuffer
349
- */
350
- hexToArrayBuffer(hex) {
351
- // Remove any whitespace or newlines
352
- const cleanHex = hex.replace(/[\s\n]/g, '');
353
- // Ensure even number of characters
354
- if (cleanHex.length % 2 !== 0) {
355
- throw new Error('Invalid hex string: odd number of characters');
356
- }
357
- // Validate hex string
358
- if (!/^[0-9a-fA-F]*$/.test(cleanHex)) {
359
- throw new Error('Invalid hex string: contains non-hex characters');
360
- }
361
- const buffer = new ArrayBuffer(cleanHex.length / 2);
362
- const view = new Uint8Array(buffer);
363
- for (let i = 0; i < cleanHex.length; i += 2) {
364
- view[i / 2] = Number.parseInt(cleanHex.substr(i, 2), 16);
365
- }
366
- return buffer;
367
- }
368
- getTestMessage(textVoiceText) {
369
- return textVoiceText || 'MiniMax Audioを使用します';
370
- }
371
- }
372
- //# sourceMappingURL=MinimaxEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MinimaxEngine.js","sourceRoot":"","sources":["../../../../src/services/voice/engines/MinimaxEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,4BAA4B,GAC7B,MAAM,oBAAoB,CAAC;AAoB5B;;GAEG;AACH,MAAM,OAAO,aAAa;IAA1B;QAEU,UAAK,GAAW,cAAc,CAAC;QAC/B,mBAAc,GAAW,gBAAgB,CAAC;QAC1C,aAAQ,GAAW,UAAU,CAAC;QAC9B,aAAQ,GAAoB,QAAQ,CAAC;IA4c/C,CAAC;IA1cC;;;;;;;;;;;;;;;OAeG;IACH,UAAU,CAAC,OAAe;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,KAAa;QACpB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACK,YAAY;QAClB,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO;YAC9B,CAAC,CAAC,qBAAqB;YACvB,CAAC,CAAC,sBAAsB,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACK,kBAAkB;QACxB,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO;YAC9B,CAAC,CAAC,4BAA4B;YAC9B,CAAC,CAAC,6BAA6B,CAAC;IACpC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE;YACtD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,YAAY,GAAG,+BAA+B,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpE,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CACX,0CAA0C,EAC1C,QAAQ,CAAC,MAAM,EACf,SAAS,CACV,CAAC;gBACF,YAAY,GAAG,+BAA+B,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC;YACjF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACX,0CAA0C,EAC1C,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,CACpB,CAAC;gBACF,YAAY,GAAG,+BAA+B,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC3F,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAErC,iCAAiC;QACjC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,eAAe,CAAC;YAChE,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,SAAS,CAAC,WAAW,MAAM,QAAQ,EAAE,CACnE,CAAC;QACJ,CAAC;QAED,6BAA6B;QAC7B,OAAO,MAAM,CAAC,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;IACrC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,OAAe,EACf,MAAc;QAEd,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QAED,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAE3E,0DAA0D;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC;QAExC,MAAM,WAAW,GAAG;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,KAAK;YACb,aAAa,EAAE;gBACb,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;gBACR,KAAK,EAAE,CAAC;aACT;YACD,aAAa,EAAE;gBACb,WAAW,EAAE,KAAK;gBAClB,OAAO,EAAE,MAAM;gBACf,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,CAAC;aACX;YACD,cAAc,EAAE,IAAI,CAAC,QAAQ;SAC9B,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,WAAW,EAAE,EAC/C;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SAClC,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,YAAY,GAAG,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CACX,oCAAoC,EACpC,QAAQ,CAAC,MAAM,EACf,SAAS,CACV,CAAC;gBACF,YAAY,GAAG,yBAAyB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC;YAC3E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACX,oCAAoC,EACpC,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,CACpB,CAAC;gBACF,YAAY,GAAG,yBAAyB,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YACrF,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAErC,iCAAiC;QACjC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,eAAe,CAAC;YAChE,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,SAAS,CAAC,WAAW,MAAM,QAAQ,EAAE,CACnE,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CACd,KAAW,EACX,OAAe,EACf,MAAe,EACf,UAAgB;QAEhB,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,qBAAqB,CACzB,KAAW,EACX,OAAe,EACf,MAAe,EACf,iBAA0B,IAAI;QAE9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,yHAAyH,CAC1H,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,KAAa,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEjC,6CAA6C;QAC7C,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACpE,CAAC;QAED,wDAAwD;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;QAElE,MAAM,WAAW,GAAG;YAClB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,KAAK;YACb,aAAa,EAAE;gBACb,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC,cAAc;gBACxC,KAAK,EAAE,aAAa,CAAC,KAAK;gBAC1B,GAAG,EAAE,aAAa,CAAC,GAAG;gBACtB,KAAK,EAAE,aAAa,CAAC,KAAK;aAC3B;YACD,aAAa,EAAE;gBACb,WAAW,EAAE,KAAK;gBAClB,OAAO,EAAE,MAAM;gBACf,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,CAAC;aACX;YACD,cAAc,EAAE,IAAI,CAAC,QAAQ;SAC9B,CAAC;QAEF,oDAAoD;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC;QAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,YAAY,EAAE,EAChD;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SAClC,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,YAAY,GAAG,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CACX,mCAAmC,EACnC,QAAQ,CAAC,MAAM,EACf,SAAS,CACV,CAAC;gBACF,YAAY,GAAG,qCAAqC,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC;YACvF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CACX,mCAAmC,EACnC,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,CACpB,CAAC;gBACF,YAAY,GAAG,qCAAqC,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;YACjG,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAErC,iCAAiC;QACjC,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,UAAU,IAAI,eAAe,CAAC;YAChE,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,SAAS,CAAC,WAAW,MAAM,QAAQ,EAAE,CACnE,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;;OAGG;IACH,cAAc,CAAC,MAAc;QAC3B,sDAAsD;QACtD,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,gBAAgB,CAAC,OAAe;QAKtC,mBAAmB;QACnB,IAAI,KAAK,GAAG,GAAG,CAAC;QAChB,IAAI,GAAG,GAAG,GAAG,CAAC;QACd,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,mCAAmC;QACnC,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC9B,KAAK,OAAO;gBACV,KAAK,GAAG,GAAG,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;YACR,KAAK,KAAK;gBACR,KAAK,GAAG,GAAG,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC,CAAC;gBACX,MAAM;YACR,KAAK,OAAO;gBACV,KAAK,GAAG,GAAG,CAAC;gBACZ,GAAG,GAAG,GAAG,CAAC;gBACV,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;YACR,KAAK,WAAW;gBACd,KAAK,GAAG,GAAG,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;gBACV,MAAM;YACR;gBACE,sBAAsB;gBACtB,MAAM;QACV,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACK,gBAAgB,CAAC,GAAW;QAClC,oCAAoC;QACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAE5C,mCAAmC;QACnC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QAEpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,cAAc,CAAC,aAAsB;QACnC,OAAO,aAAa,IAAI,qBAAqB,CAAC;IAChD,CAAC;CACF"}
@@ -1,11 +0,0 @@
1
- import { VoiceActor, Talk } from '../../../types';
2
- import { VoiceEngine } from './VoiceEngine';
3
- /**
4
- * NijiVoice voice synthesis engine
5
- */
6
- export declare class NijiVoiceEngine implements VoiceEngine {
7
- fetchAudio(input: Talk, speaker: string, apiKey?: string, voiceActor?: VoiceActor): Promise<ArrayBuffer>;
8
- private processEmotionParams;
9
- private base64ToArrayBuffer;
10
- getTestMessage(textVoiceText?: string): string;
11
- }
@@ -1,105 +0,0 @@
1
- import { NIJI_VOICE_API_URL } from '../../../constants';
2
- /**
3
- * NijiVoice voice synthesis engine
4
- */
5
- export class NijiVoiceEngine {
6
- async fetchAudio(input, speaker, apiKey, voiceActor) {
7
- if (!apiKey) {
8
- throw new Error('NijiVoice API key is required');
9
- }
10
- const talk = input;
11
- const script = talk.message.trim();
12
- // get emotion from talk.style and process parameters
13
- const emotion = talk.style || 'neutral';
14
- const emotionParams = this.processEmotionParams(emotion, script, voiceActor);
15
- const generateResponse = await fetch(`${NIJI_VOICE_API_URL}/voice-actors/${speaker}/generate-encoded-voice`, {
16
- method: 'POST',
17
- headers: {
18
- 'x-api-key': apiKey,
19
- 'Content-Type': 'application/json',
20
- accept: 'application/json',
21
- },
22
- body: JSON.stringify({
23
- script: emotionParams.script,
24
- speed: emotionParams.speed,
25
- emotionalLevel: emotionParams.emotionalLevel,
26
- format: 'mp3',
27
- }),
28
- });
29
- if (!generateResponse.ok) {
30
- const errorBody = await generateResponse.text();
31
- console.error('NijiVoice generate-encoded-voice error:', errorBody);
32
- throw new Error('Failed to generate voice from NijiVoice');
33
- }
34
- const generateResult = (await generateResponse.json());
35
- const base64Audio = generateResult.generatedVoice?.base64Audio;
36
- if (!base64Audio) {
37
- throw new Error('Base64 audio not found in NijiVoice response');
38
- }
39
- return this.base64ToArrayBuffer(base64Audio);
40
- }
41
- processEmotionParams(emotion, script, voiceActor) {
42
- // set default values
43
- const defaultEmotionalLevel = 0.7; // default emotional level
44
- const defaultSpeed = 1.0; // default speed
45
- let emotionalLevel;
46
- // if voiceActor does not exist, use default values
47
- let speed = voiceActor?.recommendedVoiceSpeed
48
- ? String(voiceActor.recommendedVoiceSpeed)
49
- : String(defaultSpeed);
50
- // base emotional level (use voiceActor's recommendedEmotionalLevel or default values)
51
- const baseEmotionalLevel = voiceActor?.recommendedEmotionalLevel
52
- ? Number(voiceActor.recommendedEmotionalLevel)
53
- : defaultEmotionalLevel;
54
- // base speed (use voiceActor's recommendedVoiceSpeed or default values)
55
- let baseSpeed = voiceActor?.recommendedVoiceSpeed
56
- ? Number(voiceActor.recommendedVoiceSpeed)
57
- : defaultSpeed;
58
- // adjust according to emotion
59
- let adjustment = '0.0';
60
- switch (emotion.toLowerCase()) {
61
- case 'happy':
62
- adjustment = '0.2';
63
- baseSpeed *= 1.1;
64
- break;
65
- case 'sad':
66
- adjustment = '-0.4';
67
- baseSpeed *= 0.9;
68
- break;
69
- case 'angry':
70
- adjustment = '0.4';
71
- baseSpeed *= 1.0;
72
- break;
73
- case 'surprised':
74
- adjustment = '0.3';
75
- baseSpeed *= 1.2;
76
- break;
77
- default:
78
- // if default, set emotional level
79
- emotionalLevel = String(baseEmotionalLevel);
80
- break;
81
- }
82
- if (adjustment !== '0.0') {
83
- emotionalLevel = (Math.round(Math.min(Math.max(baseEmotionalLevel + Number(adjustment), 0), 1.5) *
84
- 10) / 10).toString();
85
- }
86
- // ensure speed is always between 0.4 and 3.0
87
- speed = (Math.round(Math.min(Math.max(baseSpeed, 0.4), 3.0) * 10) / 10).toString();
88
- return { script, emotionalLevel, speed };
89
- }
90
- base64ToArrayBuffer(base64) {
91
- const sanitizedBase64 = base64.replace(/[\r\n\s]/g, '');
92
- const binaryString = atob(sanitizedBase64);
93
- const len = binaryString.length;
94
- const buffer = new ArrayBuffer(len);
95
- const view = new Uint8Array(buffer);
96
- for (let i = 0; i < len; i++) {
97
- view[i] = binaryString.charCodeAt(i);
98
- }
99
- return buffer;
100
- }
101
- getTestMessage(textVoiceText) {
102
- return textVoiceText || 'にじボイスを使用します';
103
- }
104
- }
105
- //# sourceMappingURL=NijiVoiceEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NijiVoiceEngine.js","sourceRoot":"","sources":["../../../../src/services/voice/engines/NijiVoiceEngine.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- import { VoiceActor, Talk } from '../../../types';
2
- import { VoiceEngine } from './VoiceEngine';
3
- /**
4
- * None (no voice) engine
5
- * Implementation using Null Object pattern that performs no voice processing
6
- */
7
- export declare class NoneEngine implements VoiceEngine {
8
- /**
9
- * Get voice data (performs no processing)
10
- * @param input script
11
- * @param speaker speaker ID
12
- * @param apiKey API key (not used)
13
- * @param voiceActor voice actor information (not used)
14
- * @returns empty ArrayBuffer
15
- */
16
- fetchAudio(input: Talk, speaker: string, apiKey?: string, voiceActor?: VoiceActor): Promise<ArrayBuffer>;
17
- /**
18
- * Get test message
19
- * @param textVoiceText custom text
20
- * @returns test message
21
- */
22
- getTestMessage(textVoiceText?: string): string;
23
- /**
24
- * Set custom API endpoint URL (performs no processing)
25
- * @param apiUrl custom API endpoint URL
26
- */
27
- setApiEndpoint?(apiUrl: string): void;
28
- }
@@ -1,34 +0,0 @@
1
- /**
2
- * None (no voice) engine
3
- * Implementation using Null Object pattern that performs no voice processing
4
- */
5
- export class NoneEngine {
6
- /**
7
- * Get voice data (performs no processing)
8
- * @param input script
9
- * @param speaker speaker ID
10
- * @param apiKey API key (not used)
11
- * @param voiceActor voice actor information (not used)
12
- * @returns empty ArrayBuffer
13
- */
14
- async fetchAudio(input, speaker, apiKey, voiceActor) {
15
- // Return empty ArrayBuffer since no voice is needed
16
- return new ArrayBuffer(0);
17
- }
18
- /**
19
- * Get test message
20
- * @param textVoiceText custom text
21
- * @returns test message
22
- */
23
- getTestMessage(textVoiceText) {
24
- return textVoiceText || 'No voice mode is active';
25
- }
26
- /**
27
- * Set custom API endpoint URL (performs no processing)
28
- * @param apiUrl custom API endpoint URL
29
- */
30
- setApiEndpoint(apiUrl) {
31
- // No processing needed in no voice mode
32
- }
33
- }
34
- //# sourceMappingURL=NoneEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NoneEngine.js","sourceRoot":"","sources":["../../../../src/services/voice/engines/NoneEngine.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,UAAU;IACrB;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CACd,KAAW,EACX,OAAe,EACf,MAAe,EACf,UAAuB;QAEvB,oDAAoD;QACpD,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,aAAsB;QACnC,OAAO,aAAa,IAAI,yBAAyB,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,cAAc,CAAE,MAAc;QAC5B,wCAAwC;IAC1C,CAAC;CACF"}
@@ -1,9 +0,0 @@
1
- import { Talk } from '../../../types';
2
- import { VoiceEngine } from './VoiceEngine';
3
- /**
4
- * OpenAI TTS voice synthesis engine
5
- */
6
- export declare class OpenAiEngine implements VoiceEngine {
7
- fetchAudio(input: Talk, speaker: string, apiKey?: string): Promise<ArrayBuffer>;
8
- getTestMessage(textVoiceText?: string): string;
9
- }
@@ -1,35 +0,0 @@
1
- import { OPENAI_TTS_API_URL } from '../../../constants';
2
- /**
3
- * OpenAI TTS voice synthesis engine
4
- */
5
- export class OpenAiEngine {
6
- async fetchAudio(input, speaker, apiKey) {
7
- if (!apiKey) {
8
- throw new Error('OpenAI API key is required');
9
- }
10
- const talk = input;
11
- const text = talk.message.trim();
12
- const response = await fetch(OPENAI_TTS_API_URL, {
13
- method: 'POST',
14
- headers: {
15
- 'Content-Type': 'application/json',
16
- Authorization: `Bearer ${apiKey}`,
17
- },
18
- body: JSON.stringify({
19
- model: 'tts-1',
20
- voice: speaker,
21
- input: text,
22
- }),
23
- });
24
- if (!response.ok) {
25
- console.error('Failed to fetch TTS from OpenAI TTS:', response.status);
26
- throw new Error('Failed to fetch TTS from OpenAI TTS.');
27
- }
28
- const blob = await response.blob();
29
- return await blob.arrayBuffer();
30
- }
31
- getTestMessage(textVoiceText) {
32
- return textVoiceText || 'OpenAI TTSを使用します';
33
- }
34
- }
35
- //# sourceMappingURL=OpenAiEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpenAiEngine.js","sourceRoot":"","sources":["../../../../src/services/voice/engines/OpenAiEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIxD;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB,KAAK,CAAC,UAAU,CACd,KAAW,EACX,OAAe,EACf,MAAe;QAEf,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,IAAI,GAAG,KAAa,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAEjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,kBAAkB,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,IAAI;aACZ,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YACvE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;IAClC,CAAC;IAED,cAAc,CAAC,aAAsB;QACnC,OAAO,aAAa,IAAI,kBAAkB,CAAC;IAC7C,CAAC;CACF"}
@@ -1,25 +0,0 @@
1
- import { VoiceActor, Talk } from '../../../types';
2
- /**
3
- * Common interface for voice engines
4
- */
5
- export interface VoiceEngine {
6
- /**
7
- * Get voice data
8
- * @param input script
9
- * @param speaker speaker ID
10
- * @param apiKey API key (if needed)
11
- * @param voiceActor voice actor information (for NijiVoice)
12
- * @returns ArrayBuffer of voice data
13
- */
14
- fetchAudio(input: Talk, speaker: string, apiKey?: string, voiceActor?: VoiceActor): Promise<ArrayBuffer>;
15
- /**
16
- * Get a test message
17
- * @returns test message
18
- */
19
- getTestMessage(textVoiceText?: string): string;
20
- /**
21
- * Set custom API endpoint URL
22
- * @param apiUrl custom API endpoint URL
23
- */
24
- setApiEndpoint?(apiUrl: string): void;
25
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=VoiceEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"VoiceEngine.js","sourceRoot":"","sources":["../../../../src/services/voice/engines/VoiceEngine.ts"],"names":[],"mappings":""}