@kajidog/voicevox-client 0.0.1

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 (66) hide show
  1. package/README.md +161 -0
  2. package/dist/__tests__/queue/manager.test.d.ts +2 -0
  3. package/dist/__tests__/queue/manager.test.d.ts.map +1 -0
  4. package/dist/__tests__/queue/manager.test.js +510 -0
  5. package/dist/__tests__/queue/manager.test.js.map +1 -0
  6. package/dist/api.d.ts +36 -0
  7. package/dist/api.d.ts.map +1 -0
  8. package/dist/api.js +127 -0
  9. package/dist/api.js.map +1 -0
  10. package/dist/client.d.ts +114 -0
  11. package/dist/client.d.ts.map +1 -0
  12. package/dist/client.js +287 -0
  13. package/dist/client.js.map +1 -0
  14. package/dist/error.d.ts +73 -0
  15. package/dist/error.d.ts.map +1 -0
  16. package/dist/error.js +116 -0
  17. package/dist/error.js.map +1 -0
  18. package/dist/index.d.ts +7 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +34 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/player.d.ts +77 -0
  23. package/dist/player.d.ts.map +1 -0
  24. package/dist/player.js +153 -0
  25. package/dist/player.js.map +1 -0
  26. package/dist/queue/__tests__/manager.test.d.ts +2 -0
  27. package/dist/queue/__tests__/manager.test.d.ts.map +1 -0
  28. package/dist/queue/__tests__/manager.test.js +510 -0
  29. package/dist/queue/__tests__/manager.test.js.map +1 -0
  30. package/dist/queue/audio-generator.d.ts +33 -0
  31. package/dist/queue/audio-generator.d.ts.map +1 -0
  32. package/dist/queue/audio-generator.js +100 -0
  33. package/dist/queue/audio-generator.js.map +1 -0
  34. package/dist/queue/audio-player.d.ts +26 -0
  35. package/dist/queue/audio-player.d.ts.map +1 -0
  36. package/dist/queue/audio-player.js +210 -0
  37. package/dist/queue/audio-player.js.map +1 -0
  38. package/dist/queue/event-manager.d.ts +28 -0
  39. package/dist/queue/event-manager.d.ts.map +1 -0
  40. package/dist/queue/event-manager.js +60 -0
  41. package/dist/queue/event-manager.js.map +1 -0
  42. package/dist/queue/file-manager.d.ts +57 -0
  43. package/dist/queue/file-manager.d.ts.map +1 -0
  44. package/dist/queue/file-manager.js +363 -0
  45. package/dist/queue/file-manager.js.map +1 -0
  46. package/dist/queue/index.d.ts +7 -0
  47. package/dist/queue/index.d.ts.map +1 -0
  48. package/dist/queue/index.js +23 -0
  49. package/dist/queue/index.js.map +1 -0
  50. package/dist/queue/manager.d.ts +116 -0
  51. package/dist/queue/manager.d.ts.map +1 -0
  52. package/dist/queue/manager.js +371 -0
  53. package/dist/queue/manager.js.map +1 -0
  54. package/dist/queue/types.d.ts +96 -0
  55. package/dist/queue/types.d.ts.map +1 -0
  56. package/dist/queue/types.js +33 -0
  57. package/dist/queue/types.js.map +1 -0
  58. package/dist/types.d.ts +152 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +3 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/utils.d.ts +32 -0
  63. package/dist/utils.d.ts.map +1 -0
  64. package/dist/utils.js +178 -0
  65. package/dist/utils.js.map +1 -0
  66. package/package.json +86 -0
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VoicevoxQueueManager = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const types_1 = require("./types");
6
+ const file_manager_1 = require("./file-manager");
7
+ const event_manager_1 = require("./event-manager");
8
+ const audio_generator_1 = require("./audio-generator");
9
+ const audio_player_1 = require("./audio-player");
10
+ const utils_1 = require("../utils");
11
+ /**
12
+ * VOICEVOXキュー管理クラス
13
+ * 音声合成タスクのキュー管理と実行を担当
14
+ */
15
+ class VoicevoxQueueManager {
16
+ /**
17
+ * コンストラクタ
18
+ * @param apiInstance VOICEVOX APIクライアントのインスタンス
19
+ * @param prefetchSize 事前生成するアイテム数
20
+ */
21
+ constructor(apiInstance, prefetchSize = 2) {
22
+ this.queue = [];
23
+ this.isPlaying = false;
24
+ this.isPaused = false;
25
+ this.prefetchSize = 2;
26
+ this.currentPlayingItem = null;
27
+ this.api = apiInstance;
28
+ this.prefetchSize = prefetchSize;
29
+ // 依存コンポーネントを初期化
30
+ this.fileManager = new file_manager_1.AudioFileManager();
31
+ this.eventManager = new event_manager_1.EventManager();
32
+ this.audioGenerator = new audio_generator_1.AudioGenerator(this.api, this.fileManager);
33
+ this.audioPlayer = new audio_player_1.AudioPlayer();
34
+ }
35
+ /**
36
+ * キューに新しいテキストを追加
37
+ */
38
+ async enqueueText(text, speaker) {
39
+ const item = {
40
+ id: (0, uuid_1.v4)(),
41
+ text: text,
42
+ speaker,
43
+ status: types_1.QueueItemStatus.PENDING,
44
+ createdAt: new Date(),
45
+ };
46
+ this.queue.push(item);
47
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_ADDED, item);
48
+ try {
49
+ // 非同期で音声生成を開始
50
+ this.updateItemStatus(item, types_1.QueueItemStatus.GENERATING);
51
+ const query = await this.audioGenerator.generateQuery(text, speaker);
52
+ item.query = query;
53
+ await this.audioGenerator.generateAudioFromQuery(item, this.updateItemStatus.bind(this));
54
+ return item;
55
+ }
56
+ catch (error) {
57
+ // エラー発生時の処理
58
+ item.error = error instanceof Error ? error : new Error(String(error));
59
+ this.updateItemStatus(item, types_1.QueueItemStatus.ERROR);
60
+ this.eventManager.emitEvent(types_1.QueueEventType.ERROR, item);
61
+ // エラー発生時はキューからアイテムを削除
62
+ const itemIndex = this.queue.findIndex((i) => i.id === item.id);
63
+ if (itemIndex !== -1) {
64
+ this.queue.splice(itemIndex, 1);
65
+ }
66
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_REMOVED, item);
67
+ throw error; // エラーを再スロー
68
+ }
69
+ }
70
+ /**
71
+ * キューに音声合成用クエリを追加
72
+ * @param query 音声合成用クエリ
73
+ * @param speaker 話者ID
74
+ * @returns 作成されたキューアイテム
75
+ */
76
+ async enqueueQuery(query, speaker) {
77
+ const item = {
78
+ id: (0, uuid_1.v4)(),
79
+ text: "(クエリから生成)",
80
+ speaker,
81
+ status: types_1.QueueItemStatus.PENDING,
82
+ createdAt: new Date(),
83
+ query,
84
+ };
85
+ this.queue.push(item);
86
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_ADDED, item);
87
+ // 非同期で音声生成を開始
88
+ this.audioGenerator
89
+ .generateAudioFromQuery(item, this.updateItemStatus.bind(this))
90
+ .catch((e) => {
91
+ console.error("Unhandled error during generateAudioFromQuery:", e);
92
+ });
93
+ // キュー処理開始
94
+ this.processQueue();
95
+ return item;
96
+ }
97
+ /**
98
+ * キューからアイテムを削除
99
+ * @param itemId 削除するアイテムのID
100
+ * @returns 削除に成功したかどうか
101
+ */
102
+ async removeItem(itemId) {
103
+ const index = this.queue.findIndex((item) => item.id === itemId);
104
+ if (index === -1) {
105
+ return false;
106
+ }
107
+ const item = this.queue[index];
108
+ // 一時ファイルがあれば削除
109
+ if (item.tempFile) {
110
+ await this.fileManager.deleteTempFile(item.tempFile);
111
+ }
112
+ // キューから削除
113
+ const removedItem = this.queue.splice(index, 1)[0];
114
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_REMOVED, removedItem);
115
+ // もし削除されたアイテムが再生中だったら停止
116
+ if (this.currentPlayingItem?.id === itemId) {
117
+ // TODO: 再生停止処理
118
+ this.currentPlayingItem = null;
119
+ }
120
+ return true;
121
+ }
122
+ /**
123
+ * キューをクリア
124
+ */
125
+ async clearQueue() {
126
+ // 削除処理中にキューが変更される可能性があるので、先にIDリストを取得
127
+ const itemIdsToDelete = this.queue.map((item) => item.id);
128
+ // 各アイテムに対して削除処理(一時ファイル削除含む)を実行
129
+ await Promise.all(itemIdsToDelete.map((id) => this.removeItem(id)));
130
+ // 念のためキューを空にする(removeItemで空になっているはずだが)
131
+ this.queue = [];
132
+ // 再生状態をリセット
133
+ this.isPlaying = false;
134
+ this.isPaused = false;
135
+ if (this.currentPlayingItem) {
136
+ // TODO: 再生停止処理
137
+ this.currentPlayingItem = null;
138
+ }
139
+ this.eventManager.emitEvent(types_1.QueueEventType.QUEUE_CLEARED);
140
+ }
141
+ // --- 再生制御 ---
142
+ async startPlayback() {
143
+ if (!this.isPlaying) {
144
+ this.isPlaying = true;
145
+ this.isPaused = false;
146
+ this.eventManager.emitEvent(types_1.QueueEventType.PLAYBACK_STARTED);
147
+ this.processQueue();
148
+ }
149
+ }
150
+ async pausePlayback() {
151
+ if (this.isPlaying && !this.isPaused) {
152
+ this.isPaused = true;
153
+ // 再生中のアイテムがあれば状態をPAUSEDに変更
154
+ if (this.currentPlayingItem) {
155
+ this.updateItemStatus(this.currentPlayingItem, types_1.QueueItemStatus.PAUSED);
156
+ }
157
+ this.eventManager.emitEvent(types_1.QueueEventType.PLAYBACK_PAUSED);
158
+ }
159
+ }
160
+ async resumePlayback() {
161
+ if (this.isPlaying && this.isPaused) {
162
+ this.isPaused = false;
163
+ // 一時停止中のアイテムがあれば状態をPLAYINGに戻す
164
+ if (this.currentPlayingItem) {
165
+ this.updateItemStatus(this.currentPlayingItem, types_1.QueueItemStatus.PLAYING);
166
+ }
167
+ this.eventManager.emitEvent(types_1.QueueEventType.PLAYBACK_RESUMED);
168
+ this.processQueue();
169
+ }
170
+ }
171
+ /**
172
+ * 次のアイテムを再生する
173
+ * 最初のREADY状態のアイテムを再生します
174
+ */
175
+ async playNext() {
176
+ if (!this.isPlaying) {
177
+ this.isPlaying = true;
178
+ }
179
+ this.isPaused = false;
180
+ // キュー処理を開始
181
+ this.processQueue();
182
+ }
183
+ // --- 再生制御ここまで ---
184
+ /**
185
+ * イベントリスナーを追加
186
+ */
187
+ addEventListener(event, listener) {
188
+ this.eventManager.addEventListener(event, listener);
189
+ }
190
+ /**
191
+ * イベントリスナーを削除
192
+ */
193
+ removeEventListener(event, listener) {
194
+ this.eventManager.removeEventListener(event, listener);
195
+ }
196
+ /**
197
+ * 現在のキュー内のアイテムを取得
198
+ */
199
+ getQueue() {
200
+ // 不変性を保つためにコピーを返す
201
+ return [...this.queue];
202
+ }
203
+ /**
204
+ * 特定のアイテムの状態を取得
205
+ */
206
+ getItemStatus(itemId) {
207
+ const item = this.queue.find((item) => item.id === itemId);
208
+ return item ? item.status : null;
209
+ }
210
+ /**
211
+ * キュー処理実行
212
+ * キューにある音声の生成と再生を処理
213
+ */
214
+ async processQueue() {
215
+ // 再生を停止中またはポーズ中は何もしない
216
+ if (!this.isPlaying || this.isPaused) {
217
+ return;
218
+ }
219
+ // 現在再生中のアイテムがあれば再生中のまま
220
+ if (this.currentPlayingItem?.status === types_1.QueueItemStatus.PLAYING) {
221
+ return;
222
+ }
223
+ // 前回再生したアイテムの後処理
224
+ if (this.currentPlayingItem &&
225
+ this.currentPlayingItem.status === types_1.QueueItemStatus.DONE) {
226
+ // 再生完了したアイテムの一時ファイルを削除
227
+ if (this.currentPlayingItem.tempFile) {
228
+ await this.fileManager.deleteTempFile(this.currentPlayingItem.tempFile);
229
+ this.currentPlayingItem.tempFile = undefined; // 削除後に参照を消す
230
+ }
231
+ this.currentPlayingItem = null;
232
+ }
233
+ // 再生可能なアイテムを探す
234
+ const nextItem = this.queue.find((item) => item.status === types_1.QueueItemStatus.READY);
235
+ if (!nextItem) {
236
+ // 再生可能なアイテムがなければ、事前生成を開始して終了
237
+ this.prefetchAudio();
238
+ return;
239
+ }
240
+ this.currentPlayingItem = nextItem;
241
+ this.updateItemStatus(nextItem, types_1.QueueItemStatus.PLAYING);
242
+ try {
243
+ if (!nextItem.tempFile) {
244
+ throw new Error("再生対象の一時ファイルが見つかりません");
245
+ }
246
+ await this.audioPlayer.playAudio(nextItem.tempFile);
247
+ // 再生完了
248
+ this.updateItemStatus(nextItem, types_1.QueueItemStatus.DONE);
249
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_COMPLETED, nextItem);
250
+ // キューから削除
251
+ const itemIndex = this.queue.findIndex((i) => i.id === nextItem.id);
252
+ if (itemIndex !== -1) {
253
+ this.queue.splice(itemIndex, 1);
254
+ }
255
+ // 続けて次のアイテムを再生
256
+ this.currentPlayingItem = null;
257
+ this.processQueue();
258
+ }
259
+ catch (error) {
260
+ console.error(`Error playing audio:`, error);
261
+ this.updateItemStatus(nextItem, types_1.QueueItemStatus.ERROR);
262
+ nextItem.error =
263
+ error instanceof Error ? error : new Error(String(error));
264
+ this.eventManager.emitEvent(types_1.QueueEventType.ERROR, nextItem);
265
+ // エラー発生時もキューからアイテムを削除
266
+ const itemIndex = this.queue.findIndex((i) => i.id === nextItem.id);
267
+ if (itemIndex !== -1) {
268
+ this.queue.splice(itemIndex, 1);
269
+ }
270
+ // エラー発生時でも次のアイテムを再生
271
+ this.currentPlayingItem = null;
272
+ this.processQueue();
273
+ }
274
+ // 次回の音声を事前生成
275
+ this.prefetchAudio();
276
+ }
277
+ /**
278
+ * 次のアイテムの音声を事前に生成 (プリフェッチ)
279
+ * @private
280
+ */
281
+ async prefetchAudio() {
282
+ const pendingItems = this.queue.filter((item) => item.status === types_1.QueueItemStatus.PENDING);
283
+ const processingOrReadyCount = this.queue.filter((item) => item.status === types_1.QueueItemStatus.READY ||
284
+ item.status === types_1.QueueItemStatus.GENERATING).length;
285
+ const prefetchNeeded = this.prefetchSize - processingOrReadyCount;
286
+ if (prefetchNeeded > 0 && pendingItems.length > 0) {
287
+ const itemsToPrefetch = pendingItems.slice(0, prefetchNeeded);
288
+ await Promise.all(itemsToPrefetch.map((item) => {
289
+ if (item.query) {
290
+ return this.audioGenerator
291
+ .generateAudioFromQuery(item, this.updateItemStatus.bind(this))
292
+ .catch((e) => console.error("Prefetch error:", e));
293
+ }
294
+ else if (item.text) {
295
+ return this.audioGenerator
296
+ .generateAudio(item, this.updateItemStatus.bind(this))
297
+ .catch((e) => console.error("Prefetch error:", e));
298
+ }
299
+ return Promise.resolve();
300
+ }));
301
+ }
302
+ }
303
+ /**
304
+ * アイテムの状態を更新し、イベントを発火
305
+ * @param item 状態を更新するアイテム
306
+ * @param status 新しい状態
307
+ * @private
308
+ */
309
+ updateItemStatus(item, status) {
310
+ item.status = status;
311
+ // 状態変更イベントを発火
312
+ this.eventManager.emitEvent(types_1.QueueEventType.ITEM_STATUS_CHANGED, item);
313
+ // READYになったらプリフェッチとキュー処理をトリガー
314
+ if (status === types_1.QueueItemStatus.READY) {
315
+ this.prefetchAudio();
316
+ this.processQueue();
317
+ }
318
+ }
319
+ /**
320
+ * バイナリーデータを一時ファイルに保存
321
+ * @param audioData 音声バイナリーデータ
322
+ * @returns 保存した一時ファイルのパス
323
+ */
324
+ async saveTempAudioFile(audioData) {
325
+ return this.fileManager.saveTempAudioFile(audioData);
326
+ }
327
+ /**
328
+ * AudioGeneratorインスタンスを取得
329
+ * @returns AudioGeneratorインスタンス
330
+ */
331
+ getAudioGenerator() {
332
+ return this.audioGenerator;
333
+ }
334
+ /**
335
+ * FileManagerインスタンスを取得
336
+ * @returns AudioFileManagerインスタンス
337
+ */
338
+ getFileManager() {
339
+ return this.fileManager;
340
+ }
341
+ /**
342
+ * API インスタンスを取得
343
+ * @returns VoicevoxApi インスタンス
344
+ */
345
+ getApi() {
346
+ return this.api;
347
+ }
348
+ /**
349
+ * 全てのリソースをクリーンアップ
350
+ * 使用していないときに呼び出すことで、メモリリークを防止
351
+ */
352
+ cleanup() {
353
+ // すべてのblobURLをリリース
354
+ if ((0, utils_1.isBrowser)()) {
355
+ this.fileManager.releaseAllBlobUrls();
356
+ }
357
+ // 一時ファイルがあれば削除
358
+ this.queue.forEach((item) => {
359
+ if (item.tempFile) {
360
+ this.fileManager.deleteTempFile(item.tempFile);
361
+ }
362
+ });
363
+ // キューをクリア
364
+ this.queue = [];
365
+ this.isPlaying = false;
366
+ this.isPaused = false;
367
+ this.currentPlayingItem = null;
368
+ }
369
+ }
370
+ exports.VoicevoxQueueManager = VoicevoxQueueManager;
371
+ //# 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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"}
@@ -0,0 +1,96 @@
1
+ import { AudioQuery } from "../types";
2
+ /**
3
+ * キューアイテムの状態
4
+ */
5
+ export declare enum QueueItemStatus {
6
+ PENDING = "pending",// 初期状態
7
+ GENERATING = "generating",// 音声生成中
8
+ READY = "ready",// 再生準備完了
9
+ PLAYING = "playing",// 再生中
10
+ DONE = "done",// 再生完了
11
+ PAUSED = "paused",// 一時停止中
12
+ ERROR = "error"
13
+ }
14
+ /**
15
+ * キューアイテムの情報
16
+ */
17
+ export interface QueueItem {
18
+ id: string;
19
+ text: string;
20
+ speaker: number;
21
+ status: QueueItemStatus;
22
+ createdAt: Date;
23
+ audioData?: ArrayBuffer;
24
+ tempFile?: string;
25
+ query?: AudioQuery;
26
+ error?: Error;
27
+ }
28
+ /**
29
+ * キュー管理イベントの種類
30
+ */
31
+ export declare enum QueueEventType {
32
+ ITEM_ADDED = "item_added",// アイテム追加
33
+ ITEM_REMOVED = "item_removed",// アイテム削除
34
+ ITEM_STATUS_CHANGED = "item_status_changed",// 状態変更
35
+ ITEM_COMPLETED = "item_completed",// アイテム再生完了
36
+ QUEUE_CLEARED = "queue_cleared",// キュークリア
37
+ PLAYBACK_STARTED = "playback_started",// 再生開始
38
+ PLAYBACK_PAUSED = "playback_paused",// 再生一時停止
39
+ PLAYBACK_RESUMED = "playback_resumed",// 再生再開
40
+ PLAYBACK_COMPLETED = "playback_completed",// 再生完了
41
+ ERROR = "error"
42
+ }
43
+ /**
44
+ * キューイベントリスナー関数の型
45
+ */
46
+ export type QueueEventListener = (event: QueueEventType, item?: QueueItem) => void;
47
+ /**
48
+ * キュー管理のインターフェース
49
+ */
50
+ export interface QueueManager {
51
+ /**
52
+ * キューに新しいテキストを追加
53
+ */
54
+ enqueueText(text: string, speaker: number, isKara?: boolean): Promise<QueueItem>;
55
+ /**
56
+ * キューに音声合成用クエリを追加
57
+ */
58
+ enqueueQuery(query: AudioQuery, speaker: number): Promise<QueueItem>;
59
+ /**
60
+ * キューからアイテムを削除
61
+ */
62
+ removeItem(itemId: string): Promise<boolean>;
63
+ /**
64
+ * キューをクリア
65
+ */
66
+ clearQueue(): Promise<void>;
67
+ /**
68
+ * 再生を開始
69
+ */
70
+ startPlayback(): Promise<void>;
71
+ /**
72
+ * 再生を一時停止
73
+ */
74
+ pausePlayback(): Promise<void>;
75
+ /**
76
+ * 再生を再開
77
+ */
78
+ resumePlayback(): Promise<void>;
79
+ /**
80
+ * イベントリスナーを追加
81
+ */
82
+ addEventListener(event: QueueEventType, listener: QueueEventListener): void;
83
+ /**
84
+ * イベントリスナーを削除
85
+ */
86
+ removeEventListener(event: QueueEventType, listener: QueueEventListener): void;
87
+ /**
88
+ * 現在のキュー内のアイテムを取得
89
+ */
90
+ getQueue(): QueueItem[];
91
+ /**
92
+ * 特定のアイテムの状態を取得
93
+ */
94
+ getItemStatus(itemId: string): QueueItemStatus | null;
95
+ }
96
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;GAEG;AACH,oBAAY,eAAe;IACzB,OAAO,YAAY,CAAE,OAAO;IAC5B,UAAU,eAAe,CAAE,QAAQ;IACnC,KAAK,UAAU,CAAE,SAAS;IAC1B,OAAO,YAAY,CAAE,MAAM;IAC3B,IAAI,SAAS,CAAE,OAAO;IACtB,MAAM,WAAW,CAAE,QAAQ;IAC3B,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,UAAU,eAAe,CAAE,SAAS;IACpC,YAAY,iBAAiB,CAAE,SAAS;IACxC,mBAAmB,wBAAwB,CAAE,OAAO;IACpD,cAAc,mBAAmB,CAAE,WAAW;IAC9C,aAAa,kBAAkB,CAAE,SAAS;IAC1C,gBAAgB,qBAAqB,CAAE,OAAO;IAC9C,eAAe,oBAAoB,CAAE,SAAS;IAC9C,gBAAgB,qBAAqB,CAAE,OAAO;IAC9C,kBAAkB,uBAAuB,CAAE,OAAO;IAClD,KAAK,UAAU;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,EAAE,cAAc,EACrB,IAAI,CAAC,EAAE,SAAS,KACb,IAAI,CAAC;AAEV;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtB;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAErE;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7C;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B;;OAEG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE/B;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAE5E;;OAEG;IACH,mBAAmB,CACjB,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,kBAAkB,GAC3B,IAAI,CAAC;IAER;;OAEG;IACH,QAAQ,IAAI,SAAS,EAAE,CAAC;IAExB;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;CACvD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QueueEventType = exports.QueueItemStatus = void 0;
4
+ /**
5
+ * キューアイテムの状態
6
+ */
7
+ var QueueItemStatus;
8
+ (function (QueueItemStatus) {
9
+ QueueItemStatus["PENDING"] = "pending";
10
+ QueueItemStatus["GENERATING"] = "generating";
11
+ QueueItemStatus["READY"] = "ready";
12
+ QueueItemStatus["PLAYING"] = "playing";
13
+ QueueItemStatus["DONE"] = "done";
14
+ QueueItemStatus["PAUSED"] = "paused";
15
+ QueueItemStatus["ERROR"] = "error";
16
+ })(QueueItemStatus || (exports.QueueItemStatus = QueueItemStatus = {}));
17
+ /**
18
+ * キュー管理イベントの種類
19
+ */
20
+ var QueueEventType;
21
+ (function (QueueEventType) {
22
+ QueueEventType["ITEM_ADDED"] = "item_added";
23
+ QueueEventType["ITEM_REMOVED"] = "item_removed";
24
+ QueueEventType["ITEM_STATUS_CHANGED"] = "item_status_changed";
25
+ QueueEventType["ITEM_COMPLETED"] = "item_completed";
26
+ QueueEventType["QUEUE_CLEARED"] = "queue_cleared";
27
+ QueueEventType["PLAYBACK_STARTED"] = "playback_started";
28
+ QueueEventType["PLAYBACK_PAUSED"] = "playback_paused";
29
+ QueueEventType["PLAYBACK_RESUMED"] = "playback_resumed";
30
+ QueueEventType["PLAYBACK_COMPLETED"] = "playback_completed";
31
+ QueueEventType["ERROR"] = "error";
32
+ })(QueueEventType || (exports.QueueEventType = QueueEventType = {}));
33
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IACzB,kCAAe,CAAA;IACf,sCAAmB,CAAA;IACnB,gCAAa,CAAA;IACb,oCAAiB,CAAA;IACjB,kCAAe,CAAA;AACjB,CAAC,EARW,eAAe,+BAAf,eAAe,QAQ1B;AAiBD;;GAEG;AACH,IAAY,cAWX;AAXD,WAAY,cAAc;IACxB,2CAAyB,CAAA;IACzB,+CAA6B,CAAA;IAC7B,6DAA2C,CAAA;IAC3C,mDAAiC,CAAA;IACjC,iDAA+B,CAAA;IAC/B,uDAAqC,CAAA;IACrC,qDAAmC,CAAA;IACnC,uDAAqC,CAAA;IACrC,2DAAyC,CAAA;IACzC,iCAAe,CAAA;AACjB,CAAC,EAXW,cAAc,8BAAd,cAAc,QAWzB"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * VOICEVOXクライアントの設定オブジェクト
3
+ */
4
+ export interface VoicevoxConfig {
5
+ /** VOICEVOXエンジンのURL */
6
+ url: string;
7
+ /** デフォルトの話者ID */
8
+ defaultSpeaker: number;
9
+ /** デフォルトの再生速度 */
10
+ defaultSpeedScale?: number;
11
+ }
12
+ /**
13
+ * 音声合成用のクエリ
14
+ */
15
+ export interface AudioQuery {
16
+ /** アクセント句のリスト */
17
+ accent_phrases: AccentPhrase[];
18
+ /** 全体の話速 */
19
+ speedScale: number;
20
+ /** 全体の音高 */
21
+ pitchScale: number;
22
+ /** 全体の抑揚 */
23
+ intonationScale: number;
24
+ /** 全体の音量 */
25
+ volumeScale: number;
26
+ /** 音声の前の無音時間 */
27
+ prePhonemeLength: number;
28
+ /** 音声の後の無音時間 */
29
+ postPhonemeLength: number;
30
+ /** 音声データの出力サンプリングレート */
31
+ outputSamplingRate: number;
32
+ /** 音声データをステレオ出力するか否か */
33
+ outputStereo: boolean;
34
+ /** AquesTalk風記法によるテキスト */
35
+ kana?: string;
36
+ }
37
+ /**
38
+ * 文字列またはAudioQueryのいずれかを受け入れる型
39
+ */
40
+ export type StringOrAudioQuery = string | AudioQuery;
41
+ /**
42
+ * アクセント句ごとの情報
43
+ */
44
+ export interface AccentPhrase {
45
+ /** モーラのリスト */
46
+ moras: Mora[];
47
+ /** アクセント箇所 */
48
+ accent: number;
49
+ /** 後ろに無音を付けるかどうか */
50
+ pause_mora?: Mora;
51
+ /** 疑問形かどうか */
52
+ is_interrogative?: boolean;
53
+ }
54
+ /**
55
+ * モーラ(子音+母音)ごとの情報
56
+ */
57
+ export interface Mora {
58
+ /** 文字 */
59
+ text: string;
60
+ /** 子音の音素 */
61
+ consonant?: string;
62
+ /** 子音の音長 */
63
+ consonant_length?: number;
64
+ /** 母音の音素 */
65
+ vowel: string;
66
+ /** 母音の音長 */
67
+ vowel_length: number;
68
+ /** 音高 */
69
+ pitch: number;
70
+ }
71
+ /**
72
+ * 歌唱パラメータ
73
+ */
74
+ export interface SingingParameters {
75
+ /** 全体の話速 */
76
+ speedScale?: number;
77
+ /** 全体の音高 */
78
+ pitchScale?: number;
79
+ /** 全体の抑揚 */
80
+ intonationScale?: number;
81
+ /** 全体の音量 */
82
+ volumeScale?: number;
83
+ }
84
+ /**
85
+ * 楽譜情報
86
+ */
87
+ export interface Score {
88
+ /** 音符のリスト */
89
+ notes: Note[];
90
+ }
91
+ /**
92
+ * 音符ごとの情報
93
+ */
94
+ export interface Note {
95
+ /** ID */
96
+ id?: string | null;
97
+ /** 音階 */
98
+ key?: number;
99
+ /** 音符のフレーム長 */
100
+ frame_length: number;
101
+ /** 音符の歌詞 */
102
+ lyric: string;
103
+ }
104
+ /**
105
+ * フレームごとの音声合成用のクエリ
106
+ */
107
+ export interface FrameAudioQuery {
108
+ /** フレームごとの基本周波数 */
109
+ f0: number[];
110
+ /** フレームごとの音量 */
111
+ volume: number[];
112
+ /** 音素のリスト */
113
+ phonemes: FramePhoneme[];
114
+ /** 全体の音量 */
115
+ volumeScale: number;
116
+ /** 音声データの出力サンプリングレート */
117
+ outputSamplingRate: number;
118
+ /** 音声データをステレオ出力するか否か */
119
+ outputStereo: boolean;
120
+ }
121
+ /**
122
+ * 音素の情報
123
+ */
124
+ export interface FramePhoneme {
125
+ /** 音素 */
126
+ phoneme: string;
127
+ /** 音素のフレーム長 */
128
+ frame_length: number;
129
+ /** 音符のID */
130
+ note_id?: string | null;
131
+ }
132
+ /**
133
+ * スピーカーの情報
134
+ */
135
+ export interface Speaker {
136
+ name: string;
137
+ speaker_uuid: string;
138
+ styles: {
139
+ name: string;
140
+ id: number;
141
+ type: string;
142
+ }[];
143
+ version: string;
144
+ supported_features: {
145
+ permitted_synthesis_morphing: string;
146
+ };
147
+ }
148
+ export interface SpeechSegment {
149
+ text: string;
150
+ speaker?: number;
151
+ }
152
+ //# sourceMappingURL=types.d.ts.map