@coeiro-operator/audio 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -0
- package/dist/audio-player.d.ts +25 -11
- package/dist/audio-player.d.ts.map +1 -1
- package/dist/audio-player.js +194 -210
- package/dist/audio-player.js.map +1 -1
- package/dist/audio-stream-controller.d.ts +1 -5
- package/dist/audio-stream-controller.d.ts.map +1 -1
- package/dist/audio-stream-controller.js +16 -43
- package/dist/audio-stream-controller.js.map +1 -1
- package/dist/audio-synthesizer.d.ts +1 -0
- package/dist/audio-synthesizer.d.ts.map +1 -1
- package/dist/audio-synthesizer.js +11 -4
- package/dist/audio-synthesizer.js.map +1 -1
- package/dist/chunk-generation-manager.d.ts +34 -2
- package/dist/chunk-generation-manager.d.ts.map +1 -1
- package/dist/chunk-generation-manager.js +237 -15
- package/dist/chunk-generation-manager.js.map +1 -1
- package/dist/debug-error-test.d.ts +5 -0
- package/dist/debug-error-test.d.ts.map +1 -0
- package/dist/debug-error-test.js +92 -0
- package/dist/debug-error-test.js.map +1 -0
- package/dist/index.d.ts +18 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -4
- package/dist/index.js.map +1 -1
- package/dist/open-promise.d.ts +18 -0
- package/dist/open-promise.d.ts.map +1 -0
- package/dist/open-promise.js +42 -0
- package/dist/open-promise.js.map +1 -0
- package/dist/queue/speech-queue.d.ts +34 -0
- package/dist/queue/speech-queue.d.ts.map +1 -0
- package/dist/queue/speech-queue.js +36 -0
- package/dist/queue/speech-queue.js.map +1 -0
- package/dist/queue/task-queue.d.ts +52 -0
- package/dist/queue/task-queue.d.ts.map +1 -0
- package/dist/queue/task-queue.js +259 -0
- package/dist/queue/task-queue.js.map +1 -0
- package/dist/queue/types.d.ts +42 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +5 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/speech-queue.d.ts +4 -49
- package/dist/speech-queue.d.ts.map +1 -1
- package/dist/speech-queue.js +3 -140
- package/dist/speech-queue.js.map +1 -1
- package/dist/synthesis-processor.d.ts.map +1 -1
- package/dist/synthesis-processor.js +21 -8
- package/dist/synthesis-processor.js.map +1 -1
- package/dist/test-helpers.d.ts +0 -9
- package/dist/test-helpers.d.ts.map +1 -1
- package/dist/test-helpers.js +0 -77
- package/dist/test-helpers.js.map +1 -1
- package/dist/types.d.ts +24 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -7
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenPromise: 外部から解決・拒否できるPromise
|
|
3
|
+
* @echogarden/audio-ioの内部実装パターンを参考
|
|
4
|
+
*/
|
|
5
|
+
export class OpenPromise {
|
|
6
|
+
promise;
|
|
7
|
+
_resolve;
|
|
8
|
+
_reject;
|
|
9
|
+
_resolved = false;
|
|
10
|
+
_rejected = false;
|
|
11
|
+
constructor() {
|
|
12
|
+
this.promise = new Promise((resolve, reject) => {
|
|
13
|
+
this._resolve = resolve;
|
|
14
|
+
this._reject = reject;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
resolve(value) {
|
|
18
|
+
if (this._resolved || this._rejected) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this._resolved = true;
|
|
22
|
+
// void型の場合はundefinedを渡す
|
|
23
|
+
this._resolve(value);
|
|
24
|
+
}
|
|
25
|
+
reject(reason) {
|
|
26
|
+
if (this._resolved || this._rejected) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
this._rejected = true;
|
|
30
|
+
this._reject(reason);
|
|
31
|
+
}
|
|
32
|
+
get isResolved() {
|
|
33
|
+
return this._resolved;
|
|
34
|
+
}
|
|
35
|
+
get isRejected() {
|
|
36
|
+
return this._rejected;
|
|
37
|
+
}
|
|
38
|
+
get isPending() {
|
|
39
|
+
return !this._resolved && !this._rejected;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=open-promise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-promise.js","sourceRoot":"","sources":["../src/open-promise.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,WAAW;IACN,OAAO,CAAa;IAC5B,QAAQ,CAAuC;IAC/C,OAAO,CAA0B;IACjC,SAAS,GAAG,KAAK,CAAC;IAClB,SAAS,GAAG,KAAK,CAAC;IAE1B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAChD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;YACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,KAA0B;QAChC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,wBAAwB;QACxB,IAAI,CAAC,QAAQ,CAAC,KAA2B,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,MAAY;QACjB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/queue/speech-queue.ts: 音声合成タスクキュー
|
|
3
|
+
* TaskQueueのSpeechTask特化版
|
|
4
|
+
*/
|
|
5
|
+
import { TaskQueue } from './task-queue.js';
|
|
6
|
+
import type { BaseTask } from './types.js';
|
|
7
|
+
import type { SynthesizeOptions, SynthesizeResult } from '../types.js';
|
|
8
|
+
/**
|
|
9
|
+
* 音声合成タスク
|
|
10
|
+
*/
|
|
11
|
+
export interface SpeechTask extends BaseTask {
|
|
12
|
+
type: 'speech';
|
|
13
|
+
text: string;
|
|
14
|
+
options: SynthesizeOptions;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 音声合成タスクキュー
|
|
18
|
+
* TaskQueueをSpeechTaskに特化
|
|
19
|
+
*/
|
|
20
|
+
export declare class SpeechQueue extends TaskQueue<SpeechTask> {
|
|
21
|
+
/**
|
|
22
|
+
* 音声タスクをキューに追加(音声合成用のラッパー)
|
|
23
|
+
* @param text 音声合成するテキスト
|
|
24
|
+
* @param options 音声合成オプション
|
|
25
|
+
* @returns 音声合成結果
|
|
26
|
+
*/
|
|
27
|
+
enqueueSpeech(text: string, options?: SynthesizeOptions): SynthesizeResult;
|
|
28
|
+
/**
|
|
29
|
+
* 基底クラスのenqueueメソッドを隠蔽し、enqueueSpeechを使用するよう促す
|
|
30
|
+
* @deprecated Use enqueueSpeech instead
|
|
31
|
+
*/
|
|
32
|
+
enqueue(taskData: Omit<SpeechTask, 'id' | 'promise' | 'resolve' | 'reject' | 'timestamp'>): import("./types.js").EnqueueResult;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=speech-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech-queue.d.ts","sourceRoot":"","sources":["../../src/queue/speech-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,SAAS,CAAC,UAAU,CAAC;IACpD;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,gBAAgB;IAa9E;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;CAG1F"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/queue/speech-queue.ts: 音声合成タスクキュー
|
|
3
|
+
* TaskQueueのSpeechTask特化版
|
|
4
|
+
*/
|
|
5
|
+
import { TaskQueue } from './task-queue.js';
|
|
6
|
+
/**
|
|
7
|
+
* 音声合成タスクキュー
|
|
8
|
+
* TaskQueueをSpeechTaskに特化
|
|
9
|
+
*/
|
|
10
|
+
export class SpeechQueue extends TaskQueue {
|
|
11
|
+
/**
|
|
12
|
+
* 音声タスクをキューに追加(音声合成用のラッパー)
|
|
13
|
+
* @param text 音声合成するテキスト
|
|
14
|
+
* @param options 音声合成オプション
|
|
15
|
+
* @returns 音声合成結果
|
|
16
|
+
*/
|
|
17
|
+
enqueueSpeech(text, options = {}) {
|
|
18
|
+
const result = super.enqueue({
|
|
19
|
+
type: 'speech',
|
|
20
|
+
text,
|
|
21
|
+
options,
|
|
22
|
+
});
|
|
23
|
+
return {
|
|
24
|
+
...result,
|
|
25
|
+
outputFile: options.outputFile || undefined,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 基底クラスのenqueueメソッドを隠蔽し、enqueueSpeechを使用するよう促す
|
|
30
|
+
* @deprecated Use enqueueSpeech instead
|
|
31
|
+
*/
|
|
32
|
+
enqueue(taskData) {
|
|
33
|
+
return super.enqueue(taskData);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=speech-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"speech-queue.js","sourceRoot":"","sources":["../../src/queue/speech-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAa5C;;;GAGG;AACH,MAAM,OAAO,WAAY,SAAQ,SAAqB;IACpD;;;;;OAKG;IACH,aAAa,CAAC,IAAY,EAAE,UAA6B,EAAE;QACzD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;YAC3B,IAAI,EAAE,QAAQ;YACd,IAAI;YACJ,OAAO;SACR,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,MAAM;YACT,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS;SAC5C,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,OAAO,CAAC,QAAiF;QACvF,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/queue/task-queue.ts: ジェネリックタスクキュー管理
|
|
3
|
+
* 非同期タスクのキューイングと順次処理を担当
|
|
4
|
+
*/
|
|
5
|
+
import type { BaseTask, EnqueueResult, QueueStatus, ClearResult } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* ジェネリックタスクキュー
|
|
8
|
+
* @template T タスクの型(BaseTaskを拡張)
|
|
9
|
+
*/
|
|
10
|
+
export declare class TaskQueue<T extends BaseTask> {
|
|
11
|
+
private processCallback;
|
|
12
|
+
private taskQueue;
|
|
13
|
+
private currentProcessPromise;
|
|
14
|
+
private currentTask;
|
|
15
|
+
private taskIdCounter;
|
|
16
|
+
private errors;
|
|
17
|
+
constructor(processCallback: (task: T) => Promise<void>);
|
|
18
|
+
/**
|
|
19
|
+
* タスクを作成してキューに追加
|
|
20
|
+
* @param taskData タスクデータ(id, promise, resolve, reject以外のフィールド)
|
|
21
|
+
*/
|
|
22
|
+
enqueue(taskData: Omit<T, 'id' | 'promise' | 'resolve' | 'reject' | 'timestamp'>): EnqueueResult;
|
|
23
|
+
/**
|
|
24
|
+
* キューに入っているすべてのタスクの完了を待つ
|
|
25
|
+
* @returns エラーが発生した場合はエラーリストを含む結果を返す
|
|
26
|
+
*/
|
|
27
|
+
waitForAllTasks(): Promise<{
|
|
28
|
+
errors: Array<{
|
|
29
|
+
taskId: number;
|
|
30
|
+
error: Error;
|
|
31
|
+
}>;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* キューの処理を開始
|
|
35
|
+
*/
|
|
36
|
+
private processQueue;
|
|
37
|
+
/**
|
|
38
|
+
* タスクの処理を実行
|
|
39
|
+
*/
|
|
40
|
+
private processTask;
|
|
41
|
+
/**
|
|
42
|
+
* キューの状態を取得
|
|
43
|
+
*/
|
|
44
|
+
getStatus(): QueueStatus;
|
|
45
|
+
/**
|
|
46
|
+
* キューをクリア
|
|
47
|
+
* @param taskIds 削除するタスクIDの配列(省略時は全タスク削除)
|
|
48
|
+
* @returns 削除されたタスク数と、実行中タスクの中断状態
|
|
49
|
+
*/
|
|
50
|
+
clear(taskIds?: number[]): Promise<ClearResult>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=task-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../../src/queue/task-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGpF;;;GAGG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,QAAQ;IAQrC,OAAO,CAAC,eAAe;IAPzB,OAAO,CAAC,SAAS,CAAW;IAC5B,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,MAAM,CAA6C;gBAGjD,eAAe,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;IAGrD;;;OAGG;IACH,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC,GAAG,aAAa;IAuChG;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC;QAAE,MAAM,EAAE,KAAK,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,KAAK,CAAA;SAAC,CAAC,CAAA;KAAE,CAAC;IA0BnF;;OAEG;YACW,YAAY;IA2F1B;;OAEG;YACW,WAAW;IAIzB;;OAEG;IACH,SAAS,IAAI,WAAW;IASxB;;;;OAIG;IACG,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;CAkFtD"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/queue/task-queue.ts: ジェネリックタスクキュー管理
|
|
3
|
+
* 非同期タスクのキューイングと順次処理を担当
|
|
4
|
+
*/
|
|
5
|
+
import { logger } from '@coeiro-operator/common';
|
|
6
|
+
/**
|
|
7
|
+
* ジェネリックタスクキュー
|
|
8
|
+
* @template T タスクの型(BaseTaskを拡張)
|
|
9
|
+
*/
|
|
10
|
+
export class TaskQueue {
|
|
11
|
+
processCallback;
|
|
12
|
+
taskQueue = [];
|
|
13
|
+
currentProcessPromise = null;
|
|
14
|
+
currentTask = null;
|
|
15
|
+
taskIdCounter = Date.now();
|
|
16
|
+
errors = [];
|
|
17
|
+
constructor(processCallback) {
|
|
18
|
+
this.processCallback = processCallback;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* タスクを作成してキューに追加
|
|
22
|
+
* @param taskData タスクデータ(id, promise, resolve, reject以外のフィールド)
|
|
23
|
+
*/
|
|
24
|
+
enqueue(taskData) {
|
|
25
|
+
const taskId = this.taskIdCounter++;
|
|
26
|
+
// OpenPromiseパターンでPromiseを作成
|
|
27
|
+
let resolveTask;
|
|
28
|
+
let rejectTask;
|
|
29
|
+
const taskPromise = new Promise((resolve, reject) => {
|
|
30
|
+
resolveTask = resolve;
|
|
31
|
+
rejectTask = reject;
|
|
32
|
+
});
|
|
33
|
+
const task = {
|
|
34
|
+
...taskData,
|
|
35
|
+
id: taskId,
|
|
36
|
+
timestamp: Date.now(),
|
|
37
|
+
promise: taskPromise,
|
|
38
|
+
resolve: resolveTask,
|
|
39
|
+
reject: rejectTask,
|
|
40
|
+
};
|
|
41
|
+
this.taskQueue.push(task);
|
|
42
|
+
// 処理を別のタイミングで開始
|
|
43
|
+
setTimeout(() => {
|
|
44
|
+
// processQueueのエラーをキャッチして、unhandled rejectionを防ぐ
|
|
45
|
+
this.processQueue().catch(error => {
|
|
46
|
+
logger.error('[TaskQueue] processQueueエラー:', error);
|
|
47
|
+
// エラーは既にprocessQueue内で処理されているので、ここでは記録のみ
|
|
48
|
+
});
|
|
49
|
+
}, 0);
|
|
50
|
+
return {
|
|
51
|
+
success: true,
|
|
52
|
+
taskId,
|
|
53
|
+
promise: task.promise,
|
|
54
|
+
queueLength: this.taskQueue.length,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* キューに入っているすべてのタスクの完了を待つ
|
|
59
|
+
* @returns エラーが発生した場合はエラーリストを含む結果を返す
|
|
60
|
+
*/
|
|
61
|
+
async waitForAllTasks() {
|
|
62
|
+
logger.debug(`[TaskQueue] waitForAllTasks開始, currentProcessPromise: ${this.currentProcessPromise !== null}, queue長: ${this.taskQueue.length}`);
|
|
63
|
+
// 処理中のprocessQueueがあれば待つ
|
|
64
|
+
if (this.currentProcessPromise) {
|
|
65
|
+
logger.debug(`[TaskQueue] processQueueの完了を待機中...`);
|
|
66
|
+
await this.currentProcessPromise;
|
|
67
|
+
logger.debug(`[TaskQueue] processQueue完了`);
|
|
68
|
+
}
|
|
69
|
+
// キューに残っているタスクのPromiseも念のため待つ
|
|
70
|
+
const promises = this.taskQueue
|
|
71
|
+
.filter(task => task.promise)
|
|
72
|
+
.map(task => task.promise);
|
|
73
|
+
if (promises.length > 0) {
|
|
74
|
+
logger.debug(`[TaskQueue] 残りのタスクPromise待機中: ${promises.length}件`);
|
|
75
|
+
await Promise.allSettled(promises);
|
|
76
|
+
}
|
|
77
|
+
// エラーリストを返してクリア
|
|
78
|
+
const errors = [...this.errors];
|
|
79
|
+
logger.debug(`[TaskQueue] waitForAllTasks完了, エラー数: ${errors.length}`);
|
|
80
|
+
this.errors = [];
|
|
81
|
+
return { errors };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* キューの処理を開始
|
|
85
|
+
*/
|
|
86
|
+
async processQueue() {
|
|
87
|
+
logger.debug(`[TaskQueue] processQueue開始, queue長: ${this.taskQueue.length}`);
|
|
88
|
+
// 既に処理中なら、その完了を待つだけ
|
|
89
|
+
if (this.currentProcessPromise) {
|
|
90
|
+
logger.debug(`[TaskQueue] 既に処理中のためスキップ`);
|
|
91
|
+
return this.currentProcessPromise;
|
|
92
|
+
}
|
|
93
|
+
if (this.taskQueue.length === 0) {
|
|
94
|
+
logger.debug(`[TaskQueue] キューが空のため終了`);
|
|
95
|
+
this.currentProcessPromise = null;
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
// 新しい処理を開始
|
|
99
|
+
this.currentProcessPromise = (async () => {
|
|
100
|
+
// キューが空になるまで処理を続ける
|
|
101
|
+
while (this.taskQueue.length > 0) {
|
|
102
|
+
// 1つのタスクを処理
|
|
103
|
+
const task = this.taskQueue.shift();
|
|
104
|
+
if (!task)
|
|
105
|
+
break;
|
|
106
|
+
this.currentTask = task;
|
|
107
|
+
try {
|
|
108
|
+
// 中断されたタスクはスキップ
|
|
109
|
+
if (task.aborted) {
|
|
110
|
+
if (task.reject) {
|
|
111
|
+
task.reject(new Error('Task aborted'));
|
|
112
|
+
// Unhandled rejectionを防ぐためにPromiseをcatch
|
|
113
|
+
if (task.promise) {
|
|
114
|
+
task.promise.catch(() => {
|
|
115
|
+
// エラーは既にrejectで通知済みなので、ここでは何もしない
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
logger.debug(`[TaskQueue] タスク処理開始: ${task.id}`);
|
|
122
|
+
await this.processTask(task);
|
|
123
|
+
logger.debug(`[TaskQueue] タスク処理成功: ${task.id}`);
|
|
124
|
+
// 処理後に再度中断チェック
|
|
125
|
+
if (task.aborted) {
|
|
126
|
+
if (task.reject) {
|
|
127
|
+
task.reject(new Error('Task aborted'));
|
|
128
|
+
// Unhandled rejectionを防ぐためにPromiseをcatch
|
|
129
|
+
if (task.promise) {
|
|
130
|
+
task.promise.catch(() => {
|
|
131
|
+
// エラーは既にrejectで通知済みなので、ここでは何もしない
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
logger.verbose(`タスク完了: ${task.id} (${task.type})`);
|
|
138
|
+
// OpenPromiseを解決
|
|
139
|
+
if (task.resolve) {
|
|
140
|
+
task.resolve();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
logger.error(`[TaskQueue] タスクエラー: ${task.id} (${task.type}), ${error.message}`);
|
|
145
|
+
logger.error(`[TaskQueue] エラースタック:`, error.stack);
|
|
146
|
+
// エラーを保存
|
|
147
|
+
this.errors.push({
|
|
148
|
+
taskId: task.id,
|
|
149
|
+
error: error
|
|
150
|
+
});
|
|
151
|
+
logger.debug(`[TaskQueue] エラーをリストに保存: 現在のエラー数=${this.errors.length}`);
|
|
152
|
+
// OpenPromiseをreject
|
|
153
|
+
if (task.reject) {
|
|
154
|
+
logger.debug(`[TaskQueue] タスクのPromiseをreject`);
|
|
155
|
+
task.reject(error);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
this.currentTask = null;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
})();
|
|
163
|
+
// 処理を待つ
|
|
164
|
+
await this.currentProcessPromise;
|
|
165
|
+
this.currentProcessPromise = null;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* タスクの処理を実行
|
|
169
|
+
*/
|
|
170
|
+
async processTask(task) {
|
|
171
|
+
await this.processCallback(task);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* キューの状態を取得
|
|
175
|
+
*/
|
|
176
|
+
getStatus() {
|
|
177
|
+
return {
|
|
178
|
+
queueLength: this.taskQueue.length,
|
|
179
|
+
isProcessing: this.currentProcessPromise !== null,
|
|
180
|
+
nextTaskId: this.taskQueue[0]?.id || null,
|
|
181
|
+
currentTaskId: this.currentTask?.id || null,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* キューをクリア
|
|
186
|
+
* @param taskIds 削除するタスクIDの配列(省略時は全タスク削除)
|
|
187
|
+
* @returns 削除されたタスク数と、実行中タスクの中断状態
|
|
188
|
+
*/
|
|
189
|
+
async clear(taskIds) {
|
|
190
|
+
let aborted = false;
|
|
191
|
+
if (!taskIds || taskIds.length === 0) {
|
|
192
|
+
// 全タスククリア
|
|
193
|
+
const count = this.taskQueue.length;
|
|
194
|
+
// クリア前にタスクをreject
|
|
195
|
+
for (const task of this.taskQueue) {
|
|
196
|
+
task.aborted = true;
|
|
197
|
+
if (task.reject) {
|
|
198
|
+
task.reject(new Error('Queue cleared'));
|
|
199
|
+
// Unhandled rejectionを防ぐためにPromiseをcatch
|
|
200
|
+
if (task.promise) {
|
|
201
|
+
task.promise.catch(() => {
|
|
202
|
+
// エラーは既にrejectで通知済みなので、ここでは何もしない
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
this.taskQueue = [];
|
|
208
|
+
// 実行中のタスクがあれば中断を試みる
|
|
209
|
+
if (this.currentTask) {
|
|
210
|
+
this.currentTask.aborted = true;
|
|
211
|
+
if (this.currentTask.abort) {
|
|
212
|
+
await this.currentTask.abort();
|
|
213
|
+
aborted = true;
|
|
214
|
+
}
|
|
215
|
+
// 実行中タスクのrejectは呼ばない(processQueue内で処理される)
|
|
216
|
+
}
|
|
217
|
+
// 処理の完了を待つ
|
|
218
|
+
if (this.currentProcessPromise) {
|
|
219
|
+
await this.currentProcessPromise;
|
|
220
|
+
}
|
|
221
|
+
this.currentProcessPromise = null;
|
|
222
|
+
return { removedCount: count, aborted };
|
|
223
|
+
}
|
|
224
|
+
// 指定タスクのみ削除
|
|
225
|
+
const before = this.taskQueue.length;
|
|
226
|
+
// 実行中のタスクが削除対象かチェック
|
|
227
|
+
if (this.currentTask && taskIds.includes(this.currentTask.id)) {
|
|
228
|
+
this.currentTask.aborted = true;
|
|
229
|
+
if (this.currentTask.abort) {
|
|
230
|
+
await this.currentTask.abort();
|
|
231
|
+
aborted = true;
|
|
232
|
+
}
|
|
233
|
+
// 実行中タスクのrejectは呼ばない(processQueue内で処理される)
|
|
234
|
+
}
|
|
235
|
+
this.taskQueue = this.taskQueue.filter(task => {
|
|
236
|
+
const shouldRemove = taskIds.includes(task.id);
|
|
237
|
+
if (shouldRemove) {
|
|
238
|
+
task.aborted = true;
|
|
239
|
+
if (task.reject) {
|
|
240
|
+
task.reject(new Error('Task removed from queue'));
|
|
241
|
+
// Unhandled rejectionを防ぐためにPromiseをcatch
|
|
242
|
+
if (task.promise) {
|
|
243
|
+
task.promise.catch(() => {
|
|
244
|
+
// エラーは既にrejectで通知済みなので、ここでは何もしない
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return !shouldRemove;
|
|
250
|
+
});
|
|
251
|
+
const removedCount = before - this.taskQueue.length;
|
|
252
|
+
// キューが空になった場合は処理中フラグもリセット
|
|
253
|
+
if (this.taskQueue.length === 0 && !this.currentTask) {
|
|
254
|
+
this.currentProcessPromise = null;
|
|
255
|
+
}
|
|
256
|
+
return { removedCount, aborted };
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=task-queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../src/queue/task-queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* src/queue/types.ts: タスクキューの型定義
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* タスクの基本インターフェース
|
|
6
|
+
*/
|
|
7
|
+
export interface BaseTask {
|
|
8
|
+
id: number;
|
|
9
|
+
type: string;
|
|
10
|
+
timestamp: number;
|
|
11
|
+
promise?: Promise<void>;
|
|
12
|
+
resolve?: () => void;
|
|
13
|
+
reject?: (error: Error) => void;
|
|
14
|
+
abort?: () => void | Promise<void>;
|
|
15
|
+
aborted?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* エンキュー結果の基本インターフェース
|
|
19
|
+
*/
|
|
20
|
+
export interface EnqueueResult {
|
|
21
|
+
success: boolean;
|
|
22
|
+
taskId: number;
|
|
23
|
+
promise?: Promise<void>;
|
|
24
|
+
queueLength: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* キューステータス
|
|
28
|
+
*/
|
|
29
|
+
export interface QueueStatus {
|
|
30
|
+
queueLength: number;
|
|
31
|
+
isProcessing: boolean;
|
|
32
|
+
nextTaskId: number | null;
|
|
33
|
+
currentTaskId: number | null;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* クリア結果
|
|
37
|
+
*/
|
|
38
|
+
export interface ClearResult {
|
|
39
|
+
removedCount: number;
|
|
40
|
+
aborted: boolean;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAElB,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAEhC,KAAK,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/queue/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/speech-queue.d.ts
CHANGED
|
@@ -1,52 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* src/
|
|
3
|
-
*
|
|
2
|
+
* src/speech-queue.ts: 音声合成キュー管理
|
|
3
|
+
* 後方互換性のためのエクスポート
|
|
4
4
|
*/
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
private processCallback;
|
|
8
|
-
private speechQueue;
|
|
9
|
-
private isProcessing;
|
|
10
|
-
private taskIdCounter;
|
|
11
|
-
private errors;
|
|
12
|
-
constructor(processCallback: (task: SpeechTask) => Promise<void>);
|
|
13
|
-
/**
|
|
14
|
-
* 音声タスクをキューに追加(同期的)
|
|
15
|
-
*/
|
|
16
|
-
enqueue(text: string, options?: SynthesizeOptions): SynthesizeResult;
|
|
17
|
-
/**
|
|
18
|
-
* 音声タスクをキューに追加して完了を待つ
|
|
19
|
-
*/
|
|
20
|
-
enqueueAndWait(text: string, options?: SynthesizeOptions): Promise<SynthesizeResult>;
|
|
21
|
-
/**
|
|
22
|
-
* キューに入っているすべてのタスクの完了を待つ
|
|
23
|
-
* @returns エラーが発生した場合はエラーリストを含む結果を返す
|
|
24
|
-
*/
|
|
25
|
-
waitForAllTasks(): Promise<{
|
|
26
|
-
errors: Array<{
|
|
27
|
-
taskId: number;
|
|
28
|
-
error: Error;
|
|
29
|
-
}>;
|
|
30
|
-
}>;
|
|
31
|
-
/**
|
|
32
|
-
* キューの処理を開始
|
|
33
|
-
*/
|
|
34
|
-
private processQueue;
|
|
35
|
-
/**
|
|
36
|
-
* タスクの処理を実行
|
|
37
|
-
*/
|
|
38
|
-
private processTask;
|
|
39
|
-
/**
|
|
40
|
-
* キューの状態を取得
|
|
41
|
-
*/
|
|
42
|
-
getStatus(): {
|
|
43
|
-
queueLength: number;
|
|
44
|
-
isProcessing: boolean;
|
|
45
|
-
nextTaskId: number | null;
|
|
46
|
-
};
|
|
47
|
-
/**
|
|
48
|
-
* キューをクリア
|
|
49
|
-
*/
|
|
50
|
-
clear(): void;
|
|
51
|
-
}
|
|
5
|
+
export { SpeechQueue } from './queue/speech-queue.js';
|
|
6
|
+
export type { SpeechTask } from './queue/speech-queue.js';
|
|
52
7
|
//# sourceMappingURL=speech-queue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech-queue.d.ts","sourceRoot":"","sources":["../src/speech-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"speech-queue.d.ts","sourceRoot":"","sources":["../src/speech-queue.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
|