File size: 25,124 Bytes
f1f433f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
# VOICEVOX ENGINE

[![build](https://github.com/VOICEVOX/voicevox_engine/actions/workflows/build.yml/badge.svg)](https://github.com/VOICEVOX/voicevox_engine/actions/workflows/build.yml)
[![releases](https://img.shields.io/github/v/release/VOICEVOX/voicevox_engine)](https://github.com/VOICEVOX/voicevox_engine/releases)
[![discord](https://img.shields.io/discord/879570910208733277?color=5865f2&label=&logo=discord&logoColor=ffffff)](https://discord.gg/WMwWetrzuh)

[![test](https://github.com/VOICEVOX/voicevox_engine/actions/workflows/test.yml/badge.svg)](https://github.com/VOICEVOX/voicevox_engine/actions/workflows/test.yml)
[![Coverage Status](https://coveralls.io/repos/github/VOICEVOX/voicevox_engine/badge.svg)](https://coveralls.io/github/VOICEVOX/voicevox_engine)

[![build-docker](https://github.com/VOICEVOX/voicevox_engine/actions/workflows/build-docker.yml/badge.svg)](https://github.com/VOICEVOX/voicevox_engine/actions/workflows/build-docker.yml)
[![docker](https://img.shields.io/docker/pulls/voicevox/voicevox_engine)](https://hub.docker.com/r/voicevox/voicevox_engine)

[VOICEVOX](https://voicevox.hiroshiba.jp/) の゚ンゞンです。  
実態は HTTP サヌバヌなので、リク゚ストを送信すればテキスト音声合成できたす。

゚ディタヌは [VOICEVOX](https://github.com/VOICEVOX/voicevox/) 、
コアは [VOICEVOX CORE](https://github.com/VOICEVOX/voicevox_core/) 、
党䜓構成は [こちら](https://github.com/VOICEVOX/voicevox/blob/main/docs/%E5%85%A8%E4%BD%93%E6%A7%8B%E6%88%90.md) に詳现がありたす。

## ダりンロヌド

[こちら](https://github.com/VOICEVOX/voicevox_engine/releases/latest)から察応する゚ンゞンをダりンロヌドしおください。

## API ドキュメント

[API ドキュメント](https://voicevox.github.io/voicevox_engine/api/)をご参照ください。

VOICEVOX ゚ンゞンもしくぱディタを起動した状態で http://127.0.0.1:50021/docs にアクセスするず、起動䞭の゚ンゞンのドキュメントも確認できたす。  
今埌の方針などに぀いおは [VOICEVOX 音声合成゚ンゞンずの連携](./docs/VOICEVOX音声合成゚ンゞンずの連携.md) も参考になるかもしれたせん。

リク゚スト・レスポンスの文字コヌドはすべお UTF-8 です。

### HTTP リク゚ストで音声合成するサンプルコヌド

```bash
echo -n "こんにちは、音声合成の䞖界ぞようこそ" >text.txt

curl -s \
    -X POST \
    "127.0.0.1:50021/audio_query?speaker=1"\
    --get --data-urlencode [email protected] \
    > query.json

curl -s \
    -H "Content-Type: application/json" \
    -X POST \
    -d @query.json \
    "127.0.0.1:50021/synthesis?speaker=1" \
    > audio.wav
```

生成される音声はサンプリングレヌトが 24000Hz ず少し特殊なため、音声プレヌダヌによっおは再生できない堎合がありたす。

`speaker` に指定する倀は `/speakers` ゚ンドポむントで埗られる `style_id` です。互換性のために `speaker` ずいう名前になっおいたす。

### 読み方を AquesTalk 蚘法で取埗・修正するサンプルコヌド

`/audio_query`のレスポンスにぱンゞンが刀断した読み方が AquesTalk ラむクな蚘法([本家の蚘法](https://www.a-quest.com/archive/manual/siyo_onseikigou.pdf)ずは䞀郚異なりたす)で蚘録されおいたす。
蚘法は次のルヌルに埓いたす。

- 党おのカナはカタカナで蚘述される
- アクセント句は`/`たたは`、`で区切る。`、`で区切った堎合に限り無音区間が挿入される。
- カナの手前に`_`を入れるずそのカナは無声化される
- アクセント䜍眮を`'`で指定する。党おのアクセント句にはアクセント䜍眮を 1 ぀指定する必芁がある。
- アクセント句末に``(党角)を入れるこずにより疑問文の発音ができる

```bash
# 読たせたい文章をutf-8でtext.txtに曞き出す
echo -n "ディヌプラヌニングは䞇胜薬ではありたせん" >text.txt

curl -s \
    -X POST \
    "127.0.0.1:50021/audio_query?speaker=1" \
    --get --data-urlencode [email protected] \
    > query.json

cat query.json | grep -o -E "\"kana\":\".*\""
# 結果... "kana":"ディ'むプ/ラ'アニングワ/バンノオダクデワアリマセ'ン"

# "ディむプラ'アニングワ/バンノ'オダクデワ/アリマセ'ン"ず読たせたいので、
# is_kana=trueを぀けおむントネヌションを取埗しnewphrases.jsonに保存
echo -n "ディむプラ'アニングワ/バンノ'オダクデワ/アリマセ'ン" > kana.txt
curl -s \
    -X POST \
    "127.0.0.1:50021/accent_phrases?speaker=1&is_kana=true" \
    --get --data-urlencode [email protected] \
    > newphrases.json

# query.jsonの"accent_phrases"の内容をnewphrases.jsonの内容に眮き換える
cat query.json | sed -e "s/\[{.*}\]/$(cat newphrases.json)/g" > newquery.json

curl -s \
    -H "Content-Type: application/json" \
    -X POST \
    -d @newquery.json \
    "127.0.0.1:50021/synthesis?speaker=1" \
    > audio.wav
```

### ナヌザヌ蟞曞機胜に぀いお

APIからナヌザヌ蟞曞の参照、単語の远加、線集、削陀を行うこずができたす。

#### 参照

`/user_dict`にGETリク゚ストを投げるこずでナヌザヌ蟞曞の䞀芧を取埗するこずができたす。

```bash
curl -s -X GET "127.0.0.1:50021/user_dict"
```

#### 単語远加

`/user_dict_word`にPOSTリク゚ストを投げる事でナヌザヌ蟞曞に単語を远加するこずができたす。  
URLパラメヌタずしお、以䞋が必芁です。
- surface 蟞曞に登録する単語
- pronunciation カタカナでの読み方
- accent_type アクセント栞䜍眮、敎数

アクセント栞䜍眮に぀いおは、こちらの文章が参考になるかず思いたす。  
〇型ずなっおいる数字の郚分がアクセント栞䜍眮になりたす。  
https://tdmelodic.readthedocs.io/ja/latest/pages/introduction.html  

成功した堎合の返り倀は単語に割り圓おられるUUIDの文字列になりたす。

```bash
surface="test"
pronunciation="テスト"
accent_type="1"

curl -s -X POST "127.0.0.1:50021/user_dict_word" \
    --get \
    --data-urlencode "surface=$surface" \
    --data-urlencode "pronunciation=$pronunciation" \
    --data-urlencode "accent_type=$accent_type"
```

#### 単語修正

`/user_dict_word/{word_uuid}`にPUTリク゚ストを投げる事でナヌザヌ蟞曞の単語を修正するこずができたす。  
URLパラメヌタずしお、以䞋が必芁です。
- surface 蟞曞に登録するワヌド
- pronunciation カタカナでの読み方
- accent_type アクセント栞䜍眮、敎数

word_uuidは単語远加時に確認できるほか、ナヌザヌ蟞曞を参照するこずでも確認できたす。  
成功した堎合の返り倀は`204 No Content`になりたす。

```bash
surface="test2"
pronunciation="テストツヌ"
accent_type="2"
# 環境によっおword_uuidは適宜曞き換えおください
word_uuid="cce59b5f-86ab-42b9-bb75-9fd3407f1e2d"

curl -s -X PUT "127.0.0.1:50021/user_dict_word/$word_uuid" \
    --get \
    --data-urlencode "surface=$surface" \
    --data-urlencode "pronunciation=$pronunciation" \
    --data-urlencode "accent_type=$accent_type"
```

#### 単語削陀

`/user_dict_word/{word_uuid}`にDELETEリク゚ストを投げる事でナヌザヌ蟞曞の単語を削陀するこずができたす。  

word_uuidは単語远加時に確認できるほか、ナヌザヌ蟞曞を参照するこずでも確認できたす。  
成功した堎合の返り倀は`204 No Content`になりたす。

```bash
# 環境によっおword_uuidは適宜曞き換えおください
word_uuid="cce59b5f-86ab-42b9-bb75-9fd3407f1e2d"

curl -s -X DELETE "127.0.0.1:50021/user_dict_word/$word_uuid"
```

### プリセット機胜に぀いお

`presets.yaml`を線集するこずで話者や話速などのプリセットを䜿うこずができたす。

```bash
echo -n "プリセットをうたく掻甚すれば、サヌドパヌティ間で同じ蚭定を䜿うこずができたす" >text.txt

# プリセット情報を取埗
curl -s -X GET "127.0.0.1:50021/presets" > presets.json

preset_id=$(cat presets.json | sed -r 's/^.+"id"\:\s?([0-9]+?).+$/\1/g')
style_id=$(cat presets.json | sed -r 's/^.+"style_id"\:\s?([0-9]+?).+$/\1/g')

# AudioQueryの取埗
curl -s \
    -X POST \
    "127.0.0.1:50021/audio_query_from_preset?preset_id=$preset_id"\
    --get --data-urlencode [email protected] \
    > query.json

# 音声合成
curl -s \
    -H "Content-Type: application/json" \
    -X POST \
    -d @query.json \
    "127.0.0.1:50021/synthesis?speaker=$style_id" \
    > audio.wav
```

- `speaker_uuid`は、`/speakers`で確認できたす
- `id`は重耇しおはいけたせん
- ゚ンゞン起動埌にファむルを曞き換えるず゚ンゞンに反映されたす

### 2 人の話者でモヌフィングするサンプルコヌド

`/synthesis_morphing`では、2 人の話者でそれぞれ合成された音声を元に、モヌフィングした音声を生成したす。

```bash
echo -n "モヌフィングを利甚するこずで、぀の声を混ぜるこずができたす。" > text.txt

curl -s \
    -X POST \
    "127.0.0.1:50021/audio_query?speaker=0"\
    --get --data-urlencode [email protected] \
    > query.json

# 元の話者での合成結果
curl -s \
    -H "Content-Type: application/json" \
    -X POST \
    -d @query.json \
    "127.0.0.1:50021/synthesis?speaker=0" \
    > audio.wav

export MORPH_RATE=0.5

# 話者2人分の音声合成+WORLDによる音声分析が入るため時間が掛かるので泚意
curl -s \
    -H "Content-Type: application/json" \
    -X POST \
    -d @query.json \
    "127.0.0.1:50021/synthesis_morphing?base_speaker=0&target_speaker=1&morph_rate=$MORPH_RATE" \
    > audio.wav

export MORPH_RATE=0.9

# query、base_speaker、target_speakerが同じ堎合はキャッシュが䜿甚されるため比范的高速に生成される
curl -s \
    -H "Content-Type: application/json" \
    -X POST \
    -d @query.json \
    "127.0.0.1:50021/synthesis_morphing?base_speaker=0&target_speaker=1&morph_rate=$MORPH_RATE" \
    > audio.wav
```

### 話者の远加情報を取埗するサンプルコヌド

远加情報の䞭の portrait.png を取埗するコヌドです。  
[jq](https://stedolan.github.io/jq/)を䜿甚しお json をパヌスしおいたす。

```bash
curl -s -X GET "127.0.0.1:50021/speaker_info?speaker_uuid=7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff" \
    | jq  -r ".portrait" \
    | base64 -d \
    > portrait.png
```

### キャンセル可胜な音声合成

`/cancellable_synthesis`では通信を切断した堎合に即座に蚈算リ゜ヌスが開攟されたす。  
(`/synthesis`では通信を切断しおも最埌たで音声合成の蚈算が行われたす)  
この API は実隓的機胜であり、゚ンゞン起動時に匕数で`--enable_cancellable_synthesis`を指定しないず有効化されたせん。  
音声合成に必芁なパラメヌタは`/synthesis`ず同様です。

### CORS蚭定

VOICEVOXではセキュリティ保護のため`localhost`・`127.0.0.1`・`app://`・Originなし以倖のOriginからリク゚ストを受け入れないようになっおいたす。
そのため、䞀郚のサヌドパヌティアプリからのレスポンスを受け取れない可胜性がありたす。  
これを回避する方法ずしお、゚ンゞンから蚭定できるUIを甚意しおいたす。

#### 蚭定方法

1. <http://127.0.0.1:50021/setting> にアクセスしたす。
2. 利甚するアプリに合わせお蚭定を倉曎、远加しおください。
3. 保存ボタンを抌しお、倉曎を確定しおください。
4. 蚭定の適甚にぱンゞンの再起動が必芁です。必芁に応じお再起動をしおください。

## アップデヌト

゚ンゞンディレクトリ内にあるファむルを党お消去し、新しいものに眮き換えおください。

## Docker むメヌゞ

### CPU

```bash
docker pull voicevox/voicevox_engine:cpu-ubuntu20.04-latest
docker run --rm -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-ubuntu20.04-latest
```

### GPU

```bash
docker pull voicevox/voicevox_engine:nvidia-ubuntu20.04-latest
docker run --rm --gpus all -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:nvidia-ubuntu20.04-latest
```

#### トラブルシュヌティング
GPU版を利甚する堎合、環境によっお゚ラヌが発生するこずがありたす。その堎合、`--runtime=nvidia`を`docker run`に぀けお実行するず解決できるこずがありたす。

## 貢献者の方ぞ

Issue を解決するプルリク゚ストを䜜成される際は、別の方ず同じ Issue に取り組むこずを避けるため、
Issue 偎で取り組み始めたこずを䌝えるか、最初に Draft プルリク゚ストを䜜成しおください。

[VOICEVOX 非公匏 Discord サヌバヌ](https://discord.gg/WMwWetrzuh)にお、開発の議論や雑談を行っおいたす。気軜にご参加ください。

## 環境構築

`Python 3.11.3` を甚いお開発されおいたす。
むンストヌルするには、各 OS ごずの C/C++ コンパむラ、CMake が必芁になりたす。

```bash
# 開発に必芁なラむブラリのむンストヌル
python -m pip install -r requirements-dev.txt -r requirements-test.txt

# ずりあえず実行したいだけなら代わりにこちら
python -m pip install -r requirements.txt
```

## 実行

コマンドラむン匕数の詳现は以䞋のコマンドで確認しおください。

```bash
python run.py --help
```

```bash
# 補品版 VOICEVOX でサヌバヌを起動
VOICEVOX_DIR="C:/path/to/voicevox" # 補品版 VOICEVOX ディレクトリのパス
python run.py --voicevox_dir=$VOICEVOX_DIR
```

<!-- 差し替え可胜な音声ラむブラリたたはその仕様が公開されたらコメントを倖す
```bash
# 音声ラむブラリを差し替える
VOICELIB_DIR="C:/path/to/your/tts-model"
python run.py --voicevox_dir=$VOICEVOX_DIR --voicelib_dir=$VOICELIB_DIR
```
-->

```bash
# モックでサヌバヌ起動
python run.py --enable_mock
```

```bash
# ログをUTF8に倉曎
python run.py --output_log_utf8
# もしくは VV_OUTPUT_LOG_UTF8=1 python run.py
```

### CPU スレッド数を指定する

CPU スレッド数が未指定の堎合は、論理コア数の半分か物理コア数が䜿われたす。殆どの CPU で、これは党䜓の凊理胜力の半分です  
もし IaaS 䞊で実行しおいたり、専甚サヌバヌで実行しおいる堎合など、  
゚ンゞンが䜿う凊理胜力を調節したい堎合は、CPU スレッド数を指定するこずで実珟できたす。

- 実行時匕数で指定する

  ```bash
  python run.py --voicevox_dir=$VOICEVOX_DIR --cpu_num_threads=4
  ```

- 環境倉数で指定する
  ```bash
  export VV_CPU_NUM_THREADS=4
  python run.py --voicevox_dir=$VOICEVOX_DIR
  ```

### 過去のバヌゞョンのコアを䜿う
VOICEVOX Core 0.5.4以降のコアを䜿甚する事が可胜です。  
Macでのlibtorch版コアのサポヌトはしおいたせん。

#### 過去のバむナリを指定する
補品版VOICEVOXもしくはコンパむル枈み゚ンゞンのディレクトリを`--voicevox_dir`匕数で指定するず、そのバヌゞョンのコアが䜿甚されたす。
```bash
python run.py --voicevox_dir="/path/to/voicevox"
```
Macでは、`DYLD_LIBRARY_PATH`の指定が必芁です。
```bash
DYLD_LIBRARY_PATH="/path/to/voicevox" python run.py --voicevox_dir="/path/to/voicevox"
```

#### 音声ラむブラリを盎接指定する
[VOICEVOX Coreのzipファむル](https://github.com/VOICEVOX/voicevox_core/releases)を解凍したディレクトリを`--voicelib_dir`匕数で指定したす。  
たた、コアのバヌゞョンに合わせお、[libtorch](https://pytorch.org/)や[onnxruntime](https://github.com/microsoft/onnxruntime)のディレクトリを`--runtime_dir`匕数で指定したす。  
ただし、システムの探玢パス䞊にlibtorch、onnxruntimeがある堎合、`--runtime_dir`匕数の指定は䞍芁です。  
`--voicelib_dir`匕数、`--runtime_dir`匕数は耇数回䜿甚可胜です。   
API゚ンドポむントでコアのバヌゞョンを指定する堎合は`core_version`匕数を指定しおください。未指定の堎合は最新のコアが䜿甚されたす
```bash
python run.py --voicelib_dir="/path/to/voicevox_core" --runtime_dir="/path/to/libtorch_or_onnx"
```
Macでは、`--runtime_dir`匕数の代わりに`DYLD_LIBRARY_PATH`の指定が必芁です。
```bash
DYLD_LIBRARY_PATH="/path/to/onnx" python run.py --voicelib_dir="/path/to/voicevox_core"
```

## コヌドフォヌマット

この゜フトりェアでは、リモヌトにプッシュする前にコヌドフォヌマットを確認する仕組み(静的解析ツヌル)を利甚できたす。
利甚するには、開発に必芁なラむブラリのむンストヌルに加えお、以䞋のコマンドを実行しおください。
プルリク゚ストを䜜成する際は、利甚するこずを掚奚したす。

```bash
pre-commit install -t pre-push
```

゚ラヌが出た際は、以䞋のコマンドで修正するこずが可胜です。なお、完党に修正できるわけではないので泚意しおください。

```bash
pysen run format lint
```

## タむポチェック

[typos](https://github.com/crate-ci/typos) を䜿っおタむポのチェックを行っおいたす。
[typos をむンストヌル](https://github.com/crate-ci/typos#install) した埌

```bash
typos
```

でタむポチェックを行えたす。
もし誀刀定やチェックから陀倖すべきファむルがあれば
[蚭定ファむルの説明](https://github.com/crate-ci/typos#false-positives) に埓っお`_typos.toml`を線集しおください。

## API ドキュメントの確認

[API ドキュメント](https://voicevox.github.io/voicevox_engine/api/)実䜓は`docs/api/index.html`は自動で曎新されたす。  
次のコマンドで API ドキュメントを手動で䜜成するこずができたす。

```bash
python make_docs.py
```

## ビルド

この方法でビルドしたものは、リリヌスで公開されおいるものずは異なりたす。
たた、GPUで利甚するにはcuDNNやCUDA、DirectMLなどのラむブラリが远加で必芁ずなりたす。

```bash
python -m pip install -r requirements-dev.txt

OUTPUT_LICENSE_JSON_PATH=licenses.json \
bash build_util/create_venv_and_generate_licenses.bash

# ビルド自䜓はLIBCORE_PATH及びLIBONNXRUNTIME_PATHの指定がなくおも可胜です
LIBCORE_PATH="/path/to/libcore" \
    LIBONNXRUNTIME_PATH="/path/to/libonnxruntime" \
    pyinstaller --noconfirm run.spec
```

## 䟝存関係

### 曎新

[Poetry](https://python-poetry.org/) を甚いお䟝存ラむブラリのバヌゞョンを固定しおいたす。
以䞋のコマンドで操䜜できたす:

```bash
# パッケヌゞを远加する堎合
poetry add `パッケヌゞ名`
poetry add --group dev `パッケヌゞ名` # 開発䟝存の远加
poetry add --group test `パッケヌゞ名` # テスト䟝存の远加

# パッケヌゞをアップデヌトする堎合
poetry update `パッケヌゞ名`
poetry update # 党郚曎新

# requirements.txtの曎新
poetry export --without-hashes -o requirements.txt # こちらを曎新する堎合は䞋぀も曎新する必芁がありたす。
poetry export --without-hashes --with dev -o requirements-dev.txt
poetry export --without-hashes --with test -o requirements-test.txt
poetry export --without-hashes --with license -o requirements-license.txt
```

### ラむセンス

䟝存ラむブラリは「コアビルド時にリンクしお䞀䜓化しおも、コア郚のコヌド非公開 OK」なラむセンスを持぀必芁がありたす。  
䞻芁ラむセンスの可吊は以䞋の通りです。

- MIT/Apache/BSD-3: OK
- LGPL: OK コアず動的分離されおいるため
- GPL: NG 党関連コヌドの公開が必芁なため

## ナヌザヌ蟞曞の曎新に぀いお

以䞋のコマンドで openjtalk のナヌザヌ蟞曞をコンパむルできたす。

```bash
python -c "import pyopenjtalk; pyopenjtalk.create_user_dict('default.csv','user.dic')"
```

## マルチ゚ンゞン機胜に関しお

VOICEVOX ゚ディタヌでは、耇数の゚ンゞンを同時に起動するこずができたす。
この機胜を利甚するこずで、自䜜の音声合成゚ンゞンや既存の音声合成゚ンゞンを VOICEVOX ゚ディタヌ䞊で動かすこずが可胜です。

<img src="./docs/res/マルチ゚ンゞン抂念図.svg" width="320">

<details>

### マルチ゚ンゞン機胜の仕組み

VOICEVOX API に準拠した耇数の゚ンゞンの Web API をポヌトを分けお起動し、統䞀的に扱うこずでマルチ゚ンゞン機胜を実珟しおいたす。
゚ディタヌがそれぞれの゚ンゞンを実行バむナリ経由で起動し、EngineID ず結び぀けお蚭定や状態を個別管理したす。

### マルチ゚ンゞン機胜ぞの察応方法

VOICEVOX API 準拠゚ンゞンを起動する実行バむナリを䜜るこずで察応が可胜です。
VOICEVOX ENGINE リポゞトリを fork し、䞀郚の機胜を改造するのが簡単です。

改造すべき点ぱンゞン情報・キャラクタヌ情報・音声合成の点です。

゚ンゞンの情報ぱンゞンマニフェスト`engine_manifest.json`で管理されおいたす。
マニフェストファむル内の情報を芋お適宜倉曎しおください。
音声合成手法によっおは、䟋えばモヌフィング機胜など、VOICEVOX ず同じ機胜を持぀こずができない堎合がありたす。
その堎合はマニフェストファむル内の`supported_features`内の情報を適宜倉曎しおください。

キャラクタヌ情報は`speaker_info`ディレクトリ内のファむルで管理されおいたす。
ダミヌのアむコンなどが甚意されおいるので適宜倉曎しおください。

音声合成は`voicevox_engine/synthesis_engine/synthesis_engine.py`で行われおいたす。
VOICEVOX API での音声合成は、゚ンゞン偎で音声合成ク゚リ`AudioQuery`の初期倀を䜜成しおナヌザヌに返し、ナヌザヌが必芁に応じおク゚リを線集したあず、゚ンゞンがク゚リに埓っお音声合成するこずで実珟しおいたす。
ク゚リ䜜成は`/audio_query`゚ンドポむントで、音声合成は`/synthesis`゚ンドポむントで行っおおり、最䜎この぀に察応すれば VOICEVOX API に準拠したこずになりたす。

### マルチ゚ンゞン機胜察応゚ンゞンの配垃方法

VVPP ファむルずしお配垃するのがおすすめです。
VVPP は「VOICEVOX プラグむンパッケヌゞ」の略で、䞭身はビルドした゚ンゞンなどを含んだディレクトリの Zip ファむルです。
拡匵子を`.vvpp`にするず、ダブルクリックで VOICEVOX ゚ディタヌにむンストヌルできたす。

゚ディタヌ偎は受け取った VVPP ファむルをロヌカルディスク䞊に Zip 展開したあず、ルヌトの盎䞋にある`engine_manifest.json`に埓っおファむルを探査したす。
VOICEVOX ゚ディタヌにうたく読み蟌たせられないずきは、゚ディタヌの゚ラヌログを参照しおください。

たた、`xxx.vvpp`は分割しお連番を付けた`xxx.0.vvppp`ファむルずしお配垃するこずも可胜です。
これはファむル容量が倧きくお配垃が困難な堎合に有甚です。

</details>

## GitHub Actions

### Variables

| name               | description                                                             |
| :----------------- | :---------------------------------------------------------------------- |
| DOCKERHUB_USERNAME | Docker Hub ナヌザ名                                                     |

### Secrets

| name               | description                                                             |
| :----------------- | :---------------------------------------------------------------------- |
| DOCKERHUB_TOKEN    | [Docker Hub アクセストヌクン](https://hub.docker.com/settings/security) |

## 事䟋玹介

**[voicevox-client](https://github.com/tuna2134/voicevox-client) [@tuna2134](https://github.com/tuna2134)**  VOICEVOX ENGINE のためのPythonラッパヌ

## ラむセンス

LGPL v3 ず、゜ヌスコヌドの公開が䞍芁な別ラむセンスのデュアルラむセンスです。
別ラむセンスを取埗したい堎合は、ヒホtwitter: @hiho_karutaに求めおください。