@coeiro-operator/cli 1.3.0 → 1.3.2
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-character.d.ts","sourceRoot":"","sources":["../src/add-character.ts"],"names":[],"mappings":";AAEA;;GAEG"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
#!/usr/bin/env node --no-deprecation
|
|
2
|
+
/**
|
|
3
|
+
* add-character CLI: COEIROINKキャラクターをCoeiro-operatorに追加
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
import { getSpeakerProvider, logger, ConfigManager, getConfigDir } from '@coeiro-operator/core';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
// WAVファイルヘッダーから再生時間を取得
|
|
9
|
+
function getWavDuration(buffer) {
|
|
10
|
+
const view = new DataView(buffer);
|
|
11
|
+
const sampleRate = view.getUint32(24, true);
|
|
12
|
+
let pos = 12;
|
|
13
|
+
while (pos < buffer.byteLength - 8) {
|
|
14
|
+
const chunkId = String.fromCharCode(view.getUint8(pos), view.getUint8(pos + 1), view.getUint8(pos + 2), view.getUint8(pos + 3));
|
|
15
|
+
const chunkSize = view.getUint32(pos + 4, true);
|
|
16
|
+
if (chunkId === 'data') {
|
|
17
|
+
const channels = view.getUint16(22, true);
|
|
18
|
+
const bitsPerSample = view.getUint16(34, true);
|
|
19
|
+
const duration = chunkSize / (sampleRate * channels * (bitsPerSample / 8));
|
|
20
|
+
return duration;
|
|
21
|
+
}
|
|
22
|
+
pos += 8 + chunkSize;
|
|
23
|
+
if (chunkSize % 2 !== 0)
|
|
24
|
+
pos++;
|
|
25
|
+
}
|
|
26
|
+
throw new Error('WAVファイルのdataチャンクが見つかりませんでした');
|
|
27
|
+
}
|
|
28
|
+
// テスト文章(モーラ数が既知のもの)
|
|
29
|
+
const TEST_SENTENCES = [
|
|
30
|
+
{ text: 'こんにちは、今日はいい天気ですね。', moras: 19 },
|
|
31
|
+
{ text: 'ありがとうございます。', moras: 11 },
|
|
32
|
+
{ text: 'おはようございます。よろしくお願いします。', moras: 22 },
|
|
33
|
+
{ text: 'それでは、始めましょう。', moras: 12 },
|
|
34
|
+
];
|
|
35
|
+
// スタイルの話速を測定
|
|
36
|
+
async function measureStyleSpeechRate(speakerId, styleId) {
|
|
37
|
+
const results = [];
|
|
38
|
+
for (const sentence of TEST_SENTENCES) {
|
|
39
|
+
try {
|
|
40
|
+
// COEIROINK APIを直接呼び出し
|
|
41
|
+
const synthesisParams = {
|
|
42
|
+
text: sentence.text,
|
|
43
|
+
speakerUuid: speakerId,
|
|
44
|
+
styleId: styleId,
|
|
45
|
+
speedScale: 1.0,
|
|
46
|
+
volumeScale: 1.0,
|
|
47
|
+
pitchScale: 0.0,
|
|
48
|
+
intonationScale: 1.0,
|
|
49
|
+
prePhonemeLength: 0.1,
|
|
50
|
+
postPhonemeLength: 0.1,
|
|
51
|
+
outputSamplingRate: 24000,
|
|
52
|
+
};
|
|
53
|
+
const url = 'http://localhost:50032/v1/synthesis';
|
|
54
|
+
const response = await fetch(url, {
|
|
55
|
+
method: 'POST',
|
|
56
|
+
headers: {
|
|
57
|
+
'Content-Type': 'application/json',
|
|
58
|
+
},
|
|
59
|
+
body: JSON.stringify(synthesisParams),
|
|
60
|
+
});
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
63
|
+
}
|
|
64
|
+
const audioBuffer = await response.arrayBuffer();
|
|
65
|
+
const duration = getWavDuration(audioBuffer);
|
|
66
|
+
const morasPerSecond = sentence.moras / duration;
|
|
67
|
+
results.push(morasPerSecond);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
logger.warn(`測定エラー (styleId=${styleId}): ${error}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (results.length === 0) {
|
|
74
|
+
throw new Error('話速測定に失敗しました');
|
|
75
|
+
}
|
|
76
|
+
return results.reduce((sum, val) => sum + val, 0) / results.length;
|
|
77
|
+
}
|
|
78
|
+
// キャラクター一覧を表示
|
|
79
|
+
async function listCharacters() {
|
|
80
|
+
const speakerProvider = getSpeakerProvider();
|
|
81
|
+
const configDir = await getConfigDir();
|
|
82
|
+
const configManager = new ConfigManager(configDir);
|
|
83
|
+
const speakers = await speakerProvider.getSpeakers();
|
|
84
|
+
const config = await configManager.loadConfig();
|
|
85
|
+
const registeredSpeakerIds = new Set(Object.values(config.characters || {}).map((char) => char.speakerId));
|
|
86
|
+
console.log('Available COEIROINK Characters:\n');
|
|
87
|
+
for (const speaker of speakers) {
|
|
88
|
+
const isRegistered = registeredSpeakerIds.has(speaker.speakerUuid);
|
|
89
|
+
const mark = isRegistered ? '✓' : ' ';
|
|
90
|
+
const status = isRegistered ? '- 登録済み' : '';
|
|
91
|
+
console.log(` ${mark} ${speaker.speakerName} (${speaker.speakerUuid}) ${status}`);
|
|
92
|
+
if (speaker.styles && speaker.styles.length > 0) {
|
|
93
|
+
for (const style of speaker.styles) {
|
|
94
|
+
console.log(` - ${style.styleName} (ID: ${style.styleId})`);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
console.log('');
|
|
98
|
+
}
|
|
99
|
+
console.log('Usage: add-character <speakerId>');
|
|
100
|
+
}
|
|
101
|
+
// キャラクターを追加
|
|
102
|
+
async function addCharacter(speakerId) {
|
|
103
|
+
const speakerProvider = getSpeakerProvider();
|
|
104
|
+
const configDir = await getConfigDir();
|
|
105
|
+
const configManager = new ConfigManager(configDir);
|
|
106
|
+
console.log(`キャラクター追加: ${speakerId}\n`);
|
|
107
|
+
// 1. COEIROINK APIからキャラクター情報を取得
|
|
108
|
+
console.log('1. キャラクター情報を取得中...');
|
|
109
|
+
const speakers = await speakerProvider.getSpeakers();
|
|
110
|
+
const speaker = speakers.find(s => s.speakerUuid === speakerId);
|
|
111
|
+
if (!speaker) {
|
|
112
|
+
console.error(`エラー: speakerId "${speakerId}" が見つかりません`);
|
|
113
|
+
console.log('\n利用可能なキャラクター一覧を表示するには、引数なしで実行してください。');
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
console.log(` キャラクター名: ${speaker.speakerName}`);
|
|
117
|
+
console.log(` スタイル数: ${speaker.styles?.length || 0}`);
|
|
118
|
+
// 2. 話速を測定
|
|
119
|
+
console.log('\n2. 各スタイルの話速を測定中...');
|
|
120
|
+
const styles = {};
|
|
121
|
+
if (speaker.styles && speaker.styles.length > 0) {
|
|
122
|
+
for (const style of speaker.styles) {
|
|
123
|
+
console.log(` 測定中: ${style.styleName} (ID: ${style.styleId})...`);
|
|
124
|
+
const morasPerSecond = await measureStyleSpeechRate(speakerId, style.styleId);
|
|
125
|
+
console.log(` -> ${morasPerSecond.toFixed(2)} モーラ/秒`);
|
|
126
|
+
styles[style.styleId.toString()] = {
|
|
127
|
+
styleName: style.styleName,
|
|
128
|
+
morasPerSecond: parseFloat(morasPerSecond.toFixed(2)),
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// 3. characterIdを生成
|
|
133
|
+
let characterId = speaker.speakerName
|
|
134
|
+
.toLowerCase()
|
|
135
|
+
.replace(/[^a-z]/g, '')
|
|
136
|
+
.substring(0, 20);
|
|
137
|
+
// 日本語名などで空になった場合はspeakerIdの最初の8文字を使用
|
|
138
|
+
if (!characterId) {
|
|
139
|
+
characterId = speakerId.substring(0, 8);
|
|
140
|
+
console.log(`\n 日本語名のためspeakerIdから生成: ${characterId}`);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
console.log(`\n 生成されたcharacterId: ${characterId}`);
|
|
144
|
+
}
|
|
145
|
+
// 4. config.jsonに追加
|
|
146
|
+
console.log('\n3. config.jsonに追加中...');
|
|
147
|
+
const config = await configManager.loadConfig();
|
|
148
|
+
if (!config.characters) {
|
|
149
|
+
config.characters = {};
|
|
150
|
+
}
|
|
151
|
+
if (config.characters[characterId]) {
|
|
152
|
+
console.log(` 警告: characterId "${characterId}" は既に存在します。上書きします。`);
|
|
153
|
+
}
|
|
154
|
+
const defaultStyleId = speaker.styles?.[0]?.styleId || 0;
|
|
155
|
+
config.characters[characterId] = {
|
|
156
|
+
speakerId: speaker.speakerUuid,
|
|
157
|
+
name: speaker.speakerName,
|
|
158
|
+
personality: '',
|
|
159
|
+
speakingStyle: '',
|
|
160
|
+
greeting: '',
|
|
161
|
+
farewell: '',
|
|
162
|
+
defaultStyleId,
|
|
163
|
+
styles,
|
|
164
|
+
};
|
|
165
|
+
// config.jsonに書き込み
|
|
166
|
+
const configFile = join(configDir, 'config.json');
|
|
167
|
+
await configManager.writeJsonFile(configFile, config);
|
|
168
|
+
console.log(` ✓ config.jsonに追加しました\n`);
|
|
169
|
+
// 5. 完了メッセージ
|
|
170
|
+
console.log('✓ キャラクター追加が完了しました!\n');
|
|
171
|
+
console.log('次のステップ:');
|
|
172
|
+
console.log(` 1. ~/.coeiro-operator/config.json を開く`);
|
|
173
|
+
console.log(` 2. characters.${characterId} セクションに以下を追加:`);
|
|
174
|
+
console.log(' - personality: キャラクターの性格');
|
|
175
|
+
console.log(' - speakingStyle: 話し方の特徴');
|
|
176
|
+
console.log(' - greeting: アサイン時の挨拶');
|
|
177
|
+
console.log(' - farewell: 解放時のお別れメッセージ\n');
|
|
178
|
+
console.log(` 3. 動作確認:`);
|
|
179
|
+
console.log(` operator-manager available`);
|
|
180
|
+
console.log(` operator-manager assign ${characterId}`);
|
|
181
|
+
}
|
|
182
|
+
// CLI設定
|
|
183
|
+
const program = new Command();
|
|
184
|
+
program
|
|
185
|
+
.name('add-character')
|
|
186
|
+
.description('COEIROINKキャラクターをCoeiro-operatorに追加')
|
|
187
|
+
.version('1.0.0', '-V, --version')
|
|
188
|
+
.argument('[speakerId]', 'Speaker UUID to add (omit to list available characters)')
|
|
189
|
+
.action(async (speakerId) => {
|
|
190
|
+
try {
|
|
191
|
+
if (!speakerId) {
|
|
192
|
+
await listCharacters();
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
await addCharacter(speakerId);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error('エラー:', error);
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
program.parse(process.argv);
|
|
204
|
+
//# sourceMappingURL=add-character.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-character.js","sourceRoot":"","sources":["../src/add-character.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coeiro-operator/cli",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.2",
|
|
4
4
|
"description": "CLI tools for COEIRO Operator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -21,12 +21,13 @@
|
|
|
21
21
|
"bin": {
|
|
22
22
|
"operator-manager": "./dist/operator-manager.js",
|
|
23
23
|
"say-coeiroink": "./dist/say-coeiroink.js",
|
|
24
|
-
"dictionary-register": "./dist/dictionary-register.js"
|
|
24
|
+
"dictionary-register": "./dist/dictionary-register.js",
|
|
25
|
+
"add-character": "./dist/add-character.js"
|
|
25
26
|
},
|
|
26
27
|
"dependencies": {
|
|
27
28
|
"commander": "^14.0.1",
|
|
28
|
-
"@coeiro-operator/audio": "1.2.
|
|
29
|
-
"@coeiro-operator/core": "1.2.
|
|
29
|
+
"@coeiro-operator/audio": "1.2.2",
|
|
30
|
+
"@coeiro-operator/core": "1.2.2",
|
|
30
31
|
"@coeiro-operator/common": "1.0.2"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|