@coeiro-operator/audio 1.2.4 → 1.2.6
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/dist/audio-stream-controller.d.ts +4 -5
- package/dist/audio-stream-controller.d.ts.map +1 -1
- package/dist/audio-stream-controller.js +11 -10
- package/dist/audio-stream-controller.js.map +1 -1
- package/dist/audio-synthesizer.d.ts +4 -5
- package/dist/audio-synthesizer.d.ts.map +1 -1
- package/dist/audio-synthesizer.js +20 -9
- package/dist/audio-synthesizer.js.map +1 -1
- package/dist/chunk-generation-manager.d.ts +5 -10
- package/dist/chunk-generation-manager.d.ts.map +1 -1
- package/dist/chunk-generation-manager.js +7 -17
- package/dist/chunk-generation-manager.js.map +1 -1
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +104 -8
- package/dist/index.js.map +1 -1
- package/dist/queue/task-queue.d.ts.map +1 -1
- package/dist/queue/task-queue.js +6 -0
- package/dist/queue/task-queue.js.map +1 -1
- package/dist/speed-utils.d.ts +9 -3
- package/dist/speed-utils.d.ts.map +1 -1
- package/dist/speed-utils.js +14 -11
- package/dist/speed-utils.js.map +1 -1
- package/dist/synthesis-processor.d.ts +6 -5
- package/dist/synthesis-processor.d.ts.map +1 -1
- package/dist/synthesis-processor.js +18 -43
- package/dist/synthesis-processor.js.map +1 -1
- package/dist/test-helpers.d.ts.map +1 -1
- package/dist/test-helpers.js +5 -3
- package/dist/test-helpers.js.map +1 -1
- package/dist/types.d.ts +25 -17
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/dist/voice-resolver.d.ts +0 -25
- package/dist/voice-resolver.d.ts.map +0 -1
- package/dist/voice-resolver.js +0 -186
- package/dist/voice-resolver.js.map +0 -1
package/dist/types.d.ts
CHANGED
|
@@ -24,17 +24,6 @@ export interface AudioResult {
|
|
|
24
24
|
audioBuffer: ArrayBuffer;
|
|
25
25
|
latency: number;
|
|
26
26
|
}
|
|
27
|
-
import type { Speaker } from '@coeiro-operator/core';
|
|
28
|
-
/**
|
|
29
|
-
* VoiceConfig: 音声合成に必要な最小限の情報
|
|
30
|
-
* Speaker情報と選択されたスタイルIDを含む
|
|
31
|
-
*/
|
|
32
|
-
export interface VoiceConfig {
|
|
33
|
-
speaker: Speaker;
|
|
34
|
-
selectedStyleId: number;
|
|
35
|
-
speakerId?: string;
|
|
36
|
-
styleMorasPerSecond?: Record<number, number>;
|
|
37
|
-
}
|
|
38
27
|
/**
|
|
39
28
|
* PunctuationPauseSettings: 句読点ポーズ設定
|
|
40
29
|
* 日本語発話に特化したモーラベースのポーズ制御
|
|
@@ -52,13 +41,15 @@ export interface PunctuationPauseSettings {
|
|
|
52
41
|
comma?: number;
|
|
53
42
|
}
|
|
54
43
|
/**
|
|
55
|
-
* SpeakSettings:
|
|
56
|
-
*
|
|
44
|
+
* SpeakSettings: チャンク生成時の音声合成パラメータ
|
|
45
|
+
* 並行生成のために必要な最小限の情報のみを保持
|
|
57
46
|
*/
|
|
58
47
|
export interface SpeakSettings {
|
|
59
|
-
|
|
48
|
+
characterId: string;
|
|
49
|
+
speakerId: string;
|
|
60
50
|
styleId: number;
|
|
61
51
|
speed: number;
|
|
52
|
+
styleMorasPerSecond?: number;
|
|
62
53
|
volume?: number;
|
|
63
54
|
pitch?: number;
|
|
64
55
|
intonation?: number;
|
|
@@ -75,16 +66,33 @@ export type GenerationResult = {
|
|
|
75
66
|
chunkIndex: number;
|
|
76
67
|
};
|
|
77
68
|
export type { SpeechTask } from './queue/speech-queue.js';
|
|
78
|
-
|
|
79
|
-
|
|
69
|
+
/**
|
|
70
|
+
* CLISynthesizeOptions: CLI/MCP用の音声合成オプション(文字列ベース)
|
|
71
|
+
* SayCoeiroink.synthesize()が受け取るオプション
|
|
72
|
+
*/
|
|
73
|
+
export interface CLISynthesizeOptions {
|
|
74
|
+
voice?: string | null;
|
|
75
|
+
style?: string;
|
|
80
76
|
rate?: number | string;
|
|
81
77
|
factor?: number;
|
|
82
78
|
outputFile?: string | null;
|
|
83
|
-
style?: string;
|
|
84
79
|
chunkMode?: 'none' | 'small' | 'medium' | 'large' | 'punctuation';
|
|
85
80
|
bufferSize?: number;
|
|
86
81
|
allowFallback?: boolean;
|
|
87
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* ProcessingOptions: 音声処理制御オプション
|
|
85
|
+
* ファイル出力、チャンク分割、バッファサイズ等の制御
|
|
86
|
+
*/
|
|
87
|
+
export interface ProcessingOptions {
|
|
88
|
+
outputFile?: string | null;
|
|
89
|
+
chunkMode?: 'none' | 'small' | 'medium' | 'large' | 'punctuation';
|
|
90
|
+
bufferSize?: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* SynthesizeOptions: 後方互換性のためのエイリアス(CLISynthesizeOptions)
|
|
94
|
+
*/
|
|
95
|
+
export type SynthesizeOptions = CLISynthesizeOptions;
|
|
88
96
|
export interface SynthesizeResult {
|
|
89
97
|
success: boolean;
|
|
90
98
|
taskId?: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGlF,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC;AAGhC,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,CAAC;IACb,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coeiro-operator/audio",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.6",
|
|
4
4
|
"description": "Audio synthesis and playback module for COEIRO Operator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"echogarden": "^2.10.1",
|
|
25
25
|
"node-fetch": "^3.3.2",
|
|
26
26
|
"wav": "^1.0.2",
|
|
27
|
-
"@coeiro-operator/
|
|
28
|
-
"@coeiro-operator/
|
|
27
|
+
"@coeiro-operator/core": "1.3.0",
|
|
28
|
+
"@coeiro-operator/common": "1.0.2"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^22.18.3",
|
package/dist/voice-resolver.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* voice-resolver.ts: 音声設定の解決を担当
|
|
3
|
-
*/
|
|
4
|
-
import { OperatorManager, ConfigManager } from '@coeiro-operator/core';
|
|
5
|
-
import { AudioSynthesizer } from './audio-synthesizer.js';
|
|
6
|
-
import type { VoiceConfig } from './types.js';
|
|
7
|
-
export declare class VoiceResolver {
|
|
8
|
-
private configManager;
|
|
9
|
-
private operatorManager;
|
|
10
|
-
private audioSynthesizer;
|
|
11
|
-
constructor(configManager: ConfigManager, operatorManager: OperatorManager, audioSynthesizer: AudioSynthesizer);
|
|
12
|
-
/**
|
|
13
|
-
* 現在のオペレータの音声設定を取得
|
|
14
|
-
*/
|
|
15
|
-
getCurrentVoiceConfig(styleName?: string | null): Promise<VoiceConfig | null>;
|
|
16
|
-
/**
|
|
17
|
-
* CharacterIdからVoiceConfigを生成
|
|
18
|
-
*/
|
|
19
|
-
resolveCharacterToConfig(characterId: string, styleName?: string | null): Promise<VoiceConfig>;
|
|
20
|
-
/**
|
|
21
|
-
* 音声設定を解決
|
|
22
|
-
*/
|
|
23
|
-
resolveVoiceConfig(voice: string | VoiceConfig | null | undefined, style?: string, allowFallback?: boolean): Promise<VoiceConfig>;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=voice-resolver.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"voice-resolver.d.ts","sourceRoot":"","sources":["../src/voice-resolver.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,qBAAa,aAAa;IAEtB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,gBAAgB;gBAFhB,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB;IAG5C;;OAEG;IACG,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAsEnF;;OAEG;IACG,wBAAwB,CAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GACxB,OAAO,CAAC,WAAW,CAAC;IAwEvB;;OAEG;IACG,kBAAkB,CACtB,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,EAC9C,KAAK,CAAC,EAAE,MAAM,EACd,aAAa,GAAE,OAAc,GAC5B,OAAO,CAAC,WAAW,CAAC;CA6CxB"}
|
package/dist/voice-resolver.js
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* voice-resolver.ts: 音声設定の解決を担当
|
|
3
|
-
*/
|
|
4
|
-
import { logger } from '@coeiro-operator/common';
|
|
5
|
-
export class VoiceResolver {
|
|
6
|
-
configManager;
|
|
7
|
-
operatorManager;
|
|
8
|
-
audioSynthesizer;
|
|
9
|
-
constructor(configManager, operatorManager, audioSynthesizer) {
|
|
10
|
-
this.configManager = configManager;
|
|
11
|
-
this.operatorManager = operatorManager;
|
|
12
|
-
this.audioSynthesizer = audioSynthesizer;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* 現在のオペレータの音声設定を取得
|
|
16
|
-
*/
|
|
17
|
-
async getCurrentVoiceConfig(styleName) {
|
|
18
|
-
try {
|
|
19
|
-
const currentStatus = await this.operatorManager.showCurrentOperator();
|
|
20
|
-
if (!currentStatus.characterId) {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
const character = await this.operatorManager.getCharacterInfo(currentStatus.characterId);
|
|
24
|
-
if (character && character.speaker && character.speaker.speakerId) {
|
|
25
|
-
// 保存されたセッション情報からスタイルを取得
|
|
26
|
-
const session = await this.operatorManager.getCurrentOperatorSession();
|
|
27
|
-
let selectedStyle;
|
|
28
|
-
// デバッグ: セッション情報を確認
|
|
29
|
-
logger.debug('VoiceResolver.getCurrentVoiceConfig()', {
|
|
30
|
-
styleName,
|
|
31
|
-
session,
|
|
32
|
-
'session?.styleId': session?.styleId,
|
|
33
|
-
'session?.styleId !== undefined': session?.styleId !== undefined,
|
|
34
|
-
});
|
|
35
|
-
if (styleName) {
|
|
36
|
-
// 明示的にスタイルが指定された場合はそれを使用
|
|
37
|
-
logger.debug('分岐: 明示的スタイル指定');
|
|
38
|
-
selectedStyle = this.operatorManager.selectStyle(character, styleName);
|
|
39
|
-
}
|
|
40
|
-
else if (session?.styleId !== undefined) {
|
|
41
|
-
// セッションに保存されたスタイルIDがある場合はそれを使用
|
|
42
|
-
logger.debug('分岐: セッションからスタイル取得');
|
|
43
|
-
const savedStyle = character.speaker.styles.find(s => s.styleId === session.styleId);
|
|
44
|
-
if (savedStyle) {
|
|
45
|
-
selectedStyle = savedStyle;
|
|
46
|
-
logger.debug(`保存されたスタイルを使用: ${savedStyle.styleName} (ID:${savedStyle.styleId})`);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
// 保存されたスタイルが見つからない場合はデフォルトを使用
|
|
50
|
-
logger.debug('保存されたスタイルが見つからない、デフォルト使用');
|
|
51
|
-
selectedStyle = this.operatorManager.selectStyle(character, null);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
// セッション情報がない場合はデフォルトスタイルを使用
|
|
56
|
-
logger.debug('分岐: セッション情報なし、デフォルト使用');
|
|
57
|
-
selectedStyle = this.operatorManager.selectStyle(character, null);
|
|
58
|
-
}
|
|
59
|
-
// 新しいstyles構造からstyleMorasPerSecondを生成
|
|
60
|
-
const styleMorasPerSecond = {};
|
|
61
|
-
if (character.styles) {
|
|
62
|
-
Object.entries(character.styles).forEach(([styleId, config]) => {
|
|
63
|
-
styleMorasPerSecond[Number(styleId)] = config.morasPerSecond;
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
return {
|
|
67
|
-
speaker: character.speaker,
|
|
68
|
-
selectedStyleId: selectedStyle.styleId,
|
|
69
|
-
speakerId: character.speaker.speakerId,
|
|
70
|
-
styleMorasPerSecond,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
logger.error(`オペレータ音声取得エラー: ${error.message}`);
|
|
77
|
-
return null;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* CharacterIdからVoiceConfigを生成
|
|
82
|
-
*/
|
|
83
|
-
async resolveCharacterToConfig(characterId, styleName) {
|
|
84
|
-
try {
|
|
85
|
-
// ConfigManagerからCharacter設定を取得
|
|
86
|
-
const characterConfig = await this.configManager.getCharacterConfig(characterId);
|
|
87
|
-
if (!characterConfig) {
|
|
88
|
-
throw new Error(`Character not found: ${characterId}`);
|
|
89
|
-
}
|
|
90
|
-
// speakerIdからspeaker情報を取得(COEIROINKサーバーから)
|
|
91
|
-
const speakers = await this.audioSynthesizer.getSpeakers();
|
|
92
|
-
const speaker = speakers.find(s => s.speakerUuid === characterConfig.speakerId);
|
|
93
|
-
if (!speaker) {
|
|
94
|
-
throw new Error(`Speaker '${characterConfig.speakerId}' not found for character '${characterId}'`);
|
|
95
|
-
}
|
|
96
|
-
// スタイル選択
|
|
97
|
-
let selectedStyle;
|
|
98
|
-
if (styleName) {
|
|
99
|
-
// スタイル名が指定された場合、characterConfig.stylesから対応するstyleIdを探す
|
|
100
|
-
const styleEntry = Object.entries(characterConfig.styles).find(([_, config]) => config.styleName === styleName);
|
|
101
|
-
if (styleEntry) {
|
|
102
|
-
const styleId = Number(styleEntry[0]);
|
|
103
|
-
selectedStyle = speaker.styles.find(s => s.styleId === styleId);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
// デフォルトスタイルを使用
|
|
107
|
-
if (!selectedStyle) {
|
|
108
|
-
selectedStyle = speaker.styles.find(s => s.styleId === characterConfig.defaultStyleId);
|
|
109
|
-
}
|
|
110
|
-
// それでも見つからない場合は最初のスタイルを使用
|
|
111
|
-
if (!selectedStyle) {
|
|
112
|
-
selectedStyle = speaker.styles[0];
|
|
113
|
-
}
|
|
114
|
-
// スタイルが見つからない場合はエラー
|
|
115
|
-
if (!selectedStyle) {
|
|
116
|
-
throw new Error(`No valid style found for character '${characterId}'${styleName ? ` with style '${styleName}'` : ''}`);
|
|
117
|
-
}
|
|
118
|
-
// speaker-provider.Speakerからoperator.Speakerへ変換
|
|
119
|
-
const operatorSpeaker = {
|
|
120
|
-
speakerId: speaker.speakerUuid,
|
|
121
|
-
speakerName: speaker.speakerName,
|
|
122
|
-
styles: speaker.styles,
|
|
123
|
-
};
|
|
124
|
-
// 新しいstyles構造からstyleMorasPerSecondを生成
|
|
125
|
-
const styleMorasPerSecond = {};
|
|
126
|
-
if (characterConfig.styles) {
|
|
127
|
-
Object.entries(characterConfig.styles).forEach(([styleId, config]) => {
|
|
128
|
-
styleMorasPerSecond[Number(styleId)] = config.morasPerSecond;
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
return {
|
|
132
|
-
speaker: operatorSpeaker,
|
|
133
|
-
selectedStyleId: selectedStyle.styleId,
|
|
134
|
-
speakerId: characterConfig.speakerId,
|
|
135
|
-
styleMorasPerSecond,
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
catch (error) {
|
|
139
|
-
logger.error(`Character解決エラー: ${error.message}`);
|
|
140
|
-
throw new Error(`Failed to resolve character '${characterId}': ${error.message}`);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* 音声設定を解決
|
|
145
|
-
*/
|
|
146
|
-
async resolveVoiceConfig(voice, style, allowFallback = true) {
|
|
147
|
-
if (!voice) {
|
|
148
|
-
// オペレータから音声を取得(スタイル指定も渡す)
|
|
149
|
-
const operatorVoice = await this.getCurrentVoiceConfig(style);
|
|
150
|
-
if (operatorVoice) {
|
|
151
|
-
// スタイル情報を取得して詳細ログ出力
|
|
152
|
-
const selectedStyle = operatorVoice.speaker.styles.find(s => s.styleId === operatorVoice.selectedStyleId);
|
|
153
|
-
const styleName = selectedStyle?.styleName || `ID:${operatorVoice.selectedStyleId}`;
|
|
154
|
-
logger.info(`オペレータ音声を使用: ${operatorVoice.speaker.speakerName} (スタイル: ${styleName})`);
|
|
155
|
-
return operatorVoice;
|
|
156
|
-
}
|
|
157
|
-
else if (allowFallback) {
|
|
158
|
-
// CLIのみ: デフォルトキャラクターを使用(つくよみちゃん)
|
|
159
|
-
const defaultCharacterId = 'tsukuyomi';
|
|
160
|
-
logger.info(`デフォルトキャラクターを使用: ${defaultCharacterId}`);
|
|
161
|
-
return await this.resolveCharacterToConfig(defaultCharacterId, style);
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
// MCP: オペレータが必須
|
|
165
|
-
throw new Error('オペレータが割り当てられていません。まず operator_assign を実行してください。');
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
else if (typeof voice === 'string') {
|
|
169
|
-
// string型の場合はCharacterIdとして解決
|
|
170
|
-
logger.info(`キャラクター解決: ${voice}`);
|
|
171
|
-
const voiceConfig = await this.resolveCharacterToConfig(voice, style);
|
|
172
|
-
const selectedStyle = voiceConfig.speaker.styles.find(s => s.styleId === voiceConfig.selectedStyleId);
|
|
173
|
-
const styleName = selectedStyle?.styleName || `ID:${voiceConfig.selectedStyleId}`;
|
|
174
|
-
logger.info(` → ${voiceConfig.speaker.speakerName} (スタイル: ${styleName})`);
|
|
175
|
-
return voiceConfig;
|
|
176
|
-
}
|
|
177
|
-
else {
|
|
178
|
-
// すでにVoiceConfig型の場合はそのまま使用
|
|
179
|
-
const selectedStyle = voice.speaker.styles.find(s => s.styleId === voice.selectedStyleId);
|
|
180
|
-
const styleName = selectedStyle?.styleName || `ID:${voice.selectedStyleId}`;
|
|
181
|
-
logger.info(`VoiceConfig使用: ${voice.speaker.speakerName} (スタイル: ${styleName})`);
|
|
182
|
-
return voice;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
//# sourceMappingURL=voice-resolver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"voice-resolver.js","sourceRoot":"","sources":["../src/voice-resolver.ts"],"names":[],"mappings":"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"}
|