@kajidog/voicevox-client 0.4.1 → 0.5.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 (78) hide show
  1. package/LICENSE +14 -14
  2. package/dist/api.d.ts +36 -2
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js +76 -0
  5. package/dist/api.js.map +1 -1
  6. package/dist/client.d.ts +1 -1
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +6 -0
  9. package/dist/client.js.map +1 -1
  10. package/dist/effect/config.d.ts +43 -0
  11. package/dist/effect/config.d.ts.map +1 -0
  12. package/dist/effect/config.js +45 -0
  13. package/dist/effect/config.js.map +1 -0
  14. package/dist/effect/context.d.ts +33 -0
  15. package/dist/effect/context.d.ts.map +1 -0
  16. package/dist/effect/context.js +10 -0
  17. package/dist/effect/context.js.map +1 -0
  18. package/dist/effect/errors.d.ts +130 -0
  19. package/dist/effect/errors.d.ts.map +1 -0
  20. package/dist/effect/errors.js +121 -0
  21. package/dist/effect/errors.js.map +1 -0
  22. package/dist/effect/index.d.ts +34 -0
  23. package/dist/effect/index.d.ts.map +1 -0
  24. package/dist/effect/index.js +67 -0
  25. package/dist/effect/index.js.map +1 -0
  26. package/dist/effect/queue-manager.d.ts +34 -0
  27. package/dist/effect/queue-manager.d.ts.map +1 -0
  28. package/dist/effect/queue-manager.js +59 -0
  29. package/dist/effect/queue-manager.js.map +1 -0
  30. package/dist/effect/services/api-service.d.ts +58 -0
  31. package/dist/effect/services/api-service.d.ts.map +1 -0
  32. package/dist/effect/services/api-service.js +90 -0
  33. package/dist/effect/services/api-service.js.map +1 -0
  34. package/dist/effect/services/audio-generator-service.d.ts +78 -0
  35. package/dist/effect/services/audio-generator-service.d.ts.map +1 -0
  36. package/dist/effect/services/audio-generator-service.js +187 -0
  37. package/dist/effect/services/audio-generator-service.js.map +1 -0
  38. package/dist/effect/services/audio-player-service.d.ts +101 -0
  39. package/dist/effect/services/audio-player-service.d.ts.map +1 -0
  40. package/dist/effect/services/audio-player-service.js +297 -0
  41. package/dist/effect/services/audio-player-service.js.map +1 -0
  42. package/dist/effect/services/event-manager-service.d.ts +96 -0
  43. package/dist/effect/services/event-manager-service.d.ts.map +1 -0
  44. package/dist/effect/services/event-manager-service.js +208 -0
  45. package/dist/effect/services/event-manager-service.js.map +1 -0
  46. package/dist/effect/services/file-manager-service.d.ts +91 -0
  47. package/dist/effect/services/file-manager-service.d.ts.map +1 -0
  48. package/dist/effect/services/file-manager-service.js +215 -0
  49. package/dist/effect/services/file-manager-service.js.map +1 -0
  50. package/dist/effect/utils.d.ts +118 -0
  51. package/dist/effect/utils.d.ts.map +1 -0
  52. package/dist/effect/utils.js +186 -0
  53. package/dist/effect/utils.js.map +1 -0
  54. package/dist/error.js.map +1 -1
  55. package/dist/player.d.ts +110 -0
  56. package/dist/player.d.ts.map +1 -0
  57. package/dist/player.js +183 -0
  58. package/dist/player.js.map +1 -0
  59. package/dist/queue/audio-player.d.ts +44 -0
  60. package/dist/queue/audio-player.d.ts.map +1 -0
  61. package/dist/queue/audio-player.js +344 -0
  62. package/dist/queue/audio-player.js.map +1 -0
  63. package/dist/queue/file-manager.js +9 -9
  64. package/dist/queue/manager.d.ts +134 -0
  65. package/dist/queue/manager.d.ts.map +1 -0
  66. package/dist/queue/manager.js +564 -0
  67. package/dist/queue/manager.js.map +1 -0
  68. package/dist/queue/queue-service.d.ts.map +1 -1
  69. package/dist/queue/queue-service.js +16 -4
  70. package/dist/queue/queue-service.js.map +1 -1
  71. package/dist/shared-queue-manager.d.ts +119 -0
  72. package/dist/shared-queue-manager.d.ts.map +1 -0
  73. package/dist/shared-queue-manager.js +487 -0
  74. package/dist/shared-queue-manager.js.map +1 -0
  75. package/dist/state/types.js.map +1 -1
  76. package/dist/types.d.ts +28 -0
  77. package/dist/types.d.ts.map +1 -1
  78. package/package.json +1 -1
@@ -0,0 +1,564 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VoicevoxQueueManager = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const utils_1 = require("../utils");
6
+ const audio_generator_1 = require("./audio-generator");
7
+ const audio_player_1 = require("./audio-player");
8
+ const event_manager_1 = require("./event-manager");
9
+ const file_manager_1 = require("./file-manager");
10
+ const types_1 = require("./types");
11
+ /**
12
+ * VOICEVOXキュー管理クラス
13
+ * 音声合成タスクのキュー管理と実行を担当
14
+ */
15
+ class VoicevoxQueueManager {
16
+ queue = [];
17
+ isPlaying = false;
18
+ isPaused = false;
19
+ prefetchSize = 2;
20
+ currentPlayingItem = null;
21
+ immediatePlayIntervals = new Set();
22
+ // 依存コンポーネント
23
+ api;
24
+ fileManager;
25
+ eventManager;
26
+ audioGenerator;
27
+ audioPlayer;
28
+ immediatePlayer; // 即時再生用の専用プレイヤー
29
+ /**
30
+ * コンストラクタ
31
+ * @param apiInstance VOICEVOX APIクライアントのインスタンス
32
+ * @param prefetchSize 事前生成するアイテム数
33
+ */
34
+ constructor(apiInstance, prefetchSize = 2) {
35
+ this.api = apiInstance;
36
+ this.prefetchSize = prefetchSize;
37
+ // 依存コンポーネントを初期化
38
+ this.fileManager = new file_manager_1.AudioFileManager();
39
+ this.eventManager = new event_manager_1.EventManager();
40
+ this.audioGenerator = new audio_generator_1.AudioGenerator(this.api, this.fileManager);
41
+ this.audioPlayer = new audio_player_1.AudioPlayer();
42
+ this.immediatePlayer = new audio_player_1.AudioPlayer(); // 即時再生用プレイヤー
43
+ }
44
+ /**
45
+ * キューに新しいテキストを追加(オプション付き)
46
+ */
47
+ async enqueueTextWithOptions(text, speaker, options) {
48
+ const playbackPromiseResolvers = {};
49
+ const promises = {};
50
+ // 待機オプションに応じてPromiseを作成
51
+ if (options?.waitForStart) {
52
+ promises.start = new Promise((resolve) => {
53
+ playbackPromiseResolvers.startResolve = resolve;
54
+ });
55
+ }
56
+ if (options?.waitForEnd) {
57
+ promises.end = new Promise((resolve) => {
58
+ playbackPromiseResolvers.endResolve = resolve;
59
+ });
60
+ }
61
+ const item = {
62
+ id: (0, uuid_1.v4)(),
63
+ text: text,
64
+ speaker,
65
+ status: types_1.QueueItemStatus.PENDING,
66
+ createdAt: new Date(),
67
+ options: options || {},
68
+ playbackPromiseResolvers,
69
+ };
70
+ this.queue.push(item);
71
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_ADDED, item);
72
+ try {
73
+ // 非同期で音声生成を開始
74
+ this.updateItemStatus(item, types_1.QueueItemStatus.GENERATING);
75
+ const query = await this.audioGenerator.generateQuery(text, speaker);
76
+ item.query = query;
77
+ await this.audioGenerator.generateAudioFromQuery(item, this.updateItemStatus.bind(this));
78
+ // immediateオプションがtrueの場合は即座に再生
79
+ if (options?.immediate === true) {
80
+ // 即時再生の処理
81
+ this.playImmediately(item);
82
+ }
83
+ else if (options?.immediate !== false) {
84
+ // immediateが未設定またはfalse以外の場合は通常のキュー処理
85
+ this.processQueue();
86
+ }
87
+ return { item, promises };
88
+ }
89
+ catch (error) {
90
+ // エラー発生時の処理
91
+ item.error = error instanceof Error ? error : new Error(String(error));
92
+ this.updateItemStatus(item, types_1.QueueItemStatus.ERROR);
93
+ this.eventManager.emitEvent(types_1.QueueEventType.ERROR, item);
94
+ // エラー発生時はキューからアイテムを削除
95
+ const itemIndex = this.queue.findIndex((i) => i.id === item.id);
96
+ if (itemIndex !== -1) {
97
+ this.queue.splice(itemIndex, 1);
98
+ }
99
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_REMOVED, item);
100
+ throw error; // エラーを再スロー
101
+ }
102
+ }
103
+ /**
104
+ * キューに新しいテキストを追加(従来の互換性維持)
105
+ */
106
+ async enqueueText(text, speaker) {
107
+ const item = {
108
+ id: (0, uuid_1.v4)(),
109
+ text: text,
110
+ speaker,
111
+ status: types_1.QueueItemStatus.PENDING,
112
+ createdAt: new Date(),
113
+ };
114
+ this.queue.push(item);
115
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_ADDED, item);
116
+ try {
117
+ // 非同期で音声生成を開始
118
+ this.updateItemStatus(item, types_1.QueueItemStatus.GENERATING);
119
+ const query = await this.audioGenerator.generateQuery(text, speaker);
120
+ item.query = query;
121
+ await this.audioGenerator.generateAudioFromQuery(item, this.updateItemStatus.bind(this));
122
+ return item;
123
+ }
124
+ catch (error) {
125
+ // エラー発生時の処理
126
+ item.error = error instanceof Error ? error : new Error(String(error));
127
+ this.updateItemStatus(item, types_1.QueueItemStatus.ERROR);
128
+ this.eventManager.emitEvent(types_1.QueueEventType.ERROR, item);
129
+ // エラー発生時はキューからアイテムを削除
130
+ const itemIndex = this.queue.findIndex((i) => i.id === item.id);
131
+ if (itemIndex !== -1) {
132
+ this.queue.splice(itemIndex, 1);
133
+ }
134
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_REMOVED, item);
135
+ throw error; // エラーを再スロー
136
+ }
137
+ }
138
+ /**
139
+ * キューに音声合成用クエリを追加(オプション付き)
140
+ */
141
+ async enqueueQueryWithOptions(query, speaker, options) {
142
+ const playbackPromiseResolvers = {};
143
+ const promises = {};
144
+ // 待機オプションに応じてPromiseを作成
145
+ if (options?.waitForStart) {
146
+ promises.start = new Promise((resolve) => {
147
+ playbackPromiseResolvers.startResolve = resolve;
148
+ });
149
+ }
150
+ if (options?.waitForEnd) {
151
+ promises.end = new Promise((resolve) => {
152
+ playbackPromiseResolvers.endResolve = resolve;
153
+ });
154
+ }
155
+ const item = {
156
+ id: (0, uuid_1.v4)(),
157
+ text: '(クエリから生成)',
158
+ speaker,
159
+ status: types_1.QueueItemStatus.PENDING,
160
+ createdAt: new Date(),
161
+ query,
162
+ options: options || {},
163
+ playbackPromiseResolvers,
164
+ };
165
+ this.queue.push(item);
166
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_ADDED, item);
167
+ // 非同期で音声生成を開始
168
+ this.audioGenerator.generateAudioFromQuery(item, this.updateItemStatus.bind(this)).catch((e) => {
169
+ console.error('Unhandled error during generateAudioFromQuery:', e);
170
+ });
171
+ // immediateオプションがtrueの場合は即座に再生
172
+ if (options?.immediate === true) {
173
+ // 即時再生の処理
174
+ this.playImmediately(item);
175
+ }
176
+ else if (options?.immediate !== false) {
177
+ // immediateが未設定またはfalse以外の場合は通常のキュー処理
178
+ this.processQueue();
179
+ }
180
+ return { item, promises };
181
+ }
182
+ /**
183
+ * キューに音声合成用クエリを追加(従来の互換性維持)
184
+ * @param query 音声合成用クエリ
185
+ * @param speaker 話者ID
186
+ * @returns 作成されたキューアイテム
187
+ */
188
+ async enqueueQuery(query, speaker) {
189
+ const item = {
190
+ id: (0, uuid_1.v4)(),
191
+ text: '(クエリから生成)',
192
+ speaker,
193
+ status: types_1.QueueItemStatus.PENDING,
194
+ createdAt: new Date(),
195
+ query,
196
+ };
197
+ this.queue.push(item);
198
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_ADDED, item);
199
+ // 非同期で音声生成を開始
200
+ this.audioGenerator.generateAudioFromQuery(item, this.updateItemStatus.bind(this)).catch((e) => {
201
+ console.error('Unhandled error during generateAudioFromQuery:', e);
202
+ });
203
+ // キュー処理開始
204
+ this.processQueue();
205
+ return item;
206
+ }
207
+ /**
208
+ * キューからアイテムを削除
209
+ * @param itemId 削除するアイテムのID
210
+ * @returns 削除に成功したかどうか
211
+ */
212
+ async removeItem(itemId) {
213
+ const index = this.queue.findIndex((item) => item.id === itemId);
214
+ if (index === -1) {
215
+ return false;
216
+ }
217
+ const item = this.queue[index];
218
+ // 一時ファイルがあれば削除
219
+ if (item.tempFile) {
220
+ await this.fileManager.deleteTempFile(item.tempFile);
221
+ }
222
+ // キューから削除
223
+ const removedItem = this.queue.splice(index, 1)[0];
224
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_REMOVED, removedItem);
225
+ // もし削除されたアイテムが再生中だったら停止
226
+ if (this.currentPlayingItem?.id === itemId) {
227
+ // TODO: 再生停止処理
228
+ this.currentPlayingItem = null;
229
+ }
230
+ return true;
231
+ }
232
+ /**
233
+ * キューをクリア
234
+ */
235
+ async clearQueue() {
236
+ // 削除処理中にキューが変更される可能性があるので、先にIDリストを取得
237
+ const itemIdsToDelete = this.queue.map((item) => item.id);
238
+ // 各アイテムに対して削除処理(一時ファイル削除含む)を実行
239
+ await Promise.all(itemIdsToDelete.map((id) => this.removeItem(id)));
240
+ // 念のためキューを空にする(removeItemで空になっているはずだが)
241
+ this.queue = [];
242
+ // 再生状態をリセット
243
+ this.isPlaying = false;
244
+ this.isPaused = false;
245
+ if (this.currentPlayingItem) {
246
+ // TODO: 再生停止処理
247
+ this.currentPlayingItem = null;
248
+ }
249
+ this.eventManager.emitEvent(types_1.QueueEventType.QUEUE_CLEARED);
250
+ }
251
+ // --- 再生制御 ---
252
+ async startPlayback() {
253
+ if (!this.isPlaying) {
254
+ this.isPlaying = true;
255
+ this.isPaused = false;
256
+ this.eventManager.emitEvent(types_1.QueueEventType.PLAYBACK_STARTED);
257
+ this.processQueue();
258
+ }
259
+ }
260
+ async pausePlayback() {
261
+ if (this.isPlaying && !this.isPaused) {
262
+ this.isPaused = true;
263
+ // 再生中のアイテムがあれば状態をPAUSEDに変更
264
+ if (this.currentPlayingItem) {
265
+ this.updateItemStatus(this.currentPlayingItem, types_1.QueueItemStatus.PAUSED);
266
+ }
267
+ this.eventManager.emitEvent(types_1.QueueEventType.PLAYBACK_PAUSED);
268
+ }
269
+ }
270
+ async resumePlayback() {
271
+ if (this.isPlaying && this.isPaused) {
272
+ this.isPaused = false;
273
+ // 一時停止中のアイテムがあれば状態をPLAYINGに戻す
274
+ if (this.currentPlayingItem) {
275
+ this.updateItemStatus(this.currentPlayingItem, types_1.QueueItemStatus.PLAYING);
276
+ }
277
+ this.eventManager.emitEvent(types_1.QueueEventType.PLAYBACK_RESUMED);
278
+ this.processQueue();
279
+ }
280
+ }
281
+ /**
282
+ * 次のアイテムを再生する
283
+ * 最初のREADY状態のアイテムを再生します
284
+ */
285
+ async playNext() {
286
+ if (!this.isPlaying) {
287
+ this.isPlaying = true;
288
+ }
289
+ this.isPaused = false;
290
+ // キュー処理を開始
291
+ this.processQueue();
292
+ }
293
+ // --- 再生制御ここまで ---
294
+ /**
295
+ * イベントリスナーを追加
296
+ */
297
+ addEventListener(event, listener) {
298
+ this.eventManager.addEventListener(event, listener);
299
+ }
300
+ /**
301
+ * イベントリスナーを削除
302
+ */
303
+ removeEventListener(event, listener) {
304
+ this.eventManager.removeEventListener(event, listener);
305
+ }
306
+ /**
307
+ * 現在のキュー内のアイテムを取得
308
+ */
309
+ getQueue() {
310
+ // 不変性を保つためにコピーを返す
311
+ return [...this.queue];
312
+ }
313
+ /**
314
+ * 特定のアイテムの状態を取得
315
+ */
316
+ getItemStatus(itemId) {
317
+ const item = this.queue.find((item) => item.id === itemId);
318
+ return item ? item.status : null;
319
+ }
320
+ /**
321
+ * 即時再生処理
322
+ * キューを経由せず直接音声を再生
323
+ * @param item 再生するアイテム
324
+ */
325
+ async playImmediately(item) {
326
+ // 音声ファイルが生成されるまで待機
327
+ const checkInterval = setInterval(async () => {
328
+ // ストリーミングモードの場合はaudioDataがあればOK、そうでなければtempFileが必要
329
+ const isReady = item.status === types_1.QueueItemStatus.READY && (item.audioData || item.tempFile);
330
+ if (isReady) {
331
+ clearInterval(checkInterval);
332
+ this.immediatePlayIntervals.delete(checkInterval);
333
+ // 再生開始の通知
334
+ if (item.playbackPromiseResolvers?.startResolve) {
335
+ item.playbackPromiseResolvers.startResolve();
336
+ }
337
+ try {
338
+ // 即時再生用プレイヤーで再生
339
+ this.updateItemStatus(item, types_1.QueueItemStatus.PLAYING);
340
+ // ストリーミング再生が可能かチェック
341
+ if (item.audioData && this.immediatePlayer.isStreamingEnabled()) {
342
+ await this.immediatePlayer.playAudioFromBuffer(item.audioData);
343
+ }
344
+ else if (item.tempFile) {
345
+ await this.immediatePlayer.playAudio(item.tempFile);
346
+ }
347
+ else {
348
+ throw new Error('再生対象の音声データまたは一時ファイルが見つかりません');
349
+ }
350
+ // 再生完了
351
+ this.updateItemStatus(item, types_1.QueueItemStatus.DONE);
352
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_COMPLETED, item);
353
+ // 再生終了の通知
354
+ if (item.playbackPromiseResolvers?.endResolve) {
355
+ item.playbackPromiseResolvers.endResolve();
356
+ }
357
+ // 一時ファイルを削除
358
+ if (item.tempFile) {
359
+ await this.fileManager.deleteTempFile(item.tempFile);
360
+ }
361
+ // キューから削除
362
+ const itemIndex = this.queue.findIndex((i) => i.id === item.id);
363
+ if (itemIndex !== -1) {
364
+ this.queue.splice(itemIndex, 1);
365
+ }
366
+ }
367
+ catch (error) {
368
+ console.error('Error playing audio immediately:', error);
369
+ this.updateItemStatus(item, types_1.QueueItemStatus.ERROR);
370
+ item.error = error instanceof Error ? error : new Error(String(error));
371
+ this.eventManager.emitEvent(types_1.QueueEventType.ERROR, item);
372
+ // エラー時もキューから削除
373
+ const itemIndex = this.queue.findIndex((i) => i.id === item.id);
374
+ if (itemIndex !== -1) {
375
+ this.queue.splice(itemIndex, 1);
376
+ }
377
+ }
378
+ }
379
+ else if (item.status === types_1.QueueItemStatus.ERROR) {
380
+ clearInterval(checkInterval);
381
+ this.immediatePlayIntervals.delete(checkInterval);
382
+ // エラー時の処理は既に音声生成時に行われているはず
383
+ }
384
+ }, 50); // 50msごとにチェック
385
+ this.immediatePlayIntervals.add(checkInterval);
386
+ }
387
+ /**
388
+ * キュー処理実行
389
+ * キューにある音声の生成と再生を処理
390
+ */
391
+ async processQueue() {
392
+ // 再生を停止中またはポーズ中は何もしない
393
+ if (!this.isPlaying || this.isPaused) {
394
+ return;
395
+ }
396
+ // 現在再生中のアイテムがあれば再生中のまま
397
+ if (this.currentPlayingItem?.status === types_1.QueueItemStatus.PLAYING) {
398
+ return;
399
+ }
400
+ // 前回再生したアイテムの後処理
401
+ if (this.currentPlayingItem && this.currentPlayingItem.status === types_1.QueueItemStatus.DONE) {
402
+ // 再生完了したアイテムの一時ファイルを削除
403
+ if (this.currentPlayingItem.tempFile) {
404
+ await this.fileManager.deleteTempFile(this.currentPlayingItem.tempFile);
405
+ this.currentPlayingItem.tempFile = undefined; // 削除後に参照を消す
406
+ }
407
+ this.currentPlayingItem = null;
408
+ }
409
+ // 再生可能なアイテムを探す
410
+ const nextItem = this.queue.find((item) => item.status === types_1.QueueItemStatus.READY);
411
+ if (!nextItem) {
412
+ // 再生可能なアイテムがなければ、事前生成を開始して終了
413
+ this.prefetchAudio();
414
+ return;
415
+ }
416
+ this.currentPlayingItem = nextItem;
417
+ this.updateItemStatus(nextItem, types_1.QueueItemStatus.PLAYING);
418
+ // 再生開始の通知(waitForStartオプション対応)
419
+ if (nextItem.playbackPromiseResolvers?.startResolve) {
420
+ nextItem.playbackPromiseResolvers.startResolve();
421
+ }
422
+ try {
423
+ // ストリーミング再生が可能かチェック
424
+ if (nextItem.audioData && this.audioPlayer.isStreamingEnabled()) {
425
+ await this.audioPlayer.playAudioFromBuffer(nextItem.audioData);
426
+ }
427
+ else if (nextItem.tempFile) {
428
+ await this.audioPlayer.playAudio(nextItem.tempFile);
429
+ }
430
+ else {
431
+ throw new Error('再生対象の音声データまたは一時ファイルが見つかりません');
432
+ }
433
+ // 再生完了
434
+ this.updateItemStatus(nextItem, types_1.QueueItemStatus.DONE);
435
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_COMPLETED, nextItem);
436
+ // 再生終了の通知(waitForEndオプション対応)
437
+ if (nextItem.playbackPromiseResolvers?.endResolve) {
438
+ nextItem.playbackPromiseResolvers.endResolve();
439
+ }
440
+ // キューから削除
441
+ const itemIndex = this.queue.findIndex((i) => i.id === nextItem.id);
442
+ if (itemIndex !== -1) {
443
+ this.queue.splice(itemIndex, 1);
444
+ }
445
+ // 続けて次のアイテムを再生
446
+ this.currentPlayingItem = null;
447
+ this.processQueue();
448
+ }
449
+ catch (error) {
450
+ console.error('Error playing audio:', error);
451
+ this.updateItemStatus(nextItem, types_1.QueueItemStatus.ERROR);
452
+ nextItem.error = error instanceof Error ? error : new Error(String(error));
453
+ this.eventManager.emitEvent(types_1.QueueEventType.ERROR, nextItem);
454
+ // エラー発生時もキューからアイテムを削除
455
+ const itemIndex = this.queue.findIndex((i) => i.id === nextItem.id);
456
+ if (itemIndex !== -1) {
457
+ this.queue.splice(itemIndex, 1);
458
+ }
459
+ // エラー発生時でも次のアイテムを再生
460
+ this.currentPlayingItem = null;
461
+ this.processQueue();
462
+ }
463
+ // 次回の音声を事前生成
464
+ this.prefetchAudio();
465
+ }
466
+ /**
467
+ * 次のアイテムの音声を事前に生成 (プリフェッチ)
468
+ * @private
469
+ */
470
+ async prefetchAudio() {
471
+ const pendingItems = this.queue.filter((item) => item.status === types_1.QueueItemStatus.PENDING);
472
+ const processingOrReadyCount = this.queue.filter((item) => item.status === types_1.QueueItemStatus.READY || item.status === types_1.QueueItemStatus.GENERATING).length;
473
+ const prefetchNeeded = this.prefetchSize - processingOrReadyCount;
474
+ if (prefetchNeeded > 0 && pendingItems.length > 0) {
475
+ const itemsToPrefetch = pendingItems.slice(0, prefetchNeeded);
476
+ await Promise.all(itemsToPrefetch.map((item) => {
477
+ if (item.query) {
478
+ return this.audioGenerator
479
+ .generateAudioFromQuery(item, this.updateItemStatus.bind(this))
480
+ .catch((e) => console.error('Prefetch error:', e));
481
+ }
482
+ if (item.text) {
483
+ return this.audioGenerator
484
+ .generateAudio(item, this.updateItemStatus.bind(this))
485
+ .catch((e) => console.error('Prefetch error:', e));
486
+ }
487
+ return Promise.resolve();
488
+ }));
489
+ }
490
+ }
491
+ /**
492
+ * アイテムの状態を更新し、イベントを発火
493
+ * @param item 状態を更新するアイテム
494
+ * @param status 新しい状態
495
+ * @private
496
+ */
497
+ updateItemStatus(item, status) {
498
+ item.status = status;
499
+ // 状態変更イベントを発火
500
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_STATUS_CHANGED, item);
501
+ // READYになったらプリフェッチとキュー処理をトリガー
502
+ if (status === types_1.QueueItemStatus.READY) {
503
+ this.prefetchAudio();
504
+ this.processQueue();
505
+ }
506
+ }
507
+ /**
508
+ * バイナリーデータを一時ファイルに保存
509
+ * @param audioData 音声バイナリーデータ
510
+ * @returns 保存した一時ファイルのパス
511
+ */
512
+ async saveTempAudioFile(audioData) {
513
+ return this.fileManager.saveTempAudioFile(audioData);
514
+ }
515
+ /**
516
+ * AudioGeneratorインスタンスを取得
517
+ * @returns AudioGeneratorインスタンス
518
+ */
519
+ getAudioGenerator() {
520
+ return this.audioGenerator;
521
+ }
522
+ /**
523
+ * FileManagerインスタンスを取得
524
+ * @returns AudioFileManagerインスタンス
525
+ */
526
+ getFileManager() {
527
+ return this.fileManager;
528
+ }
529
+ /**
530
+ * API インスタンスを取得
531
+ * @returns VoicevoxApi インスタンス
532
+ */
533
+ getApi() {
534
+ return this.api;
535
+ }
536
+ /**
537
+ * 全てのリソースをクリーンアップ
538
+ * 使用していないときに呼び出すことで、メモリリークを防止
539
+ */
540
+ cleanup() {
541
+ // すべてのblobURLをリリース
542
+ if ((0, utils_1.isBrowser)()) {
543
+ this.fileManager.releaseAllBlobUrls();
544
+ }
545
+ // 一時ファイルがあれば削除
546
+ for (const item of this.queue) {
547
+ if (item.tempFile) {
548
+ this.fileManager.deleteTempFile(item.tempFile);
549
+ }
550
+ }
551
+ // 即時再生用のインターバルをクリア
552
+ for (const interval of this.immediatePlayIntervals) {
553
+ clearInterval(interval);
554
+ }
555
+ this.immediatePlayIntervals.clear();
556
+ // キューをクリア
557
+ this.queue = [];
558
+ this.isPlaying = false;
559
+ this.isPaused = false;
560
+ this.currentPlayingItem = null;
561
+ }
562
+ }
563
+ exports.VoicevoxQueueManager = VoicevoxQueueManager;
564
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/queue/manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"queue-service.d.ts","sourceRoot":"","sources":["../../src/queue/queue-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queue-service.d.ts","sourceRoot":"","sources":["../../src/queue/queue-service.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,11 @@ export class QueueService {
40
40
  const callbacks = {
41
41
  onItemAdded: (item) => this.emitEvent(QueueEventType.ITEM_ADDED, item),
42
42
  onItemReady: (item) => this.handleItemReady(item),
43
- onItemRemoved: (item) => this.emitEvent(QueueEventType.ITEM_REMOVED, item),
43
+ onItemRemoved: (item) => {
44
+ this.emitEvent(QueueEventType.ITEM_REMOVED, item);
45
+ // アイテム削除によりプリフェッチスロットが空くため、次の生成をトリガー
46
+ this.triggerPrefetch();
47
+ },
44
48
  onPlaybackStart: (item) => this.handlePlaybackStart(item),
45
49
  onPlaybackComplete: (item) => this.emitEvent(QueueEventType.ITEM_COMPLETED, item),
46
50
  onError: (item, error) => {
@@ -296,7 +300,14 @@ export class QueueService {
296
300
  * PrefetchManagerから生成すべきアイテムを取得し、生成を開始する
297
301
  */
298
302
  triggerPrefetch() {
299
- const itemsToGenerate = this.prefetchManager.getItemsToGenerate();
303
+ const prefetchSize = this.prefetchManager.getPrefetchSize();
304
+ const readyCount = this.stateMachine.getAllItems().filter((item) => item.status === QueueItemStatus.READY).length;
305
+ const generatingCount = this.prefetchManager.getGeneratingCount();
306
+ const availableSlots = prefetchSize - readyCount - generatingCount;
307
+ if (availableSlots <= 0) {
308
+ return;
309
+ }
310
+ const itemsToGenerate = this.prefetchManager.getItemsToGenerate().slice(0, availableSlots);
300
311
  for (const itemId of itemsToGenerate) {
301
312
  const item = this.stateMachine.getItem(itemId);
302
313
  if (!item)
@@ -318,9 +329,8 @@ export class QueueService {
318
329
  };
319
330
  const onError = (errorItem, error) => {
320
331
  this.prefetchManager.decrementGenerating();
332
+ // ERROR dispatch → removeFromQueue → onItemRemoved で triggerPrefetch される
321
333
  this.stateMachine.dispatch({ type: 'ERROR', itemId: errorItem.id, error });
322
- // エラー時も次のプリフェッチをトリガー
323
- this.triggerPrefetch();
324
334
  };
325
335
  // AudioGeneratorを使用して生成
326
336
  if (item.query) {
@@ -333,6 +343,8 @@ export class QueueService {
333
343
  }
334
344
  async handlePlaybackStart(item) {
335
345
  this.emitEvent(QueueEventType.PLAYBACK_STARTED, item);
346
+ // READY -> PLAYING で先読みスロットが空くため、次の生成を進める
347
+ this.triggerPrefetch();
336
348
  // 実際の再生を開始
337
349
  const audioSource = this.getAudioSource(item);
338
350
  if (audioSource) {