@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.
- package/LICENSE +14 -14
- package/dist/accent-utils.d.ts +93 -0
- package/dist/accent-utils.d.ts.map +1 -0
- package/dist/accent-utils.js +211 -0
- package/dist/accent-utils.js.map +1 -0
- package/dist/api.d.ts +40 -2
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +90 -0
- package/dist/api.js.map +1 -1
- package/dist/cache-policy.d.ts +21 -0
- package/dist/cache-policy.d.ts.map +1 -0
- package/dist/cache-policy.js +31 -0
- package/dist/cache-policy.js.map +1 -0
- package/dist/client.d.ts +28 -119
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +48 -417
- package/dist/client.js.map +1 -1
- package/dist/effect/config.d.ts +43 -0
- package/dist/effect/config.d.ts.map +1 -0
- package/dist/effect/config.js +45 -0
- package/dist/effect/config.js.map +1 -0
- package/dist/effect/context.d.ts +33 -0
- package/dist/effect/context.d.ts.map +1 -0
- package/dist/effect/context.js +10 -0
- package/dist/effect/context.js.map +1 -0
- package/dist/effect/errors.d.ts +130 -0
- package/dist/effect/errors.d.ts.map +1 -0
- package/dist/effect/errors.js +121 -0
- package/dist/effect/errors.js.map +1 -0
- package/dist/effect/index.d.ts +34 -0
- package/dist/effect/index.d.ts.map +1 -0
- package/dist/effect/index.js +67 -0
- package/dist/effect/index.js.map +1 -0
- package/dist/effect/queue-manager.d.ts +34 -0
- package/dist/effect/queue-manager.d.ts.map +1 -0
- package/dist/effect/queue-manager.js +59 -0
- package/dist/effect/queue-manager.js.map +1 -0
- package/dist/effect/services/api-service.d.ts +58 -0
- package/dist/effect/services/api-service.d.ts.map +1 -0
- package/dist/effect/services/api-service.js +90 -0
- package/dist/effect/services/api-service.js.map +1 -0
- package/dist/effect/services/audio-generator-service.d.ts +78 -0
- package/dist/effect/services/audio-generator-service.d.ts.map +1 -0
- package/dist/effect/services/audio-generator-service.js +187 -0
- package/dist/effect/services/audio-generator-service.js.map +1 -0
- package/dist/effect/services/audio-player-service.d.ts +101 -0
- package/dist/effect/services/audio-player-service.d.ts.map +1 -0
- package/dist/effect/services/audio-player-service.js +297 -0
- package/dist/effect/services/audio-player-service.js.map +1 -0
- package/dist/effect/services/event-manager-service.d.ts +96 -0
- package/dist/effect/services/event-manager-service.d.ts.map +1 -0
- package/dist/effect/services/event-manager-service.js +208 -0
- package/dist/effect/services/event-manager-service.js.map +1 -0
- package/dist/effect/services/file-manager-service.d.ts +91 -0
- package/dist/effect/services/file-manager-service.d.ts.map +1 -0
- package/dist/effect/services/file-manager-service.js +215 -0
- package/dist/effect/services/file-manager-service.js.map +1 -0
- package/dist/effect/utils.d.ts +118 -0
- package/dist/effect/utils.d.ts.map +1 -0
- package/dist/effect/utils.js +186 -0
- package/dist/effect/utils.js.map +1 -0
- package/dist/error.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/playback/node-playback-strategy.d.ts.map +1 -1
- package/dist/playback/node-playback-strategy.js +2 -6
- package/dist/playback/node-playback-strategy.js.map +1 -1
- package/dist/player.d.ts +110 -0
- package/dist/player.d.ts.map +1 -0
- package/dist/player.js +183 -0
- package/dist/player.js.map +1 -0
- package/dist/queue/audio-player.d.ts +44 -0
- package/dist/queue/audio-player.d.ts.map +1 -0
- package/dist/queue/audio-player.js +344 -0
- package/dist/queue/audio-player.js.map +1 -0
- package/dist/queue/file-manager.js +9 -9
- package/dist/queue/file-manager.js.map +1 -1
- package/dist/queue/manager.d.ts +134 -0
- package/dist/queue/manager.d.ts.map +1 -0
- package/dist/queue/manager.js +564 -0
- package/dist/queue/manager.js.map +1 -0
- package/dist/queue/queue-service.d.ts.map +1 -1
- package/dist/queue/queue-service.js +20 -6
- package/dist/queue/queue-service.js.map +1 -1
- package/dist/queue/types.d.ts +3 -1
- package/dist/queue/types.d.ts.map +1 -1
- package/dist/queue/types.js.map +1 -1
- package/dist/services/dictionary-service.d.ts +35 -0
- package/dist/services/dictionary-service.d.ts.map +1 -0
- package/dist/services/dictionary-service.js +188 -0
- package/dist/services/dictionary-service.js.map +1 -0
- package/dist/services/speech-service.d.ts +43 -0
- package/dist/services/speech-service.d.ts.map +1 -0
- package/dist/services/speech-service.js +236 -0
- package/dist/services/speech-service.js.map +1 -0
- package/dist/shared-queue-manager.d.ts +119 -0
- package/dist/shared-queue-manager.d.ts.map +1 -0
- package/dist/shared-queue-manager.js +487 -0
- package/dist/shared-queue-manager.js.map +1 -0
- package/dist/state/queue-state-machine.d.ts.map +1 -1
- package/dist/state/queue-state-machine.js +13 -0
- package/dist/state/queue-state-machine.js.map +1 -1
- package/dist/state/types.d.ts +2 -0
- package/dist/state/types.d.ts.map +1 -1
- package/dist/state/types.js.map +1 -1
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +16 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +36 -0
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Effect.ts configuration and infrastructure
|
|
4
|
+
* Provides centralized setup for Effect-based components
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.AppLayer = exports.LoggerLive = exports.AppConfigFromEnv = exports.AppConfigLive = exports.AppConfigContext = exports.defaultConfig = void 0;
|
|
8
|
+
const effect_1 = require("effect");
|
|
9
|
+
/**
|
|
10
|
+
* Default application configuration
|
|
11
|
+
*/
|
|
12
|
+
exports.defaultConfig = {
|
|
13
|
+
voicevoxUrl: process.env.VOICEVOX_URL || 'http://localhost:50021',
|
|
14
|
+
defaultSpeaker: Number(process.env.VOICEVOX_DEFAULT_SPEAKER) || 1,
|
|
15
|
+
defaultSpeedScale: Number(process.env.VOICEVOX_DEFAULT_SPEED_SCALE) || 1.0,
|
|
16
|
+
defaultImmediate: process.env.VOICEVOX_DEFAULT_IMMEDIATE !== 'false',
|
|
17
|
+
defaultWaitForStart: process.env.VOICEVOX_DEFAULT_WAIT_FOR_START === 'true',
|
|
18
|
+
defaultWaitForEnd: process.env.VOICEVOX_DEFAULT_WAIT_FOR_END === 'true',
|
|
19
|
+
prefetchSize: Number(process.env.VOICEVOX_PREFETCH_SIZE) || 2,
|
|
20
|
+
logLevel: effect_1.LogLevel.Info,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Application configuration context
|
|
24
|
+
*/
|
|
25
|
+
exports.AppConfigContext = effect_1.Context.GenericTag('@voicevox/AppConfig');
|
|
26
|
+
/**
|
|
27
|
+
* Layer providing the application configuration
|
|
28
|
+
*/
|
|
29
|
+
exports.AppConfigLive = effect_1.Layer.succeed(exports.AppConfigContext, exports.defaultConfig);
|
|
30
|
+
/**
|
|
31
|
+
* Layer providing configuration from environment variables
|
|
32
|
+
*/
|
|
33
|
+
exports.AppConfigFromEnv = effect_1.Layer.effect(exports.AppConfigContext, effect_1.Effect.sync(() => exports.defaultConfig));
|
|
34
|
+
/**
|
|
35
|
+
* Logger configuration layer
|
|
36
|
+
*/
|
|
37
|
+
exports.LoggerLive = effect_1.Logger.replace(effect_1.Logger.defaultLogger, effect_1.Logger.make(({ logLevel, message }) => {
|
|
38
|
+
const timestamp = new Date().toISOString();
|
|
39
|
+
console.log(`[${timestamp}] [${logLevel}] ${message}`);
|
|
40
|
+
}));
|
|
41
|
+
/**
|
|
42
|
+
* Main application layer combining all infrastructure
|
|
43
|
+
*/
|
|
44
|
+
exports.AppLayer = effect_1.Layer.mergeAll(exports.AppConfigLive, exports.LoggerLive);
|
|
45
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/effect/config.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mCAAiF;AAgBjF;;GAEG;AACU,QAAA,aAAa,GAAc;IACtC,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,wBAAwB;IACjE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC;IACjE,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,GAAG;IAC1E,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,OAAO;IACpE,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,+BAA+B,KAAK,MAAM;IAC3E,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,MAAM;IACvE,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC;IAC7D,QAAQ,EAAE,iBAAQ,CAAC,IAAI;CACxB,CAAA;AAED;;GAEG;AACU,QAAA,gBAAgB,GAAG,gBAAO,CAAC,UAAU,CAAY,qBAAqB,CAAC,CAAA;AAEpF;;GAEG;AACU,QAAA,aAAa,GAAG,cAAK,CAAC,OAAO,CAAC,wBAAgB,EAAE,qBAAa,CAAC,CAAA;AAE3E;;GAEG;AACU,QAAA,gBAAgB,GAAG,cAAK,CAAC,MAAM,CAC1C,wBAAgB,EAChB,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,qBAAa,CAAC,CACjC,CAAA;AAED;;GAEG;AACU,QAAA,UAAU,GAAG,eAAM,CAAC,OAAO,CACtC,eAAM,CAAC,aAAa,EACpB,eAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;IACpC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,SAAS,MAAM,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAA;AACxD,CAAC,CAAC,CACH,CAAA;AAED;;GAEG;AACU,QAAA,QAAQ,GAAG,cAAK,CAAC,QAAQ,CAAC,qBAAa,EAAE,kBAAU,CAAC,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effect Context definitions for dependency injection
|
|
3
|
+
* Provides clean separation of concerns and testable components
|
|
4
|
+
*/
|
|
5
|
+
import { Context, type Effect } from 'effect';
|
|
6
|
+
import type { VoicevoxApi } from '../api';
|
|
7
|
+
/**
|
|
8
|
+
* VOICEVOX API client context
|
|
9
|
+
*/
|
|
10
|
+
export interface VoicevoxApiService {
|
|
11
|
+
readonly getApi: () => VoicevoxApi;
|
|
12
|
+
readonly generateQuery: (text: string, speaker?: number) => Effect.Effect<any, any>;
|
|
13
|
+
readonly synthesize: (query: any, speaker?: number) => Effect.Effect<ArrayBuffer, any>;
|
|
14
|
+
readonly getSpeakers: () => Effect.Effect<any[], any>;
|
|
15
|
+
readonly getSpeakerInfo: (uuid: string) => Effect.Effect<any, any>;
|
|
16
|
+
}
|
|
17
|
+
export declare const VoicevoxApiContext: Context.Tag<VoicevoxApiService, VoicevoxApiService>;
|
|
18
|
+
/**
|
|
19
|
+
* Core speech segment definition
|
|
20
|
+
*/
|
|
21
|
+
export interface SpeechSegment {
|
|
22
|
+
readonly text: string;
|
|
23
|
+
readonly speaker?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Playback options
|
|
27
|
+
*/
|
|
28
|
+
export interface PlaybackOptions {
|
|
29
|
+
readonly immediate?: boolean;
|
|
30
|
+
readonly waitForStart?: boolean;
|
|
31
|
+
readonly waitForEnd?: boolean;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/effect/context.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAGzC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,WAAW,CAAA;IAClC,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACnF,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;IACtF,QAAQ,CAAC,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;IACrD,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;CACnE;AAED,eAAO,MAAM,kBAAkB,qDAAkE,CAAA;AAEjG;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC9B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Effect Context definitions for dependency injection
|
|
4
|
+
* Provides clean separation of concerns and testable components
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.VoicevoxApiContext = void 0;
|
|
8
|
+
const effect_1 = require("effect");
|
|
9
|
+
exports.VoicevoxApiContext = effect_1.Context.GenericTag('@voicevox/VoicevoxApi');
|
|
10
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/effect/context.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mCAA6C;AAehC,QAAA,kBAAkB,GAAG,gBAAO,CAAC,UAAU,CAAqB,uBAAuB,CAAC,CAAA"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effect-based error handling infrastructure
|
|
3
|
+
* Provides structured error types and handling utilities
|
|
4
|
+
*/
|
|
5
|
+
import { Effect } from 'effect';
|
|
6
|
+
import { VoicevoxErrorCode } from '../error';
|
|
7
|
+
declare const VoicevoxEffectError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
8
|
+
readonly _tag: "VoicevoxEffectError";
|
|
9
|
+
} & Readonly<A>;
|
|
10
|
+
/**
|
|
11
|
+
* Base error class for all VOICEVOX Effect errors
|
|
12
|
+
*/
|
|
13
|
+
export declare class VoicevoxEffectError extends VoicevoxEffectError_base<{
|
|
14
|
+
readonly code: VoicevoxErrorCode;
|
|
15
|
+
readonly message: string;
|
|
16
|
+
readonly originalError?: unknown;
|
|
17
|
+
}> {
|
|
18
|
+
get name(): string;
|
|
19
|
+
getDetailedMessage(): string;
|
|
20
|
+
}
|
|
21
|
+
declare const ApiConnectionError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
22
|
+
readonly _tag: "ApiConnectionError";
|
|
23
|
+
} & Readonly<A>;
|
|
24
|
+
/**
|
|
25
|
+
* Specific error types for different operation categories
|
|
26
|
+
*/
|
|
27
|
+
export declare class ApiConnectionError extends ApiConnectionError_base<{
|
|
28
|
+
readonly message: string;
|
|
29
|
+
readonly url?: string;
|
|
30
|
+
readonly originalError?: unknown;
|
|
31
|
+
}> {
|
|
32
|
+
}
|
|
33
|
+
declare const QueryGenerationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
34
|
+
readonly _tag: "QueryGenerationError";
|
|
35
|
+
} & Readonly<A>;
|
|
36
|
+
export declare class QueryGenerationError extends QueryGenerationError_base<{
|
|
37
|
+
readonly message: string;
|
|
38
|
+
readonly text?: string;
|
|
39
|
+
readonly speakerId?: number;
|
|
40
|
+
readonly originalError?: unknown;
|
|
41
|
+
}> {
|
|
42
|
+
}
|
|
43
|
+
declare const SynthesisError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
44
|
+
readonly _tag: "SynthesisError";
|
|
45
|
+
} & Readonly<A>;
|
|
46
|
+
export declare class SynthesisError extends SynthesisError_base<{
|
|
47
|
+
readonly message: string;
|
|
48
|
+
readonly speakerId?: number;
|
|
49
|
+
readonly originalError?: unknown;
|
|
50
|
+
}> {
|
|
51
|
+
}
|
|
52
|
+
declare const FileOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
53
|
+
readonly _tag: "FileOperationError";
|
|
54
|
+
} & Readonly<A>;
|
|
55
|
+
export declare class FileOperationError extends FileOperationError_base<{
|
|
56
|
+
readonly message: string;
|
|
57
|
+
readonly filePath?: string;
|
|
58
|
+
readonly operation: 'read' | 'write' | 'delete';
|
|
59
|
+
readonly originalError?: unknown;
|
|
60
|
+
}> {
|
|
61
|
+
}
|
|
62
|
+
declare const PlaybackError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
63
|
+
readonly _tag: "PlaybackError";
|
|
64
|
+
} & Readonly<A>;
|
|
65
|
+
export declare class PlaybackError extends PlaybackError_base<{
|
|
66
|
+
readonly message: string;
|
|
67
|
+
readonly filePath?: string;
|
|
68
|
+
readonly originalError?: unknown;
|
|
69
|
+
}> {
|
|
70
|
+
}
|
|
71
|
+
declare const QueueOperationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
72
|
+
readonly _tag: "QueueOperationError";
|
|
73
|
+
} & Readonly<A>;
|
|
74
|
+
export declare class QueueOperationError extends QueueOperationError_base<{
|
|
75
|
+
readonly message: string;
|
|
76
|
+
readonly itemId?: string;
|
|
77
|
+
readonly operation: 'enqueue' | 'dequeue' | 'clear' | 'process';
|
|
78
|
+
readonly originalError?: unknown;
|
|
79
|
+
}> {
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Error constructors for easier creation
|
|
83
|
+
*/
|
|
84
|
+
export declare const makeApiConnectionError: (message: string, url?: string, originalError?: unknown) => ApiConnectionError;
|
|
85
|
+
export declare const makeQueryGenerationError: (message: string, text?: string, speakerId?: number, originalError?: unknown) => QueryGenerationError;
|
|
86
|
+
export declare const makeSynthesisError: (message: string, speakerId?: number, originalError?: unknown) => SynthesisError;
|
|
87
|
+
export declare const makeFileOperationError: (message: string, operation: "read" | "write" | "delete", filePath?: string, originalError?: unknown) => FileOperationError;
|
|
88
|
+
export declare const makePlaybackError: (message: string, filePath?: string, originalError?: unknown) => PlaybackError;
|
|
89
|
+
export declare const makeQueueOperationError: (message: string, operation: "enqueue" | "dequeue" | "clear" | "process", itemId?: string, originalError?: unknown) => QueueOperationError;
|
|
90
|
+
/**
|
|
91
|
+
* Effect utilities for error handling
|
|
92
|
+
*/
|
|
93
|
+
/**
|
|
94
|
+
* Safely execute an async operation with error mapping
|
|
95
|
+
*/
|
|
96
|
+
export declare const safeAsync: <A, E>(asyncFn: () => Promise<A>, errorMapper: (error: unknown) => E) => Effect.Effect<A, E>;
|
|
97
|
+
/**
|
|
98
|
+
* Safely execute a sync operation with error mapping
|
|
99
|
+
*/
|
|
100
|
+
export declare const safeSync: <A, E>(syncFn: () => A, errorMapper: (error: unknown) => E) => Effect.Effect<A, E>;
|
|
101
|
+
/**
|
|
102
|
+
* Retry an effect with exponential backoff
|
|
103
|
+
*/
|
|
104
|
+
export declare const retryWithBackoff: <A, E>(effect: Effect.Effect<A, E>, maxRetries?: number, baseDelay?: number) => Effect.Effect<A, E>;
|
|
105
|
+
/**
|
|
106
|
+
* Retry an effect with jitter to prevent thundering herd
|
|
107
|
+
*/
|
|
108
|
+
export declare const retryWithJitter: <A, E>(effect: Effect.Effect<A, E>, maxRetries?: number, baseDelay?: number) => Effect.Effect<A, E>;
|
|
109
|
+
declare const GeneralError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => import("effect/Cause").YieldableError & {
|
|
110
|
+
readonly _tag: "GeneralError";
|
|
111
|
+
} & Readonly<A>;
|
|
112
|
+
/**
|
|
113
|
+
* General error for common operations
|
|
114
|
+
*/
|
|
115
|
+
export declare class GeneralError extends GeneralError_base<{
|
|
116
|
+
readonly message: string;
|
|
117
|
+
readonly originalError?: unknown;
|
|
118
|
+
}> {
|
|
119
|
+
}
|
|
120
|
+
export declare const makeGeneralError: (message: string, originalError?: unknown) => GeneralError;
|
|
121
|
+
/**
|
|
122
|
+
* Convert an Effect error to a Promise rejection for compatibility
|
|
123
|
+
*/
|
|
124
|
+
export declare const toPromise: <A, E>(effect: Effect.Effect<A, E>) => Promise<A>;
|
|
125
|
+
/**
|
|
126
|
+
* Convert a Promise to an Effect with proper error handling
|
|
127
|
+
*/
|
|
128
|
+
export declare const fromPromise: <A>(promise: Promise<A>, errorMapper?: (error: unknown) => VoicevoxEffectError) => Effect.Effect<A, VoicevoxEffectError>;
|
|
129
|
+
export {};
|
|
130
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/effect/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Effect-based error handling infrastructure
|
|
4
|
+
* Provides structured error types and handling utilities
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.fromPromise = exports.toPromise = exports.makeGeneralError = exports.GeneralError = exports.retryWithJitter = exports.retryWithBackoff = exports.safeSync = exports.safeAsync = exports.makeQueueOperationError = exports.makePlaybackError = exports.makeFileOperationError = exports.makeSynthesisError = exports.makeQueryGenerationError = exports.makeApiConnectionError = exports.QueueOperationError = exports.PlaybackError = exports.FileOperationError = exports.SynthesisError = exports.QueryGenerationError = exports.ApiConnectionError = exports.VoicevoxEffectError = void 0;
|
|
8
|
+
const effect_1 = require("effect");
|
|
9
|
+
const error_1 = require("../error");
|
|
10
|
+
/**
|
|
11
|
+
* Base error class for all VOICEVOX Effect errors
|
|
12
|
+
*/
|
|
13
|
+
class VoicevoxEffectError extends effect_1.Data.TaggedError('VoicevoxEffectError') {
|
|
14
|
+
get name() {
|
|
15
|
+
return 'VoicevoxEffectError';
|
|
16
|
+
}
|
|
17
|
+
getDetailedMessage() {
|
|
18
|
+
let details = `${this.message} [${this.code}]`;
|
|
19
|
+
if (this.originalError instanceof Error) {
|
|
20
|
+
details += `\nOriginal Error: ${this.originalError.message}`;
|
|
21
|
+
if (this.originalError.stack) {
|
|
22
|
+
details += `\nStack: ${this.originalError.stack}`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return details;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.VoicevoxEffectError = VoicevoxEffectError;
|
|
29
|
+
/**
|
|
30
|
+
* Specific error types for different operation categories
|
|
31
|
+
*/
|
|
32
|
+
class ApiConnectionError extends effect_1.Data.TaggedError('ApiConnectionError') {
|
|
33
|
+
}
|
|
34
|
+
exports.ApiConnectionError = ApiConnectionError;
|
|
35
|
+
class QueryGenerationError extends effect_1.Data.TaggedError('QueryGenerationError') {
|
|
36
|
+
}
|
|
37
|
+
exports.QueryGenerationError = QueryGenerationError;
|
|
38
|
+
class SynthesisError extends effect_1.Data.TaggedError('SynthesisError') {
|
|
39
|
+
}
|
|
40
|
+
exports.SynthesisError = SynthesisError;
|
|
41
|
+
class FileOperationError extends effect_1.Data.TaggedError('FileOperationError') {
|
|
42
|
+
}
|
|
43
|
+
exports.FileOperationError = FileOperationError;
|
|
44
|
+
class PlaybackError extends effect_1.Data.TaggedError('PlaybackError') {
|
|
45
|
+
}
|
|
46
|
+
exports.PlaybackError = PlaybackError;
|
|
47
|
+
class QueueOperationError extends effect_1.Data.TaggedError('QueueOperationError') {
|
|
48
|
+
}
|
|
49
|
+
exports.QueueOperationError = QueueOperationError;
|
|
50
|
+
/**
|
|
51
|
+
* Error constructors for easier creation
|
|
52
|
+
*/
|
|
53
|
+
const makeApiConnectionError = (message, url, originalError) => new ApiConnectionError({ message, url, originalError });
|
|
54
|
+
exports.makeApiConnectionError = makeApiConnectionError;
|
|
55
|
+
const makeQueryGenerationError = (message, text, speakerId, originalError) => new QueryGenerationError({ message, text, speakerId, originalError });
|
|
56
|
+
exports.makeQueryGenerationError = makeQueryGenerationError;
|
|
57
|
+
const makeSynthesisError = (message, speakerId, originalError) => new SynthesisError({ message, speakerId, originalError });
|
|
58
|
+
exports.makeSynthesisError = makeSynthesisError;
|
|
59
|
+
const makeFileOperationError = (message, operation, filePath, originalError) => new FileOperationError({ message, filePath, operation, originalError });
|
|
60
|
+
exports.makeFileOperationError = makeFileOperationError;
|
|
61
|
+
const makePlaybackError = (message, filePath, originalError) => new PlaybackError({ message, filePath, originalError });
|
|
62
|
+
exports.makePlaybackError = makePlaybackError;
|
|
63
|
+
const makeQueueOperationError = (message, operation, itemId, originalError) => new QueueOperationError({ message, itemId, operation, originalError });
|
|
64
|
+
exports.makeQueueOperationError = makeQueueOperationError;
|
|
65
|
+
/**
|
|
66
|
+
* Effect utilities for error handling
|
|
67
|
+
*/
|
|
68
|
+
/**
|
|
69
|
+
* Safely execute an async operation with error mapping
|
|
70
|
+
*/
|
|
71
|
+
const safeAsync = (asyncFn, errorMapper) => effect_1.Effect.tryPromise({
|
|
72
|
+
try: asyncFn,
|
|
73
|
+
catch: errorMapper,
|
|
74
|
+
});
|
|
75
|
+
exports.safeAsync = safeAsync;
|
|
76
|
+
/**
|
|
77
|
+
* Safely execute a sync operation with error mapping
|
|
78
|
+
*/
|
|
79
|
+
const safeSync = (syncFn, errorMapper) => effect_1.Effect.try({
|
|
80
|
+
try: syncFn,
|
|
81
|
+
catch: errorMapper,
|
|
82
|
+
});
|
|
83
|
+
exports.safeSync = safeSync;
|
|
84
|
+
/**
|
|
85
|
+
* Retry an effect with exponential backoff
|
|
86
|
+
*/
|
|
87
|
+
const retryWithBackoff = (effect, maxRetries = 3, baseDelay = 100) => effect.pipe(effect_1.Effect.retry(effect_1.Schedule.exponential(baseDelay).pipe(effect_1.Schedule.compose(effect_1.Schedule.recurs(maxRetries)))));
|
|
88
|
+
exports.retryWithBackoff = retryWithBackoff;
|
|
89
|
+
/**
|
|
90
|
+
* Retry an effect with jitter to prevent thundering herd
|
|
91
|
+
*/
|
|
92
|
+
const retryWithJitter = (effect, maxRetries = 3, baseDelay = 100) => effect.pipe(effect_1.Effect.retry(effect_1.Schedule.exponential(baseDelay)
|
|
93
|
+
.pipe(effect_1.Schedule.compose(effect_1.Schedule.recurs(maxRetries)))
|
|
94
|
+
.pipe(effect_1.Schedule.jittered)));
|
|
95
|
+
exports.retryWithJitter = retryWithJitter;
|
|
96
|
+
/**
|
|
97
|
+
* General error for common operations
|
|
98
|
+
*/
|
|
99
|
+
class GeneralError extends effect_1.Data.TaggedError('GeneralError') {
|
|
100
|
+
}
|
|
101
|
+
exports.GeneralError = GeneralError;
|
|
102
|
+
const makeGeneralError = (message, originalError) => new GeneralError({ message, originalError });
|
|
103
|
+
exports.makeGeneralError = makeGeneralError;
|
|
104
|
+
/**
|
|
105
|
+
* Convert an Effect error to a Promise rejection for compatibility
|
|
106
|
+
*/
|
|
107
|
+
const toPromise = (effect) => effect_1.Effect.runPromise(effect);
|
|
108
|
+
exports.toPromise = toPromise;
|
|
109
|
+
/**
|
|
110
|
+
* Convert a Promise to an Effect with proper error handling
|
|
111
|
+
*/
|
|
112
|
+
const fromPromise = (promise, errorMapper = (error) => new VoicevoxEffectError({
|
|
113
|
+
code: error_1.VoicevoxErrorCode.UNKNOWN_ERROR,
|
|
114
|
+
message: error instanceof Error ? error.message : String(error),
|
|
115
|
+
originalError: error,
|
|
116
|
+
})) => effect_1.Effect.tryPromise({
|
|
117
|
+
try: () => promise,
|
|
118
|
+
catch: errorMapper,
|
|
119
|
+
});
|
|
120
|
+
exports.fromPromise = fromPromise;
|
|
121
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/effect/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effect.ts infrastructure for VOICEVOX
|
|
3
|
+
*
|
|
4
|
+
* This module provides a complete Effect-based foundation for:
|
|
5
|
+
* - Structured error handling with detailed error types
|
|
6
|
+
* - Dependency injection through Context system
|
|
7
|
+
* - Resource management with automatic cleanup
|
|
8
|
+
* - Async operation coordination with fibers
|
|
9
|
+
* - Configuration management
|
|
10
|
+
* - Logging and observability
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* ```ts
|
|
14
|
+
* import { Effect } from 'effect'
|
|
15
|
+
* import { AppLayer, VoicevoxApiContext, safeAsync } from './effect'
|
|
16
|
+
*
|
|
17
|
+
* const program = Effect.gen(function* () {
|
|
18
|
+
* const api = yield* VoicevoxApiContext
|
|
19
|
+
* // ... your Effect-based logic
|
|
20
|
+
* })
|
|
21
|
+
*
|
|
22
|
+
* Effect.runPromise(program.pipe(Effect.provide(AppLayer)))
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export * from './config';
|
|
26
|
+
export * from './errors';
|
|
27
|
+
export * from './context';
|
|
28
|
+
export * from './utils';
|
|
29
|
+
export * from './queue-manager';
|
|
30
|
+
export * from './services/api-service';
|
|
31
|
+
export * from './services/file-manager-service';
|
|
32
|
+
export * from './services/audio-player-service';
|
|
33
|
+
export { Effect, Context, Layer, Scope, Logger, Schedule, Duration, Option, Either } from 'effect';
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,cAAc,UAAU,CAAA;AAGxB,cAAc,UAAU,CAAA;AAGxB,cAAc,WAAW,CAAA;AAGzB,cAAc,SAAS,CAAA;AAGvB,cAAc,iBAAiB,CAAA;AAG/B,cAAc,wBAAwB,CAAA;AACtC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,iCAAiC,CAAA;AAG/C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Effect.ts infrastructure for VOICEVOX
|
|
4
|
+
*
|
|
5
|
+
* This module provides a complete Effect-based foundation for:
|
|
6
|
+
* - Structured error handling with detailed error types
|
|
7
|
+
* - Dependency injection through Context system
|
|
8
|
+
* - Resource management with automatic cleanup
|
|
9
|
+
* - Async operation coordination with fibers
|
|
10
|
+
* - Configuration management
|
|
11
|
+
* - Logging and observability
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { Effect } from 'effect'
|
|
16
|
+
* import { AppLayer, VoicevoxApiContext, safeAsync } from './effect'
|
|
17
|
+
*
|
|
18
|
+
* const program = Effect.gen(function* () {
|
|
19
|
+
* const api = yield* VoicevoxApiContext
|
|
20
|
+
* // ... your Effect-based logic
|
|
21
|
+
* })
|
|
22
|
+
*
|
|
23
|
+
* Effect.runPromise(program.pipe(Effect.provide(AppLayer)))
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
27
|
+
if (k2 === undefined) k2 = k;
|
|
28
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
29
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
30
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
31
|
+
}
|
|
32
|
+
Object.defineProperty(o, k2, desc);
|
|
33
|
+
}) : (function(o, m, k, k2) {
|
|
34
|
+
if (k2 === undefined) k2 = k;
|
|
35
|
+
o[k2] = m[k];
|
|
36
|
+
}));
|
|
37
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
38
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.Either = exports.Option = exports.Duration = exports.Schedule = exports.Logger = exports.Scope = exports.Layer = exports.Context = exports.Effect = void 0;
|
|
42
|
+
// Configuration and setup
|
|
43
|
+
__exportStar(require("./config"), exports);
|
|
44
|
+
// Error handling
|
|
45
|
+
__exportStar(require("./errors"), exports);
|
|
46
|
+
// Context definitions for dependency injection
|
|
47
|
+
__exportStar(require("./context"), exports);
|
|
48
|
+
// Utility functions and common patterns
|
|
49
|
+
__exportStar(require("./utils"), exports);
|
|
50
|
+
// Speech synthesis management
|
|
51
|
+
__exportStar(require("./queue-manager"), exports);
|
|
52
|
+
// Service layers
|
|
53
|
+
__exportStar(require("./services/api-service"), exports);
|
|
54
|
+
__exportStar(require("./services/file-manager-service"), exports);
|
|
55
|
+
__exportStar(require("./services/audio-player-service"), exports);
|
|
56
|
+
// Re-export commonly used Effect modules for convenience
|
|
57
|
+
var effect_1 = require("effect");
|
|
58
|
+
Object.defineProperty(exports, "Effect", { enumerable: true, get: function () { return effect_1.Effect; } });
|
|
59
|
+
Object.defineProperty(exports, "Context", { enumerable: true, get: function () { return effect_1.Context; } });
|
|
60
|
+
Object.defineProperty(exports, "Layer", { enumerable: true, get: function () { return effect_1.Layer; } });
|
|
61
|
+
Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return effect_1.Scope; } });
|
|
62
|
+
Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return effect_1.Logger; } });
|
|
63
|
+
Object.defineProperty(exports, "Schedule", { enumerable: true, get: function () { return effect_1.Schedule; } });
|
|
64
|
+
Object.defineProperty(exports, "Duration", { enumerable: true, get: function () { return effect_1.Duration; } });
|
|
65
|
+
Object.defineProperty(exports, "Option", { enumerable: true, get: function () { return effect_1.Option; } });
|
|
66
|
+
Object.defineProperty(exports, "Either", { enumerable: true, get: function () { return effect_1.Either; } });
|
|
67
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effect/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;;;;;;;;;;;;;AAEH,0BAA0B;AAC1B,2CAAwB;AAExB,iBAAiB;AACjB,2CAAwB;AAExB,+CAA+C;AAC/C,4CAAyB;AAEzB,wCAAwC;AACxC,0CAAuB;AAEvB,8BAA8B;AAC9B,kDAA+B;AAE/B,iBAAiB;AACjB,yDAAsC;AACtC,kEAA+C;AAC/C,kEAA+C;AAE/C,yDAAyD;AACzD,iCAAkG;AAAzF,gGAAA,MAAM,OAAA;AAAE,iGAAA,OAAO,OAAA;AAAE,+FAAA,KAAK,OAAA;AAAE,+FAAA,KAAK,OAAA;AAAE,gGAAA,MAAM,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,kGAAA,QAAQ,OAAA;AAAE,gGAAA,MAAM,OAAA;AAAE,gGAAA,MAAM,OAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simplified Effect-based voice synthesis manager
|
|
3
|
+
* Replaces complex queue system with direct Effect-based processing
|
|
4
|
+
*/
|
|
5
|
+
import { Context, Effect, Layer } from 'effect';
|
|
6
|
+
import type { PlaybackOptions, SpeechSegment } from './context';
|
|
7
|
+
import { type VoicevoxApiService } from './context';
|
|
8
|
+
import type { FileOperationError, PlaybackError } from './errors';
|
|
9
|
+
/**
|
|
10
|
+
* Speech synthesis service interface
|
|
11
|
+
*/
|
|
12
|
+
export interface SpeechSynthesisService {
|
|
13
|
+
readonly speak: (segments: readonly SpeechSegment[], options?: PlaybackOptions) => Effect.Effect<string, PlaybackError | FileOperationError, VoicevoxApiService>;
|
|
14
|
+
readonly generateAudioFile: (text: string, outputPath: string, speaker?: number, speedScale?: number) => Effect.Effect<string, PlaybackError | FileOperationError, VoicevoxApiService>;
|
|
15
|
+
readonly clearQueue: () => Effect.Effect<void, never>;
|
|
16
|
+
}
|
|
17
|
+
export declare const SpeechSynthesisContext: Context.Tag<SpeechSynthesisService, SpeechSynthesisService>;
|
|
18
|
+
/**
|
|
19
|
+
* Simple speech synthesis implementation
|
|
20
|
+
*/
|
|
21
|
+
export declare class SpeechSynthesisServiceImpl implements SpeechSynthesisService {
|
|
22
|
+
speak: (segments: readonly SpeechSegment[], options?: PlaybackOptions) => Effect.Effect<string, PlaybackError | FileOperationError, VoicevoxApiService>;
|
|
23
|
+
generateAudioFile: (text: string, outputPath: string, speaker?: number, speedScale?: number) => Effect.Effect<string, PlaybackError | FileOperationError, VoicevoxApiService>;
|
|
24
|
+
clearQueue: () => Effect.Effect<void, never>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create speech synthesis service
|
|
28
|
+
*/
|
|
29
|
+
export declare const makeSpeechSynthesisService: () => Effect.Effect<SpeechSynthesisService, never>;
|
|
30
|
+
/**
|
|
31
|
+
* Layer providing speech synthesis service
|
|
32
|
+
*/
|
|
33
|
+
export declare const SpeechSynthesisServiceLive: Layer.Layer<SpeechSynthesisService, never, VoicevoxApiService>;
|
|
34
|
+
//# sourceMappingURL=queue-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-manager.d.ts","sourceRoot":"","sources":["../../src/effect/queue-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC/D,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAA;AACvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAIjE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAE,OAAO,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;IAChK,QAAQ,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,kBAAkB,CAAC,CAAA;IACtL,QAAQ,CAAC,UAAU,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;CACtD;AAED,eAAO,MAAM,sBAAsB,6DAA0E,CAAA;AAE7G;;GAEG;AACH,qBAAa,0BAA2B,YAAW,sBAAsB;IAEvE,KAAK,GAAI,UAAU,SAAS,aAAa,EAAE,EAAE,UAAU,eAAe,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,kBAAkB,CAAC,CAgBrJ;IAED,iBAAiB,GAAI,MAAM,MAAM,EAAE,YAAY,MAAM,EAAE,UAAU,MAAM,EAAE,aAAa,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,kBAAkB,CAAC,CAkB3K;IAED,UAAU,QAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAO1C;CACF;AAED;;GAEG;AACH,eAAO,MAAM,0BAA0B,QAAO,MAAM,CAAC,MAAM,CAAC,sBAAsB,EAAE,KAAK,CACpC,CAAA;AAErD;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,EAAE,kBAAkB,CAGrG,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Simplified Effect-based voice synthesis manager
|
|
4
|
+
* Replaces complex queue system with direct Effect-based processing
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.SpeechSynthesisServiceLive = exports.makeSpeechSynthesisService = exports.SpeechSynthesisServiceImpl = exports.SpeechSynthesisContext = void 0;
|
|
8
|
+
const effect_1 = require("effect");
|
|
9
|
+
const context_1 = require("./context");
|
|
10
|
+
const utils_1 = require("./utils");
|
|
11
|
+
exports.SpeechSynthesisContext = effect_1.Context.GenericTag('@voicevox/SpeechSynthesis');
|
|
12
|
+
/**
|
|
13
|
+
* Simple speech synthesis implementation
|
|
14
|
+
*/
|
|
15
|
+
class SpeechSynthesisServiceImpl {
|
|
16
|
+
constructor() {
|
|
17
|
+
this.speak = (segments, options) => {
|
|
18
|
+
return (0, utils_1.logTimed)('speechSynthesis-speak', effect_1.Effect.gen(function* () {
|
|
19
|
+
const api = yield* context_1.VoicevoxApiContext;
|
|
20
|
+
// Process segments sequentially
|
|
21
|
+
const results = [];
|
|
22
|
+
for (const segment of segments) {
|
|
23
|
+
const result = `音声合成処理: "${segment.text}" (話者: ${segment.speaker || 1})`;
|
|
24
|
+
results.push(result);
|
|
25
|
+
}
|
|
26
|
+
return `音声合成完了: ${results.length} セグメント処理`;
|
|
27
|
+
}));
|
|
28
|
+
};
|
|
29
|
+
this.generateAudioFile = (text, outputPath, speaker, speedScale) => {
|
|
30
|
+
return (0, utils_1.logTimed)(`speechSynthesis-generateFile-${outputPath}`, effect_1.Effect.gen(function* () {
|
|
31
|
+
const api = yield* context_1.VoicevoxApiContext;
|
|
32
|
+
// Generate query and synthesize audio
|
|
33
|
+
const query = yield* api.generateQuery(text, speaker);
|
|
34
|
+
if (speedScale) {
|
|
35
|
+
query.speedScale = speedScale;
|
|
36
|
+
}
|
|
37
|
+
const audioData = yield* api.synthesize(query, speaker);
|
|
38
|
+
// For now, return success message
|
|
39
|
+
return `音声ファイル生成完了: ${outputPath}`;
|
|
40
|
+
}));
|
|
41
|
+
};
|
|
42
|
+
this.clearQueue = () => {
|
|
43
|
+
return (0, utils_1.logTimed)('speechSynthesis-clearQueue', effect_1.Effect.sync(() => {
|
|
44
|
+
// Simple implementation - no queue to clear
|
|
45
|
+
}));
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.SpeechSynthesisServiceImpl = SpeechSynthesisServiceImpl;
|
|
50
|
+
/**
|
|
51
|
+
* Create speech synthesis service
|
|
52
|
+
*/
|
|
53
|
+
const makeSpeechSynthesisService = () => effect_1.Effect.sync(() => new SpeechSynthesisServiceImpl());
|
|
54
|
+
exports.makeSpeechSynthesisService = makeSpeechSynthesisService;
|
|
55
|
+
/**
|
|
56
|
+
* Layer providing speech synthesis service
|
|
57
|
+
*/
|
|
58
|
+
exports.SpeechSynthesisServiceLive = effect_1.Layer.effect(exports.SpeechSynthesisContext, (0, exports.makeSpeechSynthesisService)());
|
|
59
|
+
//# sourceMappingURL=queue-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue-manager.js","sourceRoot":"","sources":["../../src/effect/queue-manager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mCAA+C;AAG/C,uCAAuE;AAGvE,mCAAkC;AAWrB,QAAA,sBAAsB,GAAG,gBAAO,CAAC,UAAU,CAAyB,2BAA2B,CAAC,CAAA;AAE7G;;GAEG;AACH,MAAa,0BAA0B;IAAvC;QAEE,UAAK,GAAG,CAAC,QAAkC,EAAE,OAAyB,EAAiF,EAAE;YACvJ,OAAO,IAAA,gBAAQ,EACb,uBAAuB,EACvB,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,4BAAkB,CAAA;gBAErC,gCAAgC;gBAChC,MAAM,OAAO,GAAa,EAAE,CAAA;gBAC5B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,MAAM,MAAM,GAAG,YAAY,OAAO,CAAC,IAAI,UAAU,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,CAAA;oBACxE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;gBACtB,CAAC;gBAED,OAAO,WAAW,OAAO,CAAC,MAAM,UAAU,CAAA;YAC5C,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,sBAAiB,GAAG,CAAC,IAAY,EAAE,UAAkB,EAAE,OAAgB,EAAE,UAAmB,EAAiF,EAAE;YAC7K,OAAO,IAAA,gBAAQ,EACb,gCAAgC,UAAU,EAAE,EAC5C,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,4BAAkB,CAAA;gBAErC,sCAAsC;gBACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBACrD,IAAI,UAAU,EAAE,CAAC;oBACf,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;gBAC/B,CAAC;gBAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;gBAEvD,kCAAkC;gBAClC,OAAO,eAAe,UAAU,EAAE,CAAA;YACpC,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;QAED,eAAU,GAAG,GAA+B,EAAE;YAC5C,OAAO,IAAA,gBAAQ,EACb,4BAA4B,EAC5B,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACf,4CAA4C;YAC9C,CAAC,CAAC,CACH,CAAA;QACH,CAAC,CAAA;IACH,CAAC;CAAA;AAhDD,gEAgDC;AAED;;GAEG;AACI,MAAM,0BAA0B,GAAG,GAAiD,EAAE,CAC3F,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAA;AADxC,QAAA,0BAA0B,8BACc;AAErD;;GAEG;AACU,QAAA,0BAA0B,GAAmE,cAAK,CAAC,MAAM,CACpH,8BAAsB,EACtB,IAAA,kCAA0B,GAAE,CAC7B,CAAA"}
|