File size: 5,630 Bytes
882ea5e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# 推論

推論は、コマンドライン、HTTP API、および Web UI をサポートしています。

!!! note
    全体として、推論は次のいくつかの部分で構成されています:

    1. VQGANを使用して、与えられた約10秒の音声をエンコードします。
    2. エンコードされたセマンティックトークンと対応するテキストを例として言語モデルに入力します。
    3. 新しいテキストが与えられた場合、モデルに対応するセマンティックトークンを生成させます。
    4. 生成されたセマンティックトークンをVITS / VQGANに入力してデコードし、対応する音声を生成します。

## コマンドライン推論

必要な`vqgan`および`llama`モデルを Hugging Face リポジトリからダウンロードします。

```bash
huggingface-cli download fishaudio/fish-speech-1.4 --local-dir checkpoints/fish-speech-1.4
```

### 1. 音声からプロンプトを生成する:

!!! note
    モデルにランダムに音声の音色を選ばせる場合、このステップをスキップできます。

```bash
python tools/vqgan/inference.py \
    -i "paimon.wav" \
    --checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth"
```

`fake.npy`ファイルが生成されるはずです。

### 2. テキストからセマンティックトークンを生成する:

```bash
python tools/llama/generate.py \
    --text "変換したいテキスト" \
    --prompt-text "参照テキスト" \
    --prompt-tokens "fake.npy" \
    --checkpoint-path "checkpoints/fish-speech-1.4" \
    --num-samples 2 \
    --compile
```

このコマンドは、作業ディレクトリに`codes_N`ファイルを作成します。ここで、N は 0 から始まる整数です。

!!! note
    `--compile`を使用して CUDA カーネルを融合し、より高速な推論を実現することができます(約 30 トークン/秒 -> 約 500 トークン/秒)。
    それに対応して、加速を使用しない場合は、`--compile`パラメータをコメントアウトできます。

!!! info
    bf16 をサポートしていない GPU の場合、`--half`パラメータを使用する必要があるかもしれません。

### 3. セマンティックトークンから音声を生成する:

#### VQGAN デコーダー

```bash
python tools/vqgan/inference.py \
    -i "codes_0.npy" \
    --checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth"
```

## HTTP API 推論

推論のための HTTP API を提供しています。次のコマンドを使用してサーバーを起動できます:

```bash
python -m tools.api \
    --listen 0.0.0.0:8080 \
    --llama-checkpoint-path "checkpoints/fish-speech-1.4" \
    --decoder-checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth" \
    --decoder-config-name firefly_gan_vq
```

推論を高速化したい場合は、--compile パラメータを追加できます。

その後、`http://127.0.0.1:8080/`で API を表示およびテストできます。

以下は、`tools/post_api.py` を使用してリクエストを送信する例です。

```bash
python -m tools.post_api \
    --text "入力するテキスト" \
    --reference_audio "参照音声へのパス" \
    --reference_text "参照音声テキスト" \
    --streaming True
```

上記のコマンドは、参照音声の情報に基づいて必要な音声を合成し、ストリーミング方式で返すことを示しています。

`{SPEAKER}``{EMOTION}`に基づいて参照音声をランダムに選択する必要がある場合は、以下の手順に従って設定します:

### 1. プロジェクトのルートディレクトリに`ref_data`フォルダを作成します。

### 2. `ref_data`フォルダ内に次のような構造のディレクトリを作成します。

```
.
├── SPEAKER1
│    ├──EMOTION1
│    │    ├── 21.15-26.44.lab
│    │    ├── 21.15-26.44.wav
│    │    ├── 27.51-29.98.lab
│    │    ├── 27.51-29.98.wav
│    │    ├── 30.1-32.71.lab
│    │    └── 30.1-32.71.flac
│    └──EMOTION2
│         ├── 30.1-32.71.lab
│         └── 30.1-32.71.mp3
└── SPEAKER2
    └─── EMOTION3
          ├── 30.1-32.71.lab
          └── 30.1-32.71.mp3

```

つまり、まず`ref_data``{SPEAKER}`フォルダを配置し、各スピーカーの下に`{EMOTION}`フォルダを配置し、各感情フォルダの下に任意の数の音声-テキストペアを配置します

### 3. 仮想環境で以下のコマンドを入力します.

```bash
python tools/gen_ref.py

```

参照ディレクトリを生成します。

### 4. API を呼び出します。

```bash
python -m tools.post_api \
    --text "入力するテキスト" \
    --speaker "${SPEAKER1}" \
    --emotion "${EMOTION1}" \
    --streaming True

```

上記の例はテスト目的のみです。

## WebUI 推論

次のコマンドを使用して WebUI を起動できます:

```bash
python -m tools.webui \
    --llama-checkpoint-path "checkpoints/fish-speech-1.4" \
    --decoder-checkpoint-path "checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth" \
    --decoder-config-name firefly_gan_vq
```

!!! note
    Gradio 環境変数(`GRADIO_SHARE`、`GRADIO_SERVER_PORT`、`GRADIO_SERVER_NAME`など)を使用して WebUI を構成できます。

お楽しみください!