@kongyo2/kongyoroid 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +233 -0
- package/dist/cache.d.ts +32 -7
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +138 -9
- package/dist/cache.js.map +1 -1
- package/dist/cli/flags.d.ts +270 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +240 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/help.d.ts +11 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +336 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli.js +598 -232
- package/dist/cli.js.map +1 -1
- package/dist/errors.d.ts +43 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +56 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +59 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -14
- package/dist/index.js.map +1 -1
- package/dist/io.d.ts +11 -0
- package/dist/io.d.ts.map +1 -1
- package/dist/io.js +149 -5
- package/dist/io.js.map +1 -1
- package/dist/kongyoroid.d.ts +237 -10
- package/dist/kongyoroid.d.ts.map +1 -1
- package/dist/kongyoroid.js +777 -86
- package/dist/kongyoroid.js.map +1 -1
- package/dist/limits.d.ts +5 -0
- package/dist/limits.d.ts.map +1 -1
- package/dist/limits.js +6 -1
- package/dist/limits.js.map +1 -1
- package/dist/request.d.ts +1 -0
- package/dist/request.d.ts.map +1 -1
- package/dist/request.js +102 -15
- package/dist/request.js.map +1 -1
- package/dist/schema.d.ts +3 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +271 -68
- package/dist/schema.js.map +1 -1
- package/dist/song/mml.d.ts +15 -0
- package/dist/song/mml.d.ts.map +1 -0
- package/dist/song/mml.js +184 -0
- package/dist/song/mml.js.map +1 -0
- package/dist/song/pitch.d.ts.map +1 -0
- package/dist/{pitch.js → song/pitch.js} +1 -1
- package/dist/song/pitch.js.map +1 -0
- package/dist/song/score.d.ts +92 -0
- package/dist/song/score.d.ts.map +1 -0
- package/dist/song/score.js +454 -0
- package/dist/song/score.js.map +1 -0
- package/dist/synth/acoustics.d.ts +27 -0
- package/dist/synth/acoustics.d.ts.map +1 -0
- package/dist/synth/acoustics.js +608 -0
- package/dist/synth/acoustics.js.map +1 -0
- package/dist/synth/analysis.d.ts +22 -0
- package/dist/synth/analysis.d.ts.map +1 -0
- package/dist/synth/analysis.js +170 -0
- package/dist/synth/analysis.js.map +1 -0
- package/dist/synth/engine.d.ts +115 -0
- package/dist/synth/engine.d.ts.map +1 -0
- package/dist/synth/engine.js +223 -0
- package/dist/synth/engine.js.map +1 -0
- package/dist/synth/filters.d.ts +60 -0
- package/dist/synth/filters.d.ts.map +1 -0
- package/dist/synth/filters.js +166 -0
- package/dist/synth/filters.js.map +1 -0
- package/dist/synth/glottal.d.ts +20 -0
- package/dist/synth/glottal.d.ts.map +1 -0
- package/dist/synth/glottal.js +76 -0
- package/dist/synth/glottal.js.map +1 -0
- package/dist/synth/phonemes.d.ts +42 -0
- package/dist/synth/phonemes.d.ts.map +1 -0
- package/dist/synth/phonemes.js +311 -0
- package/dist/synth/phonemes.js.map +1 -0
- package/dist/synth/plan.d.ts +127 -0
- package/dist/synth/plan.d.ts.map +1 -0
- package/dist/synth/plan.js +81 -0
- package/dist/synth/plan.js.map +1 -0
- package/dist/synth/prosody.d.ts +30 -0
- package/dist/synth/prosody.d.ts.map +1 -0
- package/dist/synth/prosody.js +46 -0
- package/dist/synth/prosody.js.map +1 -0
- package/dist/synth/random.d.ts +15 -0
- package/dist/synth/random.d.ts.map +1 -0
- package/dist/synth/random.js +59 -0
- package/dist/synth/random.js.map +1 -0
- package/dist/synth/renderer.d.ts +77 -0
- package/dist/synth/renderer.d.ts.map +1 -0
- package/dist/synth/renderer.js +343 -0
- package/dist/synth/renderer.js.map +1 -0
- package/dist/synth/song.d.ts +30 -0
- package/dist/synth/song.d.ts.map +1 -0
- package/dist/synth/song.js +453 -0
- package/dist/synth/song.js.map +1 -0
- package/dist/synth/speech.d.ts +49 -0
- package/dist/synth/speech.d.ts.map +1 -0
- package/dist/synth/speech.js +354 -0
- package/dist/synth/speech.js.map +1 -0
- package/dist/synth/stream.d.ts +26 -0
- package/dist/synth/stream.d.ts.map +1 -0
- package/dist/synth/stream.js +67 -0
- package/dist/synth/stream.js.map +1 -0
- package/dist/synth/textstream.d.ts +35 -0
- package/dist/synth/textstream.d.ts.map +1 -0
- package/dist/synth/textstream.js +127 -0
- package/dist/synth/textstream.js.map +1 -0
- package/dist/synth/voice.d.ts +64 -0
- package/dist/synth/voice.d.ts.map +1 -0
- package/dist/synth/voice.js +208 -0
- package/dist/synth/voice.js.map +1 -0
- package/dist/text/dictionary.d.ts +50 -0
- package/dist/text/dictionary.d.ts.map +1 -0
- package/dist/text/dictionary.js +0 -0
- package/dist/text/dictionary.js.map +1 -0
- package/dist/text/frontend.d.ts +34 -0
- package/dist/text/frontend.d.ts.map +1 -0
- package/dist/text/frontend.js +550 -0
- package/dist/text/frontend.js.map +1 -0
- package/dist/text/lexicon.d.ts +10 -0
- package/dist/text/lexicon.d.ts.map +1 -0
- package/dist/text/lexicon.js +763 -0
- package/dist/text/lexicon.js.map +1 -0
- package/dist/{mora.d.ts → text/mora.d.ts} +15 -3
- package/dist/text/mora.d.ts.map +1 -0
- package/dist/{mora.js → text/mora.js} +87 -9
- package/dist/text/mora.js.map +1 -0
- package/dist/text/normalize.d.ts +34 -0
- package/dist/text/normalize.d.ts.map +1 -0
- package/dist/text/normalize.js +496 -0
- package/dist/text/normalize.js.map +1 -0
- package/dist/text/notation.d.ts +32 -0
- package/dist/text/notation.d.ts.map +1 -0
- package/dist/text/notation.js +182 -0
- package/dist/text/notation.js.map +1 -0
- package/dist/text/reading.d.ts +52 -0
- package/dist/text/reading.d.ts.map +1 -0
- package/dist/text/reading.js +32 -0
- package/dist/text/reading.js.map +1 -0
- package/dist/text/sentences.d.ts +10 -0
- package/dist/text/sentences.d.ts.map +1 -0
- package/dist/text/sentences.js +84 -0
- package/dist/text/sentences.js.map +1 -0
- package/dist/{text.d.ts → text/split.d.ts} +2 -2
- package/dist/text/split.d.ts.map +1 -0
- package/dist/{text.js → text/split.js} +2 -2
- package/dist/text/split.js.map +1 -0
- package/dist/types.d.ts +58 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +4 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +5 -1
- package/dist/version.js.map +1 -1
- package/dist/voicevox/client.d.ts +1 -1
- package/dist/voicevox/client.d.ts.map +1 -1
- package/dist/voicevox/dictionary.js +1 -1
- package/dist/voicevox/dictionary.js.map +1 -1
- package/dist/voicevox/song.js +1 -1
- package/dist/voicevox/song.js.map +1 -1
- package/dist/voicevox/speech.d.ts +1 -0
- package/dist/voicevox/speech.d.ts.map +1 -1
- package/dist/voicevox/speech.js +8 -2
- package/dist/voicevox/speech.js.map +1 -1
- package/docs/cli.md +251 -0
- package/examples/batch.jsonl +4 -3
- package/examples/builtin/dictionary.json +7 -0
- package/examples/builtin/song-compact.json +13 -0
- package/examples/builtin/song-mml.json +9 -0
- package/examples/builtin/song-notes.json +25 -0
- package/examples/builtin/speech-dictionary.json +9 -0
- package/examples/builtin/speech-kana.json +7 -0
- package/examples/builtin/speech.json +7 -0
- package/package.json +11 -3
- package/dist/formant.d.ts +0 -34
- package/dist/formant.d.ts.map +0 -1
- package/dist/formant.js +0 -622
- package/dist/formant.js.map +0 -1
- package/dist/mora.d.ts.map +0 -1
- package/dist/mora.js.map +0 -1
- package/dist/notation.d.ts +0 -15
- package/dist/notation.d.ts.map +0 -1
- package/dist/notation.js +0 -114
- package/dist/notation.js.map +0 -1
- package/dist/pitch.d.ts.map +0 -1
- package/dist/pitch.js.map +0 -1
- package/dist/score.d.ts +0 -37
- package/dist/score.d.ts.map +0 -1
- package/dist/score.js +0 -166
- package/dist/score.js.map +0 -1
- package/dist/text.d.ts.map +0 -1
- package/dist/text.js.map +0 -1
- package/examples/song-notes.json +0 -24
- /package/dist/{pitch.d.ts → song/pitch.d.ts} +0 -0
- /package/examples/{song.json → voicevox/song.json} +0 -0
- /package/examples/{speech-kana.json → voicevox/speech-kana.json} +0 -0
- /package/examples/{speech.json → voicevox/speech.json} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/voicevox/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/voicevox/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { invalid } from "../errors.js";
|
|
2
|
-
import { kanaToMoras, toKatakana } from "../mora.js";
|
|
2
|
+
import { kanaToMoras, toKatakana } from "../text/mora.js";
|
|
3
3
|
import { integer, literal, string } from "../validate.js";
|
|
4
4
|
export const WORD_TYPES = ["PROPER_NOUN", "COMMON_NOUN", "VERB", "ADJECTIVE", "SUFFIX"];
|
|
5
5
|
export function validateWord(draft, path = "$") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../src/voicevox/dictionary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../src/voicevox/dictionary.ts"],"names":[],"mappings":"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"}
|
package/dist/voicevox/song.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { engineScoreFrames, notesToEngineScore } from "../score.js";
|
|
1
|
+
import { engineScoreFrames, notesToEngineScore } from "../song/score.js";
|
|
2
2
|
import { inspectWav } from "../wav.js";
|
|
3
3
|
import { protocolError } from "./api.js";
|
|
4
4
|
export function applyVibrato(query, depthCents, rateHz, frameRate) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"song.js","sourceRoot":"","sources":["../../src/voicevox/song.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"song.js","sourceRoot":"","sources":["../../src/voicevox/song.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export interface SpeechSynthesis {
|
|
|
10
10
|
export interface SpeechOptions extends OperationOptions {
|
|
11
11
|
readonly concurrency?: number;
|
|
12
12
|
}
|
|
13
|
+
export declare function semitonesToPitchScale(semitones: number, referenceHz?: number): number;
|
|
13
14
|
export declare function querySeconds(query: AudioQuery): number;
|
|
14
15
|
export declare function applySpeechSettings(phrases: readonly EngineAccentPhrase[], request: ResolvedSpeech, sampleRate: number, kana: string): AudioQuery;
|
|
15
16
|
export declare function synthesizeSpeech(client: VoicevoxClient, request: ResolvedSpeech, speaker: StyleSelection, options?: SpeechOptions): Promise<SpeechSynthesis>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech.d.ts","sourceRoot":"","sources":["../../src/voicevox/speech.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEpF,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAYtD;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,UAAU,CAeZ;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAkD1B;AAiBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,GAAG,MAAM,CAelF"}
|
|
1
|
+
{"version":3,"file":"speech.d.ts","sourceRoot":"","sources":["../../src/voicevox/speech.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEpF,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,GAAE,MAAY,GAAG,MAAM,CAI1F;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAYtD;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,kBAAkB,EAAE,EACtC,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,UAAU,CAeZ;AAED,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAkD1B;AAiBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,SAAS,kBAAkB,EAAE,GAAG,MAAM,CAelF"}
|
package/dist/voicevox/speech.js
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { mapConcurrent } from "../concurrency.js";
|
|
2
2
|
import { invalid } from "../errors.js";
|
|
3
3
|
import { LIMITS } from "../limits.js";
|
|
4
|
-
import { splitText } from "../text.js";
|
|
4
|
+
import { splitText } from "../text/split.js";
|
|
5
5
|
import { concatWav, inspectWav } from "../wav.js";
|
|
6
6
|
import { protocolError } from "./api.js";
|
|
7
|
+
export function semitonesToPitchScale(semitones, referenceHz = 200) {
|
|
8
|
+
if (semitones === 0)
|
|
9
|
+
return 0;
|
|
10
|
+
const ratio = 1 + (semitones * Math.LN2) / 12 / Math.log(referenceHz);
|
|
11
|
+
return Math.max(-1, Math.min(1, Math.log2(ratio)));
|
|
12
|
+
}
|
|
7
13
|
export function querySeconds(query) {
|
|
8
14
|
let seconds = query.prePhonemeLength + query.postPhonemeLength;
|
|
9
15
|
for (const phrase of query.accent_phrases) {
|
|
@@ -21,7 +27,7 @@ export function applySpeechSettings(phrases, request, sampleRate, kana) {
|
|
|
21
27
|
return {
|
|
22
28
|
accent_phrases: phrases,
|
|
23
29
|
speedScale: request.speed,
|
|
24
|
-
pitchScale: request.pitch,
|
|
30
|
+
pitchScale: request.pitch ?? semitonesToPitchScale(request.pitchSemitones),
|
|
25
31
|
intonationScale: request.intonation,
|
|
26
32
|
volumeScale: request.volume,
|
|
27
33
|
prePhonemeLength: request.prePause,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speech.js","sourceRoot":"","sources":["../../src/voicevox/speech.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"speech.js","sourceRoot":"","sources":["../../src/voicevox/speech.ts"],"names":[],"mappings":"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"}
|
package/docs/cli.md
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
# CLI リファレンス
|
|
2
|
+
|
|
3
|
+
すべてのコマンドは標準出力に **1 行 1 JSON** を書き、失敗時は標準エラーに `{"ok":false,"error":{...}}` を書いて 0 以外で終了します。`--output -` で音声を標準出力へ流す時だけ、JSON は標準エラーに出ます。`kongyoroid <command> --help` で各コマンドのフラグと実例を表示します。
|
|
4
|
+
|
|
5
|
+
## 共通の約束
|
|
6
|
+
|
|
7
|
+
### 終了コード
|
|
8
|
+
|
|
9
|
+
| コード | 意味 | 典型的な原因 |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| 0 | 成功 | |
|
|
12
|
+
| 1 | 内部エラー | バグ。`error.detail` を添えて報告 |
|
|
13
|
+
| 2 | 入力エラー | 不正な JSON、未知のプロパティ、読めない文字、短すぎる音符、音域外 |
|
|
14
|
+
| 3 | エンジン利用不可 | VOICEVOX 未起動・タイムアウト、フロントエンドのロード失敗 |
|
|
15
|
+
| 4 | 入出力エラー | 既存ファイルの上書き拒否、読めない入力ファイル、プレイヤー無し |
|
|
16
|
+
| 130 | 中断 | SIGINT / AbortSignal |
|
|
17
|
+
|
|
18
|
+
### エラーオブジェクト
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{"ok":false,"error":{
|
|
22
|
+
"code":"UNREADABLE_TEXT",
|
|
23
|
+
"message":"Unreadable text \"彁\": the frontend has no reading for it and would drop it silently.",
|
|
24
|
+
"retryable":false,
|
|
25
|
+
"path":"$.text",
|
|
26
|
+
"hint":"Give the reading in kana, add a dictionary entry with surface and reading, or remove the characters.",
|
|
27
|
+
"detail":{"unreadable":[{"surface":"彁","sourceSpan":{"start":0,"end":1,"unit":"unicode-code-point"}}]},
|
|
28
|
+
"repairOptions":[
|
|
29
|
+
{"action":"provide-kana","description":"Pass the whole pronunciation in the kana field.","path":"$.kana"},
|
|
30
|
+
{"action":"add-dictionary-entry","description":"Add a dictionary entry { surface: \"彁\", reading: <katakana> }.","path":"$.dictionary"},
|
|
31
|
+
{"action":"remove-characters","description":"Remove or rewrite the unreadable characters in text.","path":"$.text"}],
|
|
32
|
+
"sourceSpan":{"start":0,"end":1,"unit":"unicode-code-point"},
|
|
33
|
+
"surface":"彁"}}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
| フィールド | 内容 |
|
|
37
|
+
| --- | --- |
|
|
38
|
+
| `code` | `INVALID_INPUT` `UNSUPPORTED_TEXT` `UNREADABLE_TEXT` `NOTE_TOO_SHORT` `PITCH_OUT_OF_RANGE` `FRONTEND_UNAVAILABLE` `ENGINE_UNAVAILABLE` `ENGINE_HTTP` `ENGINE_REJECTED` `ENGINE_PROTOCOL` `TIMEOUT` `QUEUE_FULL` `IO_ERROR` `PLAYER_UNAVAILABLE` `ABORTED` `INTERNAL` |
|
|
39
|
+
| `path` | 問題の場所。リクエストは `$.notes[1].beats`、フラグは `$flags.speed`、標準入力は `$.input` |
|
|
40
|
+
| `retryable` / `retryAfterMs` | そのまま再送して直る可能性があるか |
|
|
41
|
+
| `repairOptions[]` | `action` (`provide-kana` `add-dictionary-entry` `remove-characters` `increase-duration` `allow-consonant-compression` `use-vowel-continuation` `lower-pitch` `raise-sample-rate` `clamp-pitch` `shorten-input` `split-input` `use-force` `start-engine` `use-formant-engine` `retry-later`) と説明、対象 `path` |
|
|
42
|
+
| `sourceSpan` / `surface` | 元テキスト内の位置 (Unicode コードポイント単位、`end` は排他的) と該当文字列 |
|
|
43
|
+
| `detail` | コード固有の構造化情報 (`availableMs` / `requiredMs` / `noteId`、`unreadable[]`、`alignment` など) |
|
|
44
|
+
|
|
45
|
+
### 警告と助言
|
|
46
|
+
|
|
47
|
+
成功時の JSON には `warnings[]` (`severity`: `warning` / `advice`) と `adjustments[]` (自動で変えたこと) が入ります。主なコード:
|
|
48
|
+
|
|
49
|
+
| コード | 種別 | 意味 |
|
|
50
|
+
| --- | --- | --- |
|
|
51
|
+
| `UNREADABLE_TEXT_SKIPPED` | warning | `--no-strict-reading` で読み飛ばした文字 |
|
|
52
|
+
| `ASCII_WORD_UNKNOWN` | advice | レキシコンに無い 5 文字以上の英単語。文字ごとに読まれる可能性 |
|
|
53
|
+
| `URL_READ_LITERALLY` | advice | URL を記号ごと読み下した |
|
|
54
|
+
| `HEURISTIC_READING` | advice | フロントエンド無しでかなを機械的に読んだ |
|
|
55
|
+
| `F0_OUTSIDE_VOICE_RANGE` | warning | ボイスの得意音域を外れている |
|
|
56
|
+
| `CONSONANT_HEAVILY_COMPRESSED` | warning | 子音を 45 % 未満まで短縮した |
|
|
57
|
+
| `CONSONANT_TAKEN_FROM_NOTE` / `CONSONANT_COMPRESSED` | adjustment | 子音が音符内に入った / 短縮された |
|
|
58
|
+
|
|
59
|
+
`--diagnostics compact` を付けると、警告を 1 行ずつ次の形式で出します (`speak` 系は標準エラー、`validate` は標準出力)。
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
<request>:1:1: advice kongyoroid(ASCII_WORD_UNKNOWN): The word "kongyoroidsynth" is not in the built-in lexicon; the frontend may spell it letter by letter. help: Add a dictionary entry with its katakana reading, or write the reading in kana.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
形式は `場所: 重要度 kongyoroid(コード): メッセージ help: 助言`。場所は `--input` のファイル名 (無ければ `<request>`) に、`sourceSpan` があれば `:行:桁` (1 始まり)、無ければ `:$.path` を続けます。
|
|
66
|
+
|
|
67
|
+
### 共通フラグ
|
|
68
|
+
|
|
69
|
+
| フラグ | 内容 |
|
|
70
|
+
| --- | --- |
|
|
71
|
+
| `--engine formant\|voicevox\|auto` | エンジン。既定 `formant`。VOICEVOX のスタイルを指定すると自動的に `voicevox` |
|
|
72
|
+
| `--voice ID` | 内蔵ボイス (`neutral` `female` `male` `child` `soft` `bright` `deep`) |
|
|
73
|
+
| `--dictionary FILE` | ローカル辞書 JSON (`KONGYOROID_DICTIONARY`) |
|
|
74
|
+
| `--cache-dir DIR` / `--no-cache` | ディスクキャッシュ (`DIR/kongyoroid-cache/` を使う) / 無効化 |
|
|
75
|
+
| `--endpoint URL` `--timeout-ms N` `--retries N` | VOICEVOX ENGINE の接続設定 |
|
|
76
|
+
| `--concurrency N` | バッチの並列数と HTTP の同時接続数 |
|
|
77
|
+
|
|
78
|
+
出力系フラグ (`speak` `sing` `render`):
|
|
79
|
+
|
|
80
|
+
| フラグ | 内容 |
|
|
81
|
+
| --- | --- |
|
|
82
|
+
| `-o, --output FILE\|-` | WAV の出力先 (既定 `kongyoroid-<kind>-<hash>.wav`)。`-` で標準出力 |
|
|
83
|
+
| `--force` | 既存ファイルを置き換える (同一内容なら `--force` 無しでも成功し `unchanged: true`) |
|
|
84
|
+
| `--play` | 書き出し後にシステムプレイヤーで再生 |
|
|
85
|
+
| `--plan-out FILE\|-` | 合成計画 (読み・音素・時刻) も JSON で書く |
|
|
86
|
+
| `--dry-run` | 検証と計画だけ (出力は `validate` と同じ) |
|
|
87
|
+
| `--diagnostics json\|compact` | 警告の出し方 |
|
|
88
|
+
|
|
89
|
+
環境変数: `KONGYOROID_ENGINE` `KONGYOROID_VOICE` `KONGYOROID_DICTIONARY` `KONGYOROID_CACHE_DIR` `KONGYOROID_ENDPOINT` (別名 `VOICEVOX_URL`) `KONGYOROID_SPEAKER` `KONGYOROID_SINGER` `KONGYOROID_TEACHER`。
|
|
90
|
+
|
|
91
|
+
## speak
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
kongyoroid speak (--text TEXT | --input FILE|-) [options]
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
| フラグ | 内容 |
|
|
98
|
+
| --- | --- |
|
|
99
|
+
| `-t, --text TEXT` / `-i, --input FILE\|-` | 読み上げるテキスト / ファイル・標準入力から |
|
|
100
|
+
| `--kana NOTATION` | かな記法で発音を指定 (テキスト解析を飛ばす) |
|
|
101
|
+
| `--dict-entry SURFACE=READING[:ACCENT]` | 一回限りの読み指定 (複数可) |
|
|
102
|
+
| `--no-strict-reading` | 読めない文字を警告付きで飛ばす |
|
|
103
|
+
| `--speed N` `--pitch-semitones N` `--pitch N` `--intonation N` | 話速 0.25–4、半音シフト −24..24、VOICEVOX 互換 pitchScale、抑揚 0–3 |
|
|
104
|
+
| `--volume N` / `--gain-db N` | 出力レベル |
|
|
105
|
+
| `--breathiness N` | 声門の張り −1..1.5 |
|
|
106
|
+
| `--pre-pause S` `--post-pause S` `--pause-length S` `--pause-scale N` | 前後無音、`、` の絶対長、ポーズ倍率 |
|
|
107
|
+
| `--no-upspeak` | 疑問文末を上げない |
|
|
108
|
+
| `--sample-rate HZ` `--seed N` | 8000–48000 Hz、ノイズの種 |
|
|
109
|
+
| `--speaker ID\|NAME` `--split sentence\|paragraph\|none` | VOICEVOX のスタイルと分割単位 |
|
|
110
|
+
| `--stream` `--format wav\|pcm\|ndjson` `--progress` | ストリーミング (後述) |
|
|
111
|
+
|
|
112
|
+
出力 (1 行):
|
|
113
|
+
|
|
114
|
+
```json
|
|
115
|
+
{"ok":true,"path":"/work/out.wav","written":true,"unchanged":false,"engine":"formant","engineVersion":"formant-2.0.0","kind":"speech","voice":"neutral","styles":{},"kana":"テ'_ストガ/サン'ゲン/シッパイ/シマ'_シタ。","chunks":1,"cached":false,"sha256":"…","requestHash":"…","bytes":108942,"sampleRate":24000,"channels":1,"frames":54449,"durationSeconds":2.269,"peak":0.4772,"rms":0.081,"limitedSamples":0,"elapsedMs":479.55,"timings":{"readMs":406.49,"planMs":3.86,"renderMs":66.94,"encodeMs":0,"totalMs":479.55},"warnings":[],"adjustments":[]}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
`--output -` の時は WAV バイト列が標準出力、同じ JSON (`"output":"stdout"`) が標準エラーに出ます。
|
|
119
|
+
|
|
120
|
+
### ストリーミング (`--stream`)
|
|
121
|
+
|
|
122
|
+
テキストを `。!?` と改行で文に分け、文が確定するたびに合成します。次の文の計画を先読みするので途切れません。
|
|
123
|
+
|
|
124
|
+
| `--format` | 標準出力の内容 |
|
|
125
|
+
| --- | --- |
|
|
126
|
+
| `pcm` | 生の s16le モノラル PCM。サンプルレートは `--sample-rate` (既定 24000) |
|
|
127
|
+
| `wav` | 長さ未確定 (`0xFFFFFFFF`) ヘッダー付き WAV。パイプ再生向け |
|
|
128
|
+
| `ndjson` | 1 行 1 イベント (下記) |
|
|
129
|
+
|
|
130
|
+
NDJSON のイベント:
|
|
131
|
+
|
|
132
|
+
```json
|
|
133
|
+
{"type":"sentence","index":0,"text":"最初の文です。","kana":"サイショノ/ブ'ンデ_ス。","durationSeconds":1.144,"startSeconds":0,"warnings":[]}
|
|
134
|
+
{"type":"audio","sequence":0,"sentence":0,"sampleRate":24000,"encoding":"s16le","channels":1,"frames":1200,"startFrame":0,"base64":"…"}
|
|
135
|
+
{"type":"end","ok":true,"operation":"speak","stream":true,"format":"ndjson","output":"stdout","sentences":2,"frames":51432,"durationSeconds":2.143,"sampleRate":24000}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
`-o FILE` と組み合わせるとファイルへ書き、終了時にヘッダーを書き戻します。`--progress` で文ごとの JSON 行を標準エラーに出します。文間のポーズは次の文の先頭に付き、`--post-pause` は最後に 1 回だけ付くので、一括合成と同じ尺になります。
|
|
139
|
+
|
|
140
|
+
## sing
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
kongyoroid sing (--lyrics KANA --melody NOTES | --mml MML [--lyrics KANA] | --input FILE|-) [options]
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
| フラグ | 内容 |
|
|
147
|
+
| --- | --- |
|
|
148
|
+
| `--lyrics KANA` | かな歌詞。有音の音符 1 つにつき 1 モーラ消費 |
|
|
149
|
+
| `--melody NOTES` | 空白区切り: 音名 (`C4` `F#4` `Bb3`)、MIDI 番号、`R` 休符、`~` タイ、`~G4` メリスマ、`\|` は無視 |
|
|
150
|
+
| `--beats LIST` | 音符ごとの拍 (`"1 1 2 0.5"`)。1 つだけなら全音符に適用。既定 1 |
|
|
151
|
+
| `--mml MML` | MML 譜 (`t120 o4 l8 c d e f g4 r4 e&e`)。`t` テンポ、`o` オクターブ、`< >`、`l` 既定長、`v` ベロシティ、`n60` MIDI、`r` 休符、`&` タイ/メリスマ、`[きゃ]` 歌詞、付点 |
|
|
152
|
+
| `-i, --input FILE\|-` | 音符リストを含むリクエスト JSON (フラグが優先) |
|
|
153
|
+
| `--tempo BPM` `--transpose N` | 20–400 (既定 120 か MML の値)、半音 −48..48 |
|
|
154
|
+
| `--vibrato-depth CENTS` `--vibrato-rate HZ` `--vibrato-delay-ms MS` `--vibrato-fade-ms MS` | ビブラート (既定 30 cent、5.5 Hz、180 ms 後から 250 ms かけて) |
|
|
155
|
+
| `--portamento-ms MS` | つながった音符間のピッチ移行 (既定 60、0 で階段) |
|
|
156
|
+
| `--scoop-cents N` `--scoop-ms MS` | フレーズ頭のしゃくり |
|
|
157
|
+
| `--no-consonant-compression` | 子音を短縮せず `NOTE_TOO_SHORT` で失敗 |
|
|
158
|
+
| `--lead-in S` `--lead-out S` | 前後の休符 (既定 0.16) |
|
|
159
|
+
| `--singer` `--teacher` | VOICEVOX の歌唱スタイル |
|
|
160
|
+
|
|
161
|
+
音符リスト (`--input` / `render`) の 1 音符:
|
|
162
|
+
|
|
163
|
+
| フィールド | 内容 |
|
|
164
|
+
| --- | --- |
|
|
165
|
+
| `id` | 安定した識別子 (既定 `n1`…)。計画とエラーに出る |
|
|
166
|
+
| `key` | MIDI 番号、音名、`null` (休符) |
|
|
167
|
+
| `beats` | 拍 (四分音符 = 1) |
|
|
168
|
+
| `lyric` | かな 1〜8 モーラ。`ー` は前の母音を伸ばす。休符は空 |
|
|
169
|
+
| `continuation` | `tie` (同じ高さで伸ばす) / `melisma` (高さを変えて伸ばす)。直前の有音音符に続く必要あり |
|
|
170
|
+
| `articulation` | `auto` (同じ母音の連続は再アタック) / `legato` / `rearticulate` |
|
|
171
|
+
| `velocity` / `gainDb` | 1–127 (100 が基準) / dB。どちらか一方 |
|
|
172
|
+
| `portamentoMs` | この音符への移行時間 |
|
|
173
|
+
| `vibrato` | `{depthCents, rateHz, delayMs, fadeMs}` または `false` |
|
|
174
|
+
|
|
175
|
+
出力は `speak` と同じ形式です。`plan` を使うと音符ごとの時刻を確認できます。
|
|
176
|
+
|
|
177
|
+
## render / validate / plan
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
kongyoroid render --input FILE|- [options]
|
|
181
|
+
kongyoroid validate (--input FILE|- | --text TEXT | --lyrics KANA --melody NOTES | --mml MML) [options]
|
|
182
|
+
kongyoroid plan (--input FILE|- | --text TEXT | --lyrics KANA --melody NOTES | --mml MML) [--detail summary|phonemes|acoustics]
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
`render` は `kongyoroid schema` の JSON Schema に従うリクエストを描画します。`validate` は描画せず次を返します。
|
|
186
|
+
|
|
187
|
+
```json
|
|
188
|
+
{"ok":true,"operation":"validate","engine":"formant","kind":"speech","renderable":true,"estimate":{"durationSeconds":0.588,"frames":14108,"wavBytes":28260,"sampleRate":24000},"voice":"neutral","reading":{"kana":"カンジ'。","frontend":"notation","moraCount":3},"notes":null,"warnings":[],"adjustments":[],"requestHash":"…","planHash":"…","request":{…}}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
`plan` は `plan.reading` (アクセント句と `accentSource`、`dictionaryHits`)、`plan.moras[]` (`startSeconds` / `endSeconds` / `phonemes`)、`plan.notes[]` (`startSeconds` / `vowelStartSeconds` / `endSeconds` / `sustainId` / `continuation` / `articulation`)、`plan.f0` (`min` / `max`)、`plan.frames`、`plan.wavBytes` を返します。`--detail phonemes` で音素ごとの時刻、`--detail acoustics` でキーフレーム (フォルマント周波数・帯域幅・音源レベル) まで出ます。
|
|
192
|
+
|
|
193
|
+
## batch
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
kongyoroid batch --input FILE|- --output-dir DIR [--force] [--concurrency N] [--stop-on-error]
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
入力は 1 行 1 ジョブの JSONL (`{"id":"name","request":{...}}`、`kongyoroid schema --kind batch`)。行が届き次第処理し (標準入力なら長寿命セッションとして使える)、完了順に 1 行ずつ結果を出します。失敗した行があっても続行し、終了コードは最悪の結果です。
|
|
200
|
+
|
|
201
|
+
```json
|
|
202
|
+
{"ok":true,"id":"a","line":1,"path":"/work/out/a.wav","written":true,"unchanged":false,"engine":"formant",…}
|
|
203
|
+
{"ok":false,"id":"b","line":2,"error":{"code":"NOTE_TOO_SHORT",…}}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## reading
|
|
207
|
+
|
|
208
|
+
```
|
|
209
|
+
kongyoroid reading (--text TEXT | --input FILE|-) [--kana NOTATION] [--dict-entry …] [--no-strict-reading] [--engine voicevox --speaker ID]
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
```json
|
|
213
|
+
{"ok":true,"operation":"reading","text":"kongyoroidはLLM向けです","engine":"formant","frontend":"jpreprocess","kana":"コンギョロイドワ/エルエルエ'ムムケデ_ス。","speaker":null,"warnings":[],
|
|
214
|
+
"dictionaryHits":[{"surface":"kongyoroid","reading":"コンギョロイド","accent":0,"source":"dictionary","applied":true},{"surface":"LLM","reading":"エルエルエム","accent":5,"source":"lexicon","applied":true}],
|
|
215
|
+
"sentences":[{"text":"kongyoroidはLLM向けです","kana":"…","start":0,"end":18}],
|
|
216
|
+
"phrases":[{"text":"コンギョロイドワ","accent":0,"accentSource":"dictionary","boundary":"phrase","pause":false,"interrogative":false,"moras":[{"text":"コ","consonant":"k","vowel":"o",…}]},…]}
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
`accentSource` は `frontend` (jpreprocess)、`dictionary` (ローカル辞書)、`lexicon` (内蔵レキシコン)、`user` (かな記法のアクセント)、`rule` (規則) のいずれかです。
|
|
220
|
+
|
|
221
|
+
## dict
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
kongyoroid dict <list|add|update|delete|check> [--scope local|voicevox] [--dictionary FILE] [--dry-run]
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
| 操作 | 主なフラグ |
|
|
228
|
+
| --- | --- |
|
|
229
|
+
| `add` / `update` | `--surface` `--reading` (`--pronunciation`) `--accent N` (0 = 平板、省略でフロントエンド任せ) `--match word\|anywhere` `--priority 0–10` `--id` |
|
|
230
|
+
| `delete` | `--id` |
|
|
231
|
+
| `check` | `--text` を辞書付きで読んで `kana` と `hits` を表示 |
|
|
232
|
+
| `list` | エントリ一覧 (`entries[]`) と `digest` |
|
|
233
|
+
|
|
234
|
+
ローカル辞書ファイルは `{"entries":[{"surface":"端","reading":"ハシ","accent":0,"match":"anywhere","priority":3}]}` (`kongyoroid schema --kind dictionary`)。既定パスは `KONGYOROID_DICTIONARY` か `./kongyoroid-dictionary.json`。同じ表記・同じ読みの `add` は `unchanged: true` で no-op です。`--scope voicevox` は VOICEVOX ENGINE のユーザー辞書を操作します (`--word-type PROPER_NOUN|COMMON_NOUN|VERB|ADJECTIVE|SUFFIX`)。
|
|
235
|
+
|
|
236
|
+
## voices / doctor / capabilities / schema
|
|
237
|
+
|
|
238
|
+
- `kongyoroid voices [--engine formant|voicevox|all] [--kind speech|song|all] [--query TEXT]`: 内蔵ボイス (`baseF0`、`f0Range`、`hash`) と、到達可能なら VOICEVOX スタイル。`--engine voicevox` 以外では VOICEVOX 不通は致命的ではありません (`voicevox.available: false`)。
|
|
239
|
+
- `kongyoroid doctor [--engine formant|voicevox|all|auto] [--speaker ID] [--initialize]`: フロントエンドのロード時間、短い合成の自己診断、キャッシュ、辞書、VOICEVOX の状態。検査したエンジンが使えなければ終了コード 3。
|
|
240
|
+
- `kongyoroid capabilities`: エンジン、ボイス、制限、コマンド、環境変数、終了コード、エラーコードの JSON。
|
|
241
|
+
- `kongyoroid schema [--kind request|batch|dictionary]`: JSON Schema (draft 2020-12)。
|
|
242
|
+
|
|
243
|
+
## inspect / play / cache
|
|
244
|
+
|
|
245
|
+
- `kongyoroid inspect FILE.wav [--pitch-track] [--window-ms N]`: サンプルレート、尺、ピーク、RMS、クリップ数、F0 推定 (`medianHz` / 範囲 / 有声率)。`--pitch-track` で窓ごとの F0。
|
|
246
|
+
- `kongyoroid play FILE.wav`: afplay / paplay / aplay / ffplay / play / PowerShell の順に試します。
|
|
247
|
+
- `kongyoroid cache <stats|prune|clear> [--cache-dir DIR] [--max-bytes N] [--max-entries N] [--dry-run]`: `DIR/kongyoroid-cache/` の中だけを対象にします。
|
|
248
|
+
|
|
249
|
+
## VOICEVOX を使う場合
|
|
250
|
+
|
|
251
|
+
`--speaker` / `--singer` / `--teacher` に id か名前 (`ずんだもん`、`ずんだもん/ノーマル`) を渡すと `voicevox` エンジンになります。`--engine auto` はエンドポイントの応答で切り替え、応答が無い間は 30 秒ごとに再確認します。VOICEVOX の歌唱は 1 音符 1 モーラで、タイ・メリスマ・複数モーラ・音符ごとのビブラートは内蔵エンジン専用です。
|
package/examples/batch.jsonl
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
{"id":"greeting","request":{"kind":"speech","text":"
|
|
2
|
-
{"id":"question","request":{"kind":"speech","text":"準備はできましたか?","
|
|
1
|
+
{"id":"greeting","request":{"kind":"speech","text":"おはようございます。今日の予定を確認しました。"}}
|
|
2
|
+
{"id":"question","request":{"kind":"speech","text":"準備はできましたか?","voice":"female","speed":0.95}}
|
|
3
3
|
{"id":"scale","request":{"kind":"song","notes":{"lyrics":"ドレミファソラシド","melody":"C4 D4 E4 F4 G4 A4 B4 C5","beats":"1 1 1 1 1 1 1 2"}}}
|
|
4
|
-
{"id":"
|
|
4
|
+
{"id":"kana","request":{"kind":"speech","text":"内蔵エンジンで読み上げます","kana":"ナイゾーエ'ンジンデ/ヨミアゲマ'_ス。"}}
|
|
5
|
+
{"id":"voicevox-zunda","request":{"kind":"speech","text":"ずんだもんなのだ。","speaker":"ずんだもん"}}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entries": [
|
|
3
|
+
{ "id": "kongyoroid", "surface": "kongyoroid", "reading": "コンギョロイド", "accent": 0, "note": "product name" },
|
|
4
|
+
{ "id": "zundamon", "surface": "ずんだもん", "reading": "ズンダモン", "accent": 1 },
|
|
5
|
+
{ "id": "hashi-edge", "surface": "端", "reading": "ハシ", "accent": 0, "match": "anywhere", "priority": 3 }
|
|
6
|
+
]
|
|
7
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "song",
|
|
3
|
+
"tempo": 100,
|
|
4
|
+
"notes": {
|
|
5
|
+
"lyrics": "きらきらひかるおそらのほしよ",
|
|
6
|
+
"melody": "C4 C4 G4 G4 A4 A4 G4 R F4 F4 E4 E4 D4 D4 C4 ~",
|
|
7
|
+
"beats": "1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1"
|
|
8
|
+
},
|
|
9
|
+
"voice": "female",
|
|
10
|
+
"vibrato": { "depthCents": 30, "rateHz": 5.6, "delayMs": 200, "fadeMs": 250 },
|
|
11
|
+
"leadIn": 0.3,
|
|
12
|
+
"leadOut": 0.5
|
|
13
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "song",
|
|
3
|
+
"engine": "formant",
|
|
4
|
+
"voice": "male",
|
|
5
|
+
"tempo": 90,
|
|
6
|
+
"transpose": -2,
|
|
7
|
+
"vibratoDepth": 35,
|
|
8
|
+
"notes": [
|
|
9
|
+
{ "key": null, "beats": 0.5 },
|
|
10
|
+
{ "id": "sa1", "key": "E4", "beats": 1, "lyric": "さ" },
|
|
11
|
+
{ "id": "ku1", "key": "E4", "beats": 1, "lyric": "く" },
|
|
12
|
+
{ "id": "ra1", "key": "F4", "beats": 2, "lyric": "ら" },
|
|
13
|
+
{ "id": "sa2", "key": "E4", "beats": 1, "lyric": "さ", "velocity": 110 },
|
|
14
|
+
{ "id": "ku2", "key": "E4", "beats": 1, "lyric": "く" },
|
|
15
|
+
{ "id": "ra2", "key": "F4", "beats": 2, "lyric": "ら" },
|
|
16
|
+
{ "id": "ya", "key": "E4", "beats": 1, "lyric": "や" },
|
|
17
|
+
{ "id": "yo", "key": "F4", "beats": 1, "lyric": "よ" },
|
|
18
|
+
{ "id": "i", "key": "G4", "beats": 1, "lyric": "い" },
|
|
19
|
+
{ "id": "no", "key": "G4", "beats": 1, "lyric": "の" },
|
|
20
|
+
{ "id": "so", "key": "F4", "beats": 1, "lyric": "そ" },
|
|
21
|
+
{ "id": "ra3", "key": "E4", "beats": 1, "lyric": "ら" },
|
|
22
|
+
{ "id": "wa", "key": "D4", "beats": 2, "lyric": "わ" },
|
|
23
|
+
{ "id": "wa-hold", "key": "D4", "beats": 2, "continuation": "tie", "vibrato": { "depthCents": 45 } }
|
|
24
|
+
]
|
|
25
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kongyo2/kongyoroid",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Japanese speech and singing synthesis for LLM agents: a JSON-first CLI and typed library with a built-in deterministic formant engine and an optional VOICEVOX ENGINE adapter.",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"description": "Japanese speech and singing synthesis for LLM agents: a JSON-first CLI and typed library with a built-in deterministic formant engine, a dictionary-backed Japanese text frontend (jpreprocess), streaming output, and an optional VOICEVOX ENGINE adapter.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "kongyo2",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"url": "https://github.com/kongyo2/kongyoroid/issues"
|
|
15
15
|
},
|
|
16
16
|
"engines": {
|
|
17
|
-
"node": ">=22.
|
|
17
|
+
"node": ">=22.18"
|
|
18
18
|
},
|
|
19
19
|
"main": "./dist/index.js",
|
|
20
20
|
"types": "./dist/index.d.ts",
|
|
@@ -32,7 +32,9 @@
|
|
|
32
32
|
"files": [
|
|
33
33
|
"dist",
|
|
34
34
|
"examples",
|
|
35
|
+
"docs",
|
|
35
36
|
"AGENTS.md",
|
|
37
|
+
"CHANGELOG.md",
|
|
36
38
|
"LICENSE",
|
|
37
39
|
"README.md"
|
|
38
40
|
],
|
|
@@ -53,6 +55,9 @@
|
|
|
53
55
|
"llm",
|
|
54
56
|
"cli",
|
|
55
57
|
"formant",
|
|
58
|
+
"jpreprocess",
|
|
59
|
+
"mml",
|
|
60
|
+
"streaming",
|
|
56
61
|
"kongyo2"
|
|
57
62
|
],
|
|
58
63
|
"scripts": {
|
|
@@ -72,6 +77,9 @@
|
|
|
72
77
|
"verify:package": "node --disable-warning=ExperimentalWarning scripts/verify-package.ts",
|
|
73
78
|
"prepack": "npm run build"
|
|
74
79
|
},
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"kanji2koe-openjtalk": "0.1.0"
|
|
82
|
+
},
|
|
75
83
|
"devDependencies": {
|
|
76
84
|
"@arethetypeswrong/cli": "0.18.5",
|
|
77
85
|
"@kongyo2/ts-comment-scanner": "1.6.0",
|
package/dist/formant.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { Phoneme } from "./mora.ts";
|
|
2
|
-
import type { OperationOptions, ResolvedRequest, ResolvedSong, ResolvedSpeech } from "./types.ts";
|
|
3
|
-
export interface Segment {
|
|
4
|
-
readonly phoneme: Phoneme;
|
|
5
|
-
readonly frames: number;
|
|
6
|
-
readonly f0Start: number;
|
|
7
|
-
readonly f0End: number;
|
|
8
|
-
readonly amplitude: number;
|
|
9
|
-
readonly vibrato: boolean;
|
|
10
|
-
readonly rampIn: boolean;
|
|
11
|
-
readonly rampOut: boolean;
|
|
12
|
-
}
|
|
13
|
-
export interface FormantPlan {
|
|
14
|
-
readonly sampleRate: number;
|
|
15
|
-
readonly seed: number;
|
|
16
|
-
readonly volume: number;
|
|
17
|
-
readonly vibratoDepth: number;
|
|
18
|
-
readonly vibratoRate: number;
|
|
19
|
-
readonly segments: readonly Segment[];
|
|
20
|
-
readonly frames: number;
|
|
21
|
-
}
|
|
22
|
-
export declare function planSpeech(request: ResolvedSpeech, sampleRate: number): FormantPlan;
|
|
23
|
-
export declare function planSong(request: ResolvedSong, sampleRate: number): FormantPlan;
|
|
24
|
-
export interface StreamOptions extends OperationOptions {
|
|
25
|
-
}
|
|
26
|
-
export declare function renderChunks(plan: FormantPlan, options?: StreamOptions): Generator<Float32Array, void, void>;
|
|
27
|
-
export declare function renderInto(plan: FormantPlan, sink: (block: Float32Array) => void, options?: StreamOptions): Promise<void>;
|
|
28
|
-
export declare function renderPlan(plan: FormantPlan, options?: StreamOptions): Float32Array;
|
|
29
|
-
export declare function encodePlanSync(plan: FormantPlan, options?: StreamOptions): Uint8Array;
|
|
30
|
-
export declare function encodePlan(plan: FormantPlan, options?: StreamOptions): Promise<Uint8Array>;
|
|
31
|
-
export declare function planRequest(request: ResolvedRequest, sampleRate: number): FormantPlan;
|
|
32
|
-
export declare function renderFormantSync(request: ResolvedRequest, sampleRate: number, options?: OperationOptions): Uint8Array;
|
|
33
|
-
export declare function renderFormant(request: ResolvedRequest, sampleRate: number, options?: OperationOptions): Promise<Uint8Array>;
|
|
34
|
-
//# sourceMappingURL=formant.d.ts.map
|
package/dist/formant.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"formant.d.ts","sourceRoot":"","sources":["../src/formant.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAuB,OAAO,EAAwB,MAAM,WAAW,CAAC;AAKpF,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkKlG,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAyGD,wBAAgB,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CA8DnF;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CA4E/E;AA4MD,MAAM,WAAW,aAAc,SAAQ,gBAAgB;CAAG;AAE1D,wBAAiB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB,GAAG,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAcjH;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,EACnC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY,CAQvF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB,GAAG,UAAU,CASzF;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAapG;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,CAErF;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,gBAAqB,GAC7B,UAAU,CAEZ;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,eAAe,EACxB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,UAAU,CAAC,CAErB"}
|