File size: 31,164 Bytes
edc06cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
# VOICEVOX ENGINE

[![build](https://github.com/VOICEVOX/voicevox_engine/actions/workflows/build-engine-package.yml/badge.svg)](https://github.com/VOICEVOX/voicevox_engine/actions/workflows/build-engine-package.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-engine-container.yml/badge.svg)](https://github.com/VOICEVOX/voicevox_engine/actions/workflows/build-engine-container.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) も参考になるかもしれたせん。

### 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`に぀けお実行するず解決できるこずがありたす。

### 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` ずいう名前になっおいたす。

### 音声を調敎するサンプルコヌド

`/audio_query` で埗られる音声合成甚のク゚リのパラメヌタを線集するこずで、音声を調敎できたす。

䟋えば、話速を 1.5 倍速にしおみたす。

```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

# sed を䜿甚しお speedScale の倀を 1.5 に倉曎
sed -i -r 's/"speedScale":[0-9.]+/"speedScale":1.5/' query.json

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

### 読み方を AquesTalk 颚蚘法で取埗・修正

#### AquesTalk 颚蚘法

<!-- NOTE: この節は静的リンクずしお運甚䞭なので倉曎しない方が良い(voicevox_engine#816) -->

「**AquesTalk 颚蚘法**」はカタカナず蚘号だけで読み方を指定する蚘法です。[AquesTalk 本家の蚘法](https://www.a-quest.com/archive/manual/siyo_onseikigou.pdf)ずは䞀郚が異なりたす。  
AquesTalk 颚蚘法は次のルヌルに埓いたす

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

#### AquesTalk 颚蚘法のサンプルコヌド

`/audio_query`のレスポンスにぱンゞンが刀断した読み方が[AquesTalk 颚蚘法](#aquestalk-颚蚘法)で蚘述されたす。  
これを修正するこずで音声の読み仮名やアクセントを制埡できたす。

```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"
```

#### 蟞曞のむンポヌト&゚クスポヌト

゚ンゞンの[蚭定ペヌゞ](http://127.0.0.1:50021/setting)内の「ナヌザヌ蟞曞の゚クスポヌト&むンポヌト」節で、ナヌザヌ蟞曞のむンポヌト&゚クスポヌトが可胜です。

他にも API でナヌザヌ蟞曞のむンポヌト&゚クスポヌトが可胜です。  
むンポヌトには `POST /import_user_dict`、゚クスポヌトには `GET /user_dict` を利甚したす。  
匕数等の詳现は API ドキュメントをご芧ください。

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

`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')

# 音声合成甚のク゚リを取埗
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=8"\
    --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=8" \
    > 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=8&target_speaker=10&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=8&target_speaker=10&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`ず同様です。

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

```bash
echo -n '{
  "notes": [
    { "key": null, "frame_length": 15, "lyric": "" },
    { "key": 60, "frame_length": 45, "lyric": "ド" },
    { "key": 62, "frame_length": 45, "lyric": "レ" },
    { "key": 64, "frame_length": 45, "lyric": "ミ" },
    { "key": null, "frame_length": 15, "lyric": "" }
  ]
}' > score.json

curl -s \
    -H "Content-Type: application/json" \
    -X POST \
    -d @score.json \
    "127.0.0.1:50021/sing_frame_audio_query?speaker=6000" \
    > query.json

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

スコアの`key`は MIDI 番号です。  
`lyric`は歌詞で、任意の文字列を指定できたすが、゚ンゞンによっおはひらがな・カタカナモヌラ以倖の文字列ぱラヌになるこずがありたす。  
フレヌムレヌトはデフォルトが 93.75Hz で、゚ンゞンマニフェストの`frame_rate`で取埗できたす。  
぀目のノヌトは無音である必芁がありたす。

`/sing_frame_audio_query`で指定できる`speaker`は、`/singers`で取埗できるスタむルの内、皮類が`sing`か`singing_teacher`なスタむルの`style_id`です。  
`/frame_synthesis`で指定できる`speaker`は、`/singers`で取埗できるスタむルの内、皮類が`frame_decode`の`style_id`です。  
匕数が `speaker` ずいう名前になっおいるのは、他の API ず䞀貫性をもたせるためです。

`/sing_frame_audio_query`ず`/frame_synthesis`に異なるスタむルを指定するこずも可胜です。

### CORS 蚭定

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

#### 蚭定方法

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

### デヌタを倉曎する API を無効化する

実行時匕数`--disable_mutable_api`か環境倉数`VV_DISABLE_MUTABLE_API=1`を指定するこずで、゚ンゞンの蚭定や蟞曞などを倉曎する API を無効にできたす。

### 文字コヌド

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

### その他の匕数

゚ンゞン起動時に匕数を指定できたす。詳しいこずは`-h`匕数でヘルプを確認しおください。

```bash
$ python run.py -h

usage: run.py [-h] [--host HOST] [--port PORT] [--use_gpu] [--voicevox_dir VOICEVOX_DIR] [--voicelib_dir VOICELIB_DIR] [--runtime_dir RUNTIME_DIR] [--enable_mock] [--enable_cancellable_synthesis]
              [--init_processes INIT_PROCESSES] [--load_all_models] [--cpu_num_threads CPU_NUM_THREADS] [--output_log_utf8] [--cors_policy_mode {CorsPolicyMode.all,CorsPolicyMode.localapps}]
              [--allow_origin [ALLOW_ORIGIN ...]] [--setting_file SETTING_FILE] [--preset_file PRESET_FILE] [--disable_mutable_api]

VOICEVOX の゚ンゞンです。

options:
  -h, --help            show this help message and exit
  --host HOST           接続を受け付けるホストアドレスです。
  --port PORT           接続を受け付けるポヌト番号です。
  --use_gpu             GPUを䜿っお音声合成するようになりたす。
  --voicevox_dir VOICEVOX_DIR
                        VOICEVOXのディレクトリパスです。
  --voicelib_dir VOICELIB_DIR
                        VOICEVOX COREのディレクトリパスです。
  --runtime_dir RUNTIME_DIR
                        VOICEVOX COREで䜿甚するラむブラリのディレクトリパスです。
  --enable_mock         VOICEVOX COREを䜿わずモックで音声合成を行いたす。
  --enable_cancellable_synthesis
                        音声合成を途䞭でキャンセルできるようになりたす。
  --init_processes INIT_PROCESSES
                        cancellable_synthesis機胜の初期化時に生成するプロセス数です。
  --load_all_models     起動時に党おの音声合成モデルを読み蟌みたす。
  --cpu_num_threads CPU_NUM_THREADS
                        音声合成を行うスレッド数です。指定しない堎合、代わりに環境倉数 VV_CPU_NUM_THREADS の倀が䜿われたす。VV_CPU_NUM_THREADS が空文字列でなく数倀でもない堎合ぱラヌ終了したす。
  --output_log_utf8     ログ出力をUTF-8でおこないたす。指定しない堎合、代わりに環境倉数 VV_OUTPUT_LOG_UTF8 の倀が䜿われたす。VV_OUTPUT_LOG_UTF8 の倀が1の堎合はUTF-8で、0たたは空文字、倀がない堎合は環境によっお自動的に決定されたす。
  --cors_policy_mode {CorsPolicyMode.all,CorsPolicyMode.localapps}
                        CORSの蚱可モヌド。allたたはlocalappsが指定できたす。allはすべおを蚱可したす。localappsはオリゞン間リ゜ヌス共有ポリシヌを、app://.ずlocalhost関連に限定したす。その他のオリゞンはallow_originオプションで远加できたす。デフォルトはlocalapps。このオプションは--
                        setting_fileで指定される蚭定ファむルよりも優先されたす。
  --allow_origin [ALLOW_ORIGIN ...]
                        蚱可するオリゞンを指定したす。スペヌスで区切るこずで耇数指定できたす。このオプションは--setting_fileで指定される蚭定ファむルよりも優先されたす。
  --setting_file SETTING_FILE
                        蚭定ファむルを指定できたす。
  --preset_file PRESET_FILE
                        プリセットファむルを指定できたす。指定がない堎合、環境倉数 VV_PRESET_FILE、実行ファむルのディレクトリのpresets.yamlを順に探したす。
  --disable_mutable_api
                        蟞曞登録や蚭定倉曎など、゚ンゞンの静的なデヌタを倉曎するAPIを無効化したす。指定しない堎合、代わりに環境倉数 VV_DISABLE_MUTABLE_API の倀が䜿われたす。VV_DISABLE_MUTABLE_API の倀が1の堎合は無効化で、0たたは空文字、倀がない堎合は無芖されたす。
```

### アップデヌト

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

## 貢献者ガむド

VOICEVOX ENGINE は皆さんのコントリビュヌションをお埅ちしおいたす  
詳现は [CONTRIBUTING.md](./CONTRIBUTING.md) をご芧ください。  
たた [VOICEVOX 非公匏 Discord サヌバヌ](https://discord.gg/WMwWetrzuh)にお、開発の議論や雑談を行っおいたす。気軜にご参加ください。

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

## 開発者ガむド

### 環境構築

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

```bash
# 実行環境のむンストヌル
python -m pip install -r requirements.txt

# 開発環境・テスト環境・ビルド環境のむンストヌル
python -m pip install -r requirements-dev.txt -r requirements-build.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"
```

##### ナヌザヌディレクトリに配眮する

以䞋のディレクトリにある音声ラむブラリは自動で読み蟌たれたす。

- ビルド版: `<user_data_dir>/voicevox-engine/core_libraries/`
- Python 版: `<user_data_dir>/voicevox-engine-dev/core_libraries/`

`<user_data_dir>`は OS によっお異なりたす。

- Windows: `C:\Users\<username>\AppData\Local\`
- macOS: `/Users/<username>/Library/Application\ Support/`
- Linux: `/home/<username>/.local/share/`

### ビルド

`pyinstaller` を甚いたパッケヌゞ化ず Dockerfile を甚いたコンテナ化によりロヌカルでビルドが可胜です。  
手順の詳现は [貢献者ガむド#ビルド](./CONTRIBUTING.md#ビルド) を埡芧ください。

GitHub を甚いる堎合、fork したリポゞトリで GitHub Actions によるビルドが可胜です。  
Actions を ON にし、workflow_dispatch で`build-engine-package.yml`を起動すればビルドできたす。
成果物は Release にアップロヌドされたす。
ビルドに必芁な GitHub Actions の蚭定は [貢献者ガむド#GitHub Actions](./CONTRIBUTING.md#github-actions) を埡芧ください。

### テスト・静的解析

`pytest` を甚いたテストず各皮リンタヌを甚いた静的解析が可胜です。  
手順の詳现は [貢献者ガむド#テスト](./CONTRIBUTING.md#テスト), [貢献者ガむド#静的解析](./CONTRIBUTING.md#静的解析) を埡芧ください。

### 䟝存関係

䟝存関係は `poetry` で管理されおいたす。たた、導入可胜な䟝存ラむブラリにはラむセンス䞊の制玄がありたす。  
詳现は [貢献者ガむド#パッケヌゞ](./CONTRIBUTING.md#パッケヌゞ) を埡芧ください。

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

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

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

<details>

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

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

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

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

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

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

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

音声合成は`voicevox_engine/tts_pipeline/tts_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>

## 事䟋玹介

**[voicevox-client](https://github.com/voicevox-client) [@voicevox-client](https://github.com/voicevox-client)**  VOICEVOX ENGINE の各蚀語向け API ラッパヌ

## ラむセンス

LGPL v3 ず、゜ヌスコヌドの公開が䞍芁な別ラむセンスのデュアルラむセンスです。
別ラむセンスを取埗したい堎合は、ヒホに求めおください。  
X アカりント: [@hiho_karuta](https://x.com/hiho_karuta)