@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,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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Effect-based VoicevoxApi service implementation
3
+ * Provides structured error handling and resource management for VOICEVOX API operations
4
+ */
5
+ import { Effect, Layer } from 'effect';
6
+ import { VoicevoxApi } from '../../api';
7
+ import type { AudioQuery, Speaker } from '../../types';
8
+ import { type VoicevoxApiService } from '../context';
9
+ import { type ApiConnectionError, type QueryGenerationError, type SynthesisError } from '../errors';
10
+ /**
11
+ * Effect-based implementation of VoicevoxApi service
12
+ */
13
+ export declare class EffectVoicevoxApiService implements VoicevoxApiService {
14
+ private readonly api;
15
+ constructor(api: VoicevoxApi);
16
+ getApi(): VoicevoxApi;
17
+ /**
18
+ * Generate audio query from text with Effect-based error handling
19
+ */
20
+ generateQuery: (text: string, speaker?: number) => Effect.Effect<AudioQuery, QueryGenerationError>;
21
+ /**
22
+ * Synthesize audio from query with Effect-based error handling
23
+ */
24
+ synthesize: (query: AudioQuery, speaker?: number) => Effect.Effect<ArrayBuffer, SynthesisError>;
25
+ /**
26
+ * Generate audio query from preset with Effect-based error handling
27
+ */
28
+ generateQueryFromPreset: (text: string, presetId: number, coreVersion?: string) => Effect.Effect<AudioQuery, QueryGenerationError>;
29
+ /**
30
+ * Get speakers list with Effect-based error handling
31
+ */
32
+ getSpeakers: () => Effect.Effect<Speaker[], ApiConnectionError>;
33
+ /**
34
+ * Get speaker info with Effect-based error handling
35
+ */
36
+ getSpeakerInfo: (uuid: string) => Effect.Effect<Speaker, ApiConnectionError>;
37
+ /**
38
+ * Combined operation: generate query and synthesize in one Effect workflow
39
+ */
40
+ generateAndSynthesize: (text: string, speaker?: number) => Effect.Effect<ArrayBuffer, QueryGenerationError | SynthesisError>;
41
+ /**
42
+ * Health check operation to verify API connectivity
43
+ */
44
+ healthCheck: () => Effect.Effect<boolean, never>;
45
+ }
46
+ /**
47
+ * Create VoicevoxApi service instance from base URL
48
+ */
49
+ export declare const makeVoicevoxApiService: (baseUrl: string) => Effect.Effect<VoicevoxApiService, never>;
50
+ /**
51
+ * Layer providing VoicevoxApi service from configuration
52
+ */
53
+ export declare const VoicevoxApiServiceLive: (baseUrl: string) => Layer.Layer<VoicevoxApiService, never, never>;
54
+ /**
55
+ * Layer providing VoicevoxApi service with default configuration
56
+ */
57
+ export declare const VoicevoxApiServiceDefault: Layer.Layer<VoicevoxApiService, never, never>;
58
+ //# sourceMappingURL=api-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-service.d.ts","sourceRoot":"","sources":["../../../src/effect/services/api-service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAW,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACtD,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EAMpB,MAAM,WAAW,CAAA;AAGlB;;GAEG;AACH,qBAAa,wBAAyB,YAAW,kBAAkB;IACrD,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,EAAE,WAAW;IAE7C,MAAM,IAAI,WAAW;IAIrB;;OAEG;IACH,aAAa,GAAI,MAAM,MAAM,EAAE,gBAAW,KAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAWzF;IAEH;;OAEG;IACH,UAAU,GAAI,OAAO,UAAU,EAAE,gBAAW,KAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAWtF;IAEH;;OAEG;IACH,uBAAuB,GACrB,MAAM,MAAM,EACZ,UAAU,MAAM,EAChB,cAAc,MAAM,KACnB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAW/C;IAEH;;OAEG;IACH,WAAW,QAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAW3D;IAEH;;OAEG;IACH,cAAc,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAWxE;IAEH;;OAEG;IACH,qBAAqB,GACnB,MAAM,MAAM,EACZ,gBAAW,KACV,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,oBAAoB,GAAG,cAAc,CAAC,CAWnE;IAED;;OAEG;IACH,WAAW,QAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAU9C;CACF;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAI5F,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,SAAS,MAAM,KAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAClC,CAAA;AAEnE;;GAEG;AACH,eAAO,MAAM,yBAAyB,+CAAmD,CAAA"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ /**
3
+ * Effect-based VoicevoxApi service implementation
4
+ * Provides structured error handling and resource management for VOICEVOX API operations
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.VoicevoxApiServiceDefault = exports.VoicevoxApiServiceLive = exports.makeVoicevoxApiService = exports.EffectVoicevoxApiService = void 0;
8
+ const effect_1 = require("effect");
9
+ const api_1 = require("../../api");
10
+ const context_1 = require("../context");
11
+ const errors_1 = require("../errors");
12
+ const utils_1 = require("../utils");
13
+ /**
14
+ * Effect-based implementation of VoicevoxApi service
15
+ */
16
+ class EffectVoicevoxApiService {
17
+ constructor(api) {
18
+ this.api = api;
19
+ /**
20
+ * Generate audio query from text with Effect-based error handling
21
+ */
22
+ this.generateQuery = (text, speaker = 1) => (0, utils_1.logTimed)(`generateQuery-speaker-${speaker}`, (0, errors_1.retryWithBackoff)((0, errors_1.safeAsync)(() => this.api.generateQuery(text, speaker), (error) => (0, errors_1.makeQueryGenerationError)('Failed to generate audio query', text, speaker, error)), 3, // max retries
23
+ 1000 // base delay 1s
24
+ ));
25
+ /**
26
+ * Synthesize audio from query with Effect-based error handling
27
+ */
28
+ this.synthesize = (query, speaker = 1) => (0, utils_1.logTimed)(`synthesize-speaker-${speaker}`, (0, errors_1.retryWithBackoff)((0, errors_1.safeAsync)(() => this.api.synthesize(query, speaker), (error) => (0, errors_1.makeSynthesisError)('Failed to synthesize audio', speaker, error)), 2, // fewer retries for synthesis
29
+ 2000 // longer base delay 2s
30
+ ));
31
+ /**
32
+ * Generate audio query from preset with Effect-based error handling
33
+ */
34
+ this.generateQueryFromPreset = (text, presetId, coreVersion) => (0, utils_1.logTimed)(`generateQueryFromPreset-${presetId}`, (0, errors_1.retryWithBackoff)((0, errors_1.safeAsync)(() => this.api.generateQueryFromPreset(text, presetId, coreVersion), (error) => (0, errors_1.makeQueryGenerationError)('Failed to generate query from preset', text, presetId, error)), 3, 1000));
35
+ /**
36
+ * Get speakers list with Effect-based error handling
37
+ */
38
+ this.getSpeakers = () => (0, utils_1.logTimed)('getSpeakers', (0, errors_1.retryWithBackoff)((0, errors_1.safeAsync)(() => this.api.getSpeakers(), (error) => (0, errors_1.makeApiConnectionError)('Failed to get speakers list', undefined, error)), 3, 1000));
39
+ /**
40
+ * Get speaker info with Effect-based error handling
41
+ */
42
+ this.getSpeakerInfo = (uuid) => (0, utils_1.logTimed)(`getSpeakerInfo-${uuid}`, (0, errors_1.retryWithBackoff)((0, errors_1.safeAsync)(() => this.api.getSpeakerInfo(uuid), (error) => (0, errors_1.makeApiConnectionError)('Failed to get speaker info', uuid, error)), 3, 1000));
43
+ /**
44
+ * Combined operation: generate query and synthesize in one Effect workflow
45
+ */
46
+ this.generateAndSynthesize = (text, speaker = 1) => {
47
+ const self = this;
48
+ return effect_1.Effect.gen(function* () {
49
+ // Generate query first
50
+ const query = yield* self.generateQuery(text, speaker);
51
+ // Then synthesize audio
52
+ const audioData = yield* self.synthesize(query, speaker);
53
+ return audioData;
54
+ });
55
+ };
56
+ /**
57
+ * Health check operation to verify API connectivity
58
+ */
59
+ this.healthCheck = () => {
60
+ const self = this;
61
+ return effect_1.Effect.gen(function* () {
62
+ // Try to get speakers as a health check
63
+ const result = yield* self.getSpeakers().pipe(effect_1.Effect.map(() => true), effect_1.Effect.catchAll(() => effect_1.Effect.succeed(false)));
64
+ return result;
65
+ });
66
+ };
67
+ }
68
+ getApi() {
69
+ return this.api;
70
+ }
71
+ }
72
+ exports.EffectVoicevoxApiService = EffectVoicevoxApiService;
73
+ /**
74
+ * Create VoicevoxApi service instance from base URL
75
+ */
76
+ const makeVoicevoxApiService = (baseUrl) => effect_1.Effect.sync(() => {
77
+ const api = new api_1.VoicevoxApi(baseUrl);
78
+ return new EffectVoicevoxApiService(api);
79
+ });
80
+ exports.makeVoicevoxApiService = makeVoicevoxApiService;
81
+ /**
82
+ * Layer providing VoicevoxApi service from configuration
83
+ */
84
+ const VoicevoxApiServiceLive = (baseUrl) => effect_1.Layer.effect(context_1.VoicevoxApiContext, (0, exports.makeVoicevoxApiService)(baseUrl));
85
+ exports.VoicevoxApiServiceLive = VoicevoxApiServiceLive;
86
+ /**
87
+ * Layer providing VoicevoxApi service with default configuration
88
+ */
89
+ exports.VoicevoxApiServiceDefault = (0, exports.VoicevoxApiServiceLive)('http://localhost:50021');
90
+ //# sourceMappingURL=api-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-service.js","sourceRoot":"","sources":["../../../src/effect/services/api-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Effect-based AudioGenerator service implementation
3
+ * Provides structured error handling and resource management for audio generation
4
+ */
5
+ import { Context, Effect, Layer } from 'effect';
6
+ import { AudioGenerator } from '../../queue/audio-generator';
7
+ import type { AudioQuery } from '../../types';
8
+ import { type AudioGeneratorService, type EffectFileManagerService, type QueueItemData, type VoicevoxApiService } from '../context';
9
+ import { type FileOperationError, type QueryGenerationError, type SynthesisError } from '../errors';
10
+ /**
11
+ * Enhanced AudioGenerator service with Effect-based operations
12
+ */
13
+ export interface EffectAudioGeneratorService extends AudioGeneratorService {
14
+ readonly generateQueryEffect: (text: string, speaker: number) => Effect.Effect<AudioQuery, QueryGenerationError>;
15
+ readonly generateAudioEffect: (item: QueueItemData, updateStatus: (item: QueueItemData, status: string) => Effect.Effect<void, never>) => Effect.Effect<QueueItemData, QueryGenerationError | SynthesisError | FileOperationError, VoicevoxApiService | EffectFileManagerService>;
16
+ readonly generateAudioFromQueryEffect: (item: QueueItemData, updateStatus: (item: QueueItemData, status: string) => Effect.Effect<void, never>) => Effect.Effect<QueueItemData, SynthesisError | FileOperationError, VoicevoxApiService | EffectFileManagerService>;
17
+ readonly healthCheck: () => Effect.Effect<boolean, never>;
18
+ }
19
+ export declare const EffectAudioGeneratorContext: Context.Tag<EffectAudioGeneratorService, EffectAudioGeneratorService>;
20
+ /**
21
+ * Effect-based implementation of AudioGenerator service
22
+ */
23
+ export declare class EffectAudioGeneratorServiceImpl implements EffectAudioGeneratorService {
24
+ private readonly audioGenerator;
25
+ constructor(audioGenerator: AudioGenerator);
26
+ /**
27
+ * Traditional generateQuery method (Promise-based)
28
+ */
29
+ generateQuery: (text: string, speaker: number) => Promise<any>;
30
+ /**
31
+ * Traditional generateAudioFromQuery method (Promise-based)
32
+ */
33
+ generateAudioFromQuery: (item: any, statusCallback: (item: any, status: string) => void) => Promise<void>;
34
+ /**
35
+ * Traditional generateAudio method (Promise-based)
36
+ */
37
+ generateAudio: (item: any, statusCallback: (item: any, status: string) => void) => Promise<void>;
38
+ /**
39
+ * Generate audio query with Effect-based error handling
40
+ */
41
+ generateQueryEffect: (text: string, speaker: number) => Effect.Effect<AudioQuery, QueryGenerationError>;
42
+ /**
43
+ * Generate audio from text with Effect-based workflow
44
+ */
45
+ generateAudioEffect: (item: QueueItemData, updateStatus: (item: QueueItemData, status: string) => Effect.Effect<void, never>) => Effect.Effect<QueueItemData, QueryGenerationError | SynthesisError | FileOperationError, VoicevoxApiService | EffectFileManagerService>;
46
+ /**
47
+ * Generate audio from existing query with Effect-based workflow
48
+ */
49
+ generateAudioFromQueryEffect: (item: QueueItemData, updateStatus: (item: QueueItemData, status: string) => Effect.Effect<void, never>) => Effect.Effect<QueueItemData, SynthesisError | FileOperationError, VoicevoxApiService | EffectFileManagerService>;
50
+ /**
51
+ * Health check to verify audio generation capabilities
52
+ */
53
+ healthCheck: () => Effect.Effect<boolean, never>;
54
+ }
55
+ /**
56
+ * Create AudioGenerator service instance
57
+ */
58
+ export declare const makeEffectAudioGeneratorService: () => Effect.Effect<EffectAudioGeneratorService, never, VoicevoxApiService | EffectFileManagerService>;
59
+ /**
60
+ * Layer providing Effect AudioGenerator service
61
+ */
62
+ export declare const EffectAudioGeneratorServiceLive: Layer.Layer<EffectAudioGeneratorService, never, VoicevoxApiService | EffectFileManagerService>;
63
+ /**
64
+ * Scoped layer that automatically manages resources
65
+ */
66
+ export declare const EffectAudioGeneratorServiceScoped: Layer.Layer<EffectAudioGeneratorService, never, any>;
67
+ /**
68
+ * Helper functions for audio generation workflows
69
+ */
70
+ /**
71
+ * Batch generate audio from multiple text inputs
72
+ */
73
+ export declare const batchGenerateAudio: (texts: readonly string[], speaker: number, concurrency?: number) => Effect.Effect<readonly ArrayBuffer[], QueryGenerationError | SynthesisError, VoicevoxApiService>;
74
+ /**
75
+ * Generate audio with custom preprocessing
76
+ */
77
+ export declare const generateAudioWithPreprocessing: (text: string, speaker: number, preprocessor: (query: AudioQuery) => AudioQuery) => Effect.Effect<ArrayBuffer, QueryGenerationError | SynthesisError, VoicevoxApiService>;
78
+ //# sourceMappingURL=audio-generator-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio-generator-service.d.ts","sourceRoot":"","sources":["../../../src/effect/services/audio-generator-service.ts"],"names":[],"mappings":"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"}