@kajidog/voicevox-client 0.4.1 → 0.6.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 (114) hide show
  1. package/LICENSE +14 -14
  2. package/dist/accent-utils.d.ts +93 -0
  3. package/dist/accent-utils.d.ts.map +1 -0
  4. package/dist/accent-utils.js +211 -0
  5. package/dist/accent-utils.js.map +1 -0
  6. package/dist/api.d.ts +40 -2
  7. package/dist/api.d.ts.map +1 -1
  8. package/dist/api.js +90 -0
  9. package/dist/api.js.map +1 -1
  10. package/dist/cache-policy.d.ts +21 -0
  11. package/dist/cache-policy.d.ts.map +1 -0
  12. package/dist/cache-policy.js +31 -0
  13. package/dist/cache-policy.js.map +1 -0
  14. package/dist/client.d.ts +28 -119
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +48 -417
  17. package/dist/client.js.map +1 -1
  18. package/dist/effect/config.d.ts +43 -0
  19. package/dist/effect/config.d.ts.map +1 -0
  20. package/dist/effect/config.js +45 -0
  21. package/dist/effect/config.js.map +1 -0
  22. package/dist/effect/context.d.ts +33 -0
  23. package/dist/effect/context.d.ts.map +1 -0
  24. package/dist/effect/context.js +10 -0
  25. package/dist/effect/context.js.map +1 -0
  26. package/dist/effect/errors.d.ts +130 -0
  27. package/dist/effect/errors.d.ts.map +1 -0
  28. package/dist/effect/errors.js +121 -0
  29. package/dist/effect/errors.js.map +1 -0
  30. package/dist/effect/index.d.ts +34 -0
  31. package/dist/effect/index.d.ts.map +1 -0
  32. package/dist/effect/index.js +67 -0
  33. package/dist/effect/index.js.map +1 -0
  34. package/dist/effect/queue-manager.d.ts +34 -0
  35. package/dist/effect/queue-manager.d.ts.map +1 -0
  36. package/dist/effect/queue-manager.js +59 -0
  37. package/dist/effect/queue-manager.js.map +1 -0
  38. package/dist/effect/services/api-service.d.ts +58 -0
  39. package/dist/effect/services/api-service.d.ts.map +1 -0
  40. package/dist/effect/services/api-service.js +90 -0
  41. package/dist/effect/services/api-service.js.map +1 -0
  42. package/dist/effect/services/audio-generator-service.d.ts +78 -0
  43. package/dist/effect/services/audio-generator-service.d.ts.map +1 -0
  44. package/dist/effect/services/audio-generator-service.js +187 -0
  45. package/dist/effect/services/audio-generator-service.js.map +1 -0
  46. package/dist/effect/services/audio-player-service.d.ts +101 -0
  47. package/dist/effect/services/audio-player-service.d.ts.map +1 -0
  48. package/dist/effect/services/audio-player-service.js +297 -0
  49. package/dist/effect/services/audio-player-service.js.map +1 -0
  50. package/dist/effect/services/event-manager-service.d.ts +96 -0
  51. package/dist/effect/services/event-manager-service.d.ts.map +1 -0
  52. package/dist/effect/services/event-manager-service.js +208 -0
  53. package/dist/effect/services/event-manager-service.js.map +1 -0
  54. package/dist/effect/services/file-manager-service.d.ts +91 -0
  55. package/dist/effect/services/file-manager-service.d.ts.map +1 -0
  56. package/dist/effect/services/file-manager-service.js +215 -0
  57. package/dist/effect/services/file-manager-service.js.map +1 -0
  58. package/dist/effect/utils.d.ts +118 -0
  59. package/dist/effect/utils.d.ts.map +1 -0
  60. package/dist/effect/utils.js +186 -0
  61. package/dist/effect/utils.js.map +1 -0
  62. package/dist/error.js.map +1 -1
  63. package/dist/index.d.ts +3 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +3 -1
  66. package/dist/index.js.map +1 -1
  67. package/dist/playback/node-playback-strategy.d.ts.map +1 -1
  68. package/dist/playback/node-playback-strategy.js +2 -6
  69. package/dist/playback/node-playback-strategy.js.map +1 -1
  70. package/dist/player.d.ts +110 -0
  71. package/dist/player.d.ts.map +1 -0
  72. package/dist/player.js +183 -0
  73. package/dist/player.js.map +1 -0
  74. package/dist/queue/audio-player.d.ts +44 -0
  75. package/dist/queue/audio-player.d.ts.map +1 -0
  76. package/dist/queue/audio-player.js +344 -0
  77. package/dist/queue/audio-player.js.map +1 -0
  78. package/dist/queue/file-manager.js +9 -9
  79. package/dist/queue/file-manager.js.map +1 -1
  80. package/dist/queue/manager.d.ts +134 -0
  81. package/dist/queue/manager.d.ts.map +1 -0
  82. package/dist/queue/manager.js +564 -0
  83. package/dist/queue/manager.js.map +1 -0
  84. package/dist/queue/queue-service.d.ts.map +1 -1
  85. package/dist/queue/queue-service.js +20 -6
  86. package/dist/queue/queue-service.js.map +1 -1
  87. package/dist/queue/types.d.ts +3 -1
  88. package/dist/queue/types.d.ts.map +1 -1
  89. package/dist/queue/types.js.map +1 -1
  90. package/dist/services/dictionary-service.d.ts +35 -0
  91. package/dist/services/dictionary-service.d.ts.map +1 -0
  92. package/dist/services/dictionary-service.js +188 -0
  93. package/dist/services/dictionary-service.js.map +1 -0
  94. package/dist/services/speech-service.d.ts +43 -0
  95. package/dist/services/speech-service.d.ts.map +1 -0
  96. package/dist/services/speech-service.js +236 -0
  97. package/dist/services/speech-service.js.map +1 -0
  98. package/dist/shared-queue-manager.d.ts +119 -0
  99. package/dist/shared-queue-manager.d.ts.map +1 -0
  100. package/dist/shared-queue-manager.js +487 -0
  101. package/dist/shared-queue-manager.js.map +1 -0
  102. package/dist/state/queue-state-machine.d.ts.map +1 -1
  103. package/dist/state/queue-state-machine.js +13 -0
  104. package/dist/state/queue-state-machine.js.map +1 -1
  105. package/dist/state/types.d.ts +2 -0
  106. package/dist/state/types.d.ts.map +1 -1
  107. package/dist/state/types.js.map +1 -1
  108. package/dist/types.d.ts +28 -0
  109. package/dist/types.d.ts.map +1 -1
  110. package/dist/utils.d.ts +16 -0
  111. package/dist/utils.d.ts.map +1 -1
  112. package/dist/utils.js +36 -0
  113. package/dist/utils.js.map +1 -1
  114. package/package.json +1 -1
@@ -0,0 +1,236 @@
1
+ import { handleError } from '../error.js';
2
+ import { downloadBlob, isBrowser, splitText } from '../utils.js';
3
+ export class SpeechService {
4
+ api;
5
+ queueService;
6
+ config;
7
+ constructor(api, queueService, config) {
8
+ this.api = api;
9
+ this.queueService = queueService;
10
+ this.config = config;
11
+ }
12
+ async speak(input, options = {}) {
13
+ try {
14
+ const speaker = options.speaker ?? this.config.defaultSpeaker;
15
+ const speed = options.speedScale ?? this.config.defaultSpeedScale;
16
+ const segments = this.normalizeInput(input, speaker);
17
+ if (segments.length === 0) {
18
+ return this.createSpeakResult('error', segments, 'Text is empty');
19
+ }
20
+ const playbackOptions = this.buildPlaybackOptions(options);
21
+ if (playbackOptions.immediate === true) {
22
+ await this.queueService.clearQueue();
23
+ }
24
+ await this.enqueueSegmentsWithPriority(segments, options, speed, playbackOptions);
25
+ return this.createSpeakResult(this.getResultStatus(playbackOptions), segments);
26
+ }
27
+ catch (error) {
28
+ return this.createSpeakResult('error', [], error instanceof Error ? error.message : String(error));
29
+ }
30
+ }
31
+ async generateQuery(text, speaker, speedScale) {
32
+ try {
33
+ const speakerId = this.getSpeakerId(speaker);
34
+ const query = await this.api.generateQuery(text, speakerId);
35
+ query.speedScale = this.getSpeedScale(speedScale);
36
+ if (this.config.defaultVolumeScale !== undefined) {
37
+ query.volumeScale = this.config.defaultVolumeScale;
38
+ }
39
+ if (this.config.defaultPitchScale !== undefined) {
40
+ query.pitchScale = this.config.defaultPitchScale;
41
+ }
42
+ if (this.config.defaultPrePhonemeLength !== undefined) {
43
+ query.prePhonemeLength = this.config.defaultPrePhonemeLength;
44
+ }
45
+ if (this.config.defaultPostPhonemeLength !== undefined) {
46
+ query.postPhonemeLength = this.config.defaultPostPhonemeLength;
47
+ }
48
+ return query;
49
+ }
50
+ catch (error) {
51
+ throw handleError('クエリ生成中にエラーが発生しました', error);
52
+ }
53
+ }
54
+ async generateAudioFile(textOrQuery, outputPath, speaker, speedScale) {
55
+ try {
56
+ const speakerId = this.getSpeakerId(speaker);
57
+ const speed = this.getSpeedScale(speedScale);
58
+ const fileManager = this.queueService.getFileManager();
59
+ if (isBrowser()) {
60
+ const filename = outputPath ||
61
+ (typeof textOrQuery === 'string'
62
+ ? `voice-${textOrQuery.substring(0, 10).replace(/[^a-zA-Z0-9]/g, '_')}-${Date.now()}.wav`
63
+ : `voice-${Date.now()}.wav`);
64
+ const query = typeof textOrQuery === 'string' ? await this.generateQuery(textOrQuery, speakerId) : { ...textOrQuery };
65
+ query.speedScale = speed;
66
+ const audioData = await this.api.synthesize(query, speakerId);
67
+ return await downloadBlob(audioData, filename);
68
+ }
69
+ if (typeof textOrQuery === 'string') {
70
+ const query = await this.generateQuery(textOrQuery, speakerId);
71
+ query.speedScale = speed;
72
+ const audioData = await this.api.synthesize(query, speakerId);
73
+ if (!outputPath) {
74
+ return await fileManager.saveTempAudioFile(audioData);
75
+ }
76
+ return await fileManager.saveAudioFile(audioData, outputPath);
77
+ }
78
+ const query = { ...textOrQuery, speedScale: speed };
79
+ const audioData = await this.api.synthesize(query, speakerId);
80
+ if (!outputPath) {
81
+ return await fileManager.saveTempAudioFile(audioData);
82
+ }
83
+ return await fileManager.saveAudioFile(audioData, outputPath);
84
+ }
85
+ catch (error) {
86
+ throw handleError('音声ファイル生成中にエラーが発生しました', error);
87
+ }
88
+ }
89
+ async enqueueAudioGeneration(input, options = {}) {
90
+ try {
91
+ const speed = options.speedScale ?? this.config.defaultSpeedScale;
92
+ const playbackOptions = this.buildPlaybackOptions(options);
93
+ if (playbackOptions.immediate === true) {
94
+ await this.queueService.clearQueue();
95
+ }
96
+ if (typeof input === 'object' && !Array.isArray(input) && 'accent_phrases' in input) {
97
+ const speakerId = this.getSpeakerId(options.speaker);
98
+ const query = { ...input };
99
+ this.applyAudioOptions(query, options, speed);
100
+ const { promises } = await this.queueService.enqueueQuery(query, speakerId, {
101
+ ...playbackOptions,
102
+ immediate: false,
103
+ }, '(クエリ再生)');
104
+ await this.waitForRequestedPromises(playbackOptions, promises);
105
+ return this.createSpeakResult(this.getResultStatus(playbackOptions), [
106
+ { text: '(from query)', speaker: speakerId },
107
+ ]);
108
+ }
109
+ const segments = this.normalizeInput(input, options.speaker);
110
+ if (segments.length === 0) {
111
+ return this.createSpeakResult('error', segments, 'Text is empty');
112
+ }
113
+ await this.enqueueSegmentsWithPriority(segments, options, speed, playbackOptions);
114
+ return this.createSpeakResult(this.getResultStatus(playbackOptions), segments);
115
+ }
116
+ catch (error) {
117
+ return this.createSpeakResult('error', [], error instanceof Error ? error.message : String(error));
118
+ }
119
+ }
120
+ normalizeInput(input, defaultSpeaker) {
121
+ if (typeof input === 'string') {
122
+ const segments = splitText(input, this.config.maxSegmentLength);
123
+ return segments.map((text) => ({ text, speaker: defaultSpeaker }));
124
+ }
125
+ if (Array.isArray(input)) {
126
+ if (input.length === 0)
127
+ return [];
128
+ if (typeof input[0] === 'object' && 'text' in input[0]) {
129
+ return input.map((segment) => ({
130
+ text: segment.text,
131
+ speaker: segment.speaker || defaultSpeaker,
132
+ }));
133
+ }
134
+ return input.map((text) => ({ text, speaker: defaultSpeaker }));
135
+ }
136
+ return [];
137
+ }
138
+ getSpeakerId(speaker) {
139
+ return speaker ?? this.config.defaultSpeaker;
140
+ }
141
+ getSpeedScale(speedScale) {
142
+ return speedScale ?? this.config.defaultSpeedScale;
143
+ }
144
+ applyAudioOptions(query, options, speed) {
145
+ query.speedScale = speed;
146
+ if (options.pitchScale !== undefined)
147
+ query.pitchScale = options.pitchScale;
148
+ if (options.intonationScale !== undefined)
149
+ query.intonationScale = options.intonationScale;
150
+ if (options.volumeScale !== undefined)
151
+ query.volumeScale = options.volumeScale;
152
+ if (options.prePhonemeLength !== undefined)
153
+ query.prePhonemeLength = options.prePhonemeLength;
154
+ if (options.postPhonemeLength !== undefined)
155
+ query.postPhonemeLength = options.postPhonemeLength;
156
+ }
157
+ buildPlaybackOptions(options) {
158
+ return {
159
+ immediate: options.immediate ?? this.config.defaultPlaybackOptions.immediate,
160
+ waitForStart: options.waitForStart ?? this.config.defaultPlaybackOptions.waitForStart,
161
+ waitForEnd: options.waitForEnd ?? this.config.defaultPlaybackOptions.waitForEnd,
162
+ };
163
+ }
164
+ getResultStatus(playbackOptions) {
165
+ return playbackOptions.waitForEnd ? 'played' : 'queued';
166
+ }
167
+ async waitForRequestedPromises(playbackOptions, promises) {
168
+ const waitPromises = [];
169
+ if (playbackOptions.waitForStart && promises.start)
170
+ waitPromises.push(promises.start);
171
+ if (playbackOptions.waitForEnd && promises.end)
172
+ waitPromises.push(promises.end);
173
+ if (waitPromises.length > 0) {
174
+ await Promise.all(waitPromises);
175
+ }
176
+ }
177
+ async enqueueSegmentsWithPriority(segments, options, speed, playbackOptions) {
178
+ let firstStartPromise;
179
+ let lastEndPromise;
180
+ const firstSegment = segments[0];
181
+ const firstSpeakerId = this.getSpeakerId(firstSegment.speaker);
182
+ const firstQuery = await this.generateQuery(firstSegment.text, firstSpeakerId);
183
+ this.applyAudioOptions(firstQuery, options, speed);
184
+ const { promises: firstPromises } = await this.queueService.enqueueQuery(firstQuery, firstSpeakerId, {
185
+ ...playbackOptions,
186
+ immediate: false,
187
+ waitForStart: playbackOptions.waitForStart,
188
+ waitForEnd: playbackOptions.waitForEnd,
189
+ }, firstSegment.text);
190
+ if (firstPromises.start) {
191
+ firstStartPromise = firstPromises.start;
192
+ }
193
+ if (firstPromises.end) {
194
+ lastEndPromise = firstPromises.end;
195
+ }
196
+ for (let i = 1; i < segments.length; i++) {
197
+ const segment = segments[i];
198
+ const speakerId = this.getSpeakerId(segment.speaker);
199
+ const query = await this.generateQuery(segment.text, speakerId);
200
+ this.applyAudioOptions(query, options, speed);
201
+ const isLastSegment = i === segments.length - 1;
202
+ const { promises: segmentPromises } = await this.queueService.enqueueQuery(query, speakerId, {
203
+ ...playbackOptions,
204
+ immediate: false,
205
+ waitForStart: false,
206
+ waitForEnd: isLastSegment ? playbackOptions.waitForEnd : false,
207
+ }, segment.text);
208
+ if (isLastSegment && segmentPromises.end) {
209
+ lastEndPromise = segmentPromises.end;
210
+ }
211
+ }
212
+ await this.waitForRequestedPromises(playbackOptions, {
213
+ start: firstStartPromise,
214
+ end: lastEndPromise,
215
+ });
216
+ }
217
+ createSpeakResult(status, segments, errorMessage) {
218
+ const isStreaming = this.queueService.isStreamingEnabled();
219
+ const textPreview = this.createTextPreview(segments, 30);
220
+ return {
221
+ status,
222
+ mode: isStreaming ? 'streaming' : 'file',
223
+ textPreview,
224
+ segmentCount: segments.length,
225
+ errorMessage,
226
+ };
227
+ }
228
+ createTextPreview(segments, maxLength) {
229
+ const fullText = segments.map((segment) => segment.text).join(' ');
230
+ if (fullText.length <= maxLength) {
231
+ return fullText;
232
+ }
233
+ return `${fullText.substring(0, maxLength - 3)}...`;
234
+ }
235
+ }
236
+ //# sourceMappingURL=speech-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speech-service.js","sourceRoot":"","sources":["../../src/services/speech-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import { AudioQuery, PlaybackOptions } from "./types";
2
+ import { QueueItem, QueueItemStatus, QueueEventType, QueueEventListener, QueueManager, VoicevoxApiLike } from "./queue/types";
3
+ import { AudioFileManager } from "./queue/file-manager";
4
+ /**
5
+ * 複数のVoicevoxClientインスタンス間で共有されるキューマネージャー
6
+ * 各エンジン固有のAPI呼び出しを受け取り、統一キューで管理する
7
+ */
8
+ export declare class SharedQueueManager implements QueueManager {
9
+ private queue;
10
+ private isPlaying;
11
+ private isPaused;
12
+ private prefetchSize;
13
+ private currentPlayingItem;
14
+ private immediatePlayIntervals;
15
+ private fileManager;
16
+ private eventManager;
17
+ private audioPlayer;
18
+ private immediatePlayer;
19
+ /**
20
+ * コンストラクタ
21
+ * @param prefetchSize 事前生成するアイテム数
22
+ */
23
+ constructor(prefetchSize?: number);
24
+ /**
25
+ * キューに新しいテキストを追加(オプション付き)
26
+ * エンジン情報とAPIインスタンスを指定して音声生成を行う
27
+ */
28
+ enqueueTextWithOptions(text: string, speaker: number, engineName: string, apiInstance: VoicevoxApiLike, options?: PlaybackOptions): Promise<{
29
+ item: QueueItem;
30
+ promises: {
31
+ start?: Promise<void>;
32
+ end?: Promise<void>;
33
+ };
34
+ }>;
35
+ /**
36
+ * キューに音声合成用クエリを追加(オプション付き)
37
+ */
38
+ enqueueQueryWithOptions(query: AudioQuery, speaker: number, engineName: string, apiInstance: VoicevoxApiLike, options?: PlaybackOptions): Promise<{
39
+ item: QueueItem;
40
+ promises: {
41
+ start?: Promise<void>;
42
+ end?: Promise<void>;
43
+ };
44
+ }>;
45
+ /**
46
+ * 互換性のためのメソッド - SharedQueueManagerでは使用しない
47
+ */
48
+ enqueueText(text: string, speaker: number): Promise<QueueItem>;
49
+ /**
50
+ * 互換性のためのメソッド - SharedQueueManagerでは使用しない
51
+ */
52
+ enqueueQuery(query: AudioQuery, speaker: number): Promise<QueueItem>;
53
+ /**
54
+ * クエリから音声データを生成
55
+ */
56
+ private generateAudioFromQuery;
57
+ /**
58
+ * キューからアイテムを削除
59
+ */
60
+ removeItem(itemId: string): Promise<boolean>;
61
+ /**
62
+ * キューをクリア
63
+ */
64
+ clearQueue(): Promise<void>;
65
+ startPlayback(): Promise<void>;
66
+ pausePlayback(): Promise<void>;
67
+ resumePlayback(): Promise<void>;
68
+ /**
69
+ * 次のアイテムを再生する
70
+ */
71
+ playNext(): Promise<void>;
72
+ /**
73
+ * イベントリスナーを追加
74
+ */
75
+ addEventListener(event: QueueEventType, listener: QueueEventListener): void;
76
+ /**
77
+ * イベントリスナーを削除
78
+ */
79
+ removeEventListener(event: QueueEventType, listener: QueueEventListener): void;
80
+ /**
81
+ * 現在のキュー内のアイテムを取得
82
+ */
83
+ getQueue(): QueueItem[];
84
+ /**
85
+ * 特定のアイテムの状態を取得
86
+ */
87
+ getItemStatus(itemId: string): QueueItemStatus | null;
88
+ /**
89
+ * 即時再生処理
90
+ * キューを経由せず直接音声を再生
91
+ */
92
+ private playImmediately;
93
+ /**
94
+ * キュー処理実行
95
+ * キューにある音声の生成と再生を処理
96
+ */
97
+ private processQueue;
98
+ /**
99
+ * 次のアイテムの音声を事前に生成 (プリフェッチ)
100
+ */
101
+ private prefetchAudio;
102
+ /**
103
+ * アイテムの状態を更新し、イベントを発火
104
+ */
105
+ private updateItemStatus;
106
+ /**
107
+ * バイナリーデータを一時ファイルに保存
108
+ */
109
+ saveTempAudioFile(audioData: ArrayBuffer): Promise<string>;
110
+ /**
111
+ * FileManagerインスタンスを取得
112
+ */
113
+ getFileManager(): AudioFileManager;
114
+ /**
115
+ * 全てのリソースをクリーンアップ
116
+ */
117
+ cleanup(): void;
118
+ }
119
+ //# sourceMappingURL=shared-queue-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-queue-manager.d.ts","sourceRoot":"","sources":["../src/shared-queue-manager.ts"],"names":[],"mappings":"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"}