ubuntu系统部署GPT-SoVITS

主要是因为服务器只能用命令行,所以记录一下,不然可以直接用webui处理。
只有最基础的切割音频、识别文字、推理的代码,没有训练、微调
参考视频:链接

下载安装包

可以直接下载windows部分的下载整合包 链接 ,比克隆代码方便很多,不需要分别下载各种模型
GPT-SoVITS指南 里有写解压的注意事项,用ubuntu的 7z x <文件名> 解压没有问题
解压的注意事项
我下载的版本是GPT-SoVITS-beta0706fix1.7z,解压后结构如下,加粗的是文件夹,其中tools里放的是uvr5(处理背景噪音)、切割音频、asr(识别文字)的代码,处理结果分别放在 /output/uvr5_opt/output/asr_opt 下(也可以自定义), GPT_SoVITS 里放的主要是训练和推理的代码,GPT_weightsSoVITS_weights 里放的是训练后的模型,output 里放的是一系列处理的结果。

├── api.py
├── batch_inference.py
├── colab_webui.ipynb
├── config.py
├── Docker
├── dockerbuild.sh
├── docker-compose.yaml
├── Dockerfile
├── docs
├── ffmpeg.exe
├── ffprobe.exe
├── go-webui.bat
├── go-webui.ps1
├── GPT_SoVITS
├── GPT_SoVITS_Inference.ipynb
├── gpt-sovits_kaggle.ipynb
├── GPT_weights
├── gweight.txt
├── i18n
├── install.sh
├── LICENSE
├── logs
├── output
├── README.md
├── requirements.txt
├── runtime
├── SoVITS_weights
├── sweight.txt
├── TEMP
├── tools
└── webui.py

配置cuda环境(11.8)

sudo apt install ffmpeg
sudo apt install libsox-dev
conda create -n gptsovits python=3.9
conda activate gptsovits
pip3 install torch==2.1.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
bash install.sh
conda install -c conda-forge 'ffmpeg<7'

版本

Package                   Version
------------------------- -----------
absl-py                   2.1.0
addict                    2.4.0
aiofiles                  23.2.1
aiohttp                   3.9.5
aiosignal                 1.3.1
aliyun-python-sdk-core    2.15.1
aliyun-python-sdk-kms     2.16.3
altair                    5.3.0
annotated-types           0.7.0
antlr4-python3-runtime    4.9.3
anyio                     4.4.0
async-timeout             4.0.3
attrs                     23.2.0
audioread                 3.0.1
av                        12.3.0
Brotli                    1.0.9
certifi                   2024.7.4
cffi                      1.16.0
chardet                   5.2.0
charset-normalizer        3.3.2
click                     8.1.7
cn2an                     0.5.22
coloredlogs               15.0.1
contourpy                 1.2.1
crcmod                    1.7
cryptography              43.0.0
ctranslate2               4.3.1
cycler                    0.12.1
Cython                    0.29.37
datasets                  2.20.0
decorator                 5.1.1
dill                      0.3.8
Distance                  0.1.3
dnspython                 2.6.1
editdistance              0.8.1
einops                    0.8.0
email_validator           2.2.0
exceptiongroup            1.2.2
fastapi                   0.111.1
fastapi-cli               0.0.4
faster-whisper            1.0.3
ffmpeg-python             0.2.0
ffmpy                     0.3.2
filelock                  3.13.1
flatbuffers               24.3.25
fonttools                 4.53.1
frozenlist                1.4.1
fsspec                    2024.2.0
funasr                    1.0.0
future                    1.0.0
g2p-en                    2.1.0
gast                      0.6.0
gmpy2                     2.1.2
gradio                    3.38.0
gradio_client             0.8.1
grpcio                    1.65.1
h11                       0.14.0
hdbscan                   0.8.37
httpcore                  1.0.5
httptools                 0.6.1
httpx                     0.27.0
huggingface-hub           0.24.3
humanfriendly             10.0
hydra-core                1.3.2
idna                      3.7
importlib_metadata        8.2.0
importlib_resources       6.4.0
inflect                   7.3.1
jaconv                    0.4.0
jamo                      0.4.1
jieba                     0.42.1
jieba_fast                0.53
Jinja2                    3.1.3
jmespath                  0.10.0
joblib                    1.4.2
jsonschema                4.23.0
jsonschema-specifications 2023.12.1
kaldiio                   2.18.0
kiwisolver                1.4.5
LangSegment               0.3.3
librosa                   0.9.2
lightning-utilities       0.11.6
linkify-it-py             2.0.3
llvmlite                  0.39.1
Markdown                  3.6
markdown-it-py            2.2.0
MarkupSafe                2.1.3
matplotlib                3.9.1
mdit-py-plugins           0.3.3
mdurl                     0.1.2
mkl-fft                   1.3.8
mkl-random                1.2.4
mkl-service               2.4.0
modelscope                1.10.0
more-itertools            10.3.0
mpmath                    1.3.0
multidict                 6.0.5
multiprocess              0.70.16
networkx                  3.2.1
nltk                      3.8.1
numba                     0.56.4
numpy                     1.23.4
nvidia-cublas-cu11        11.11.3.6
nvidia-cuda-cupti-cu11    11.8.87
nvidia-cuda-nvrtc-cu11    11.8.89
nvidia-cuda-runtime-cu11  11.8.89
nvidia-cudnn-cu11         8.7.0.84
nvidia-cufft-cu11         10.9.0.58
nvidia-curand-cu11        10.3.0.86
nvidia-cusolver-cu11      11.4.1.48
nvidia-cusparse-cu11      11.7.5.86
nvidia-nccl-cu11          2.20.5
nvidia-nvtx-cu11          11.8.86
omegaconf                 2.3.0
onnxruntime               1.18.1
orjson                    3.10.6
oss2                      2.18.6
packaging                 24.1
pandas                    2.2.2
pillow                    10.4.0
pip                       24.0
platformdirs              4.2.2
pooch                     1.8.2
proces                    0.1.7
protobuf                  4.25.4
psutil                    6.0.0
py3langid                 0.2.2
pyarrow                   17.0.0
pyarrow-hotfix            0.6
pycparser                 2.22
pycryptodome              3.20.0
pydantic                  2.8.2
pydantic_core             2.20.1
pydub                     0.25.1
Pygments                  2.18.0
pyopenjtalk               0.3.4
pyparsing                 3.1.2
pypinyin                  0.51.0
PySocks                   1.7.1
python-dateutil           2.9.0.post0
python-dotenv             1.0.1
python-multipart          0.0.9
pytorch-lightning         2.3.3
pytorch-wpe               0.0.1
pytz                      2024.1
PyYAML                    6.0.1
referencing               0.35.1
regex                     2024.7.24
requests                  2.32.3
resampy                   0.4.3
rich                      13.7.1
rpds-py                   0.19.1
safetensors               0.4.3
scikit-learn              1.5.1
scipy                     1.13.1
semantic-version          2.10.0
sentencepiece             0.2.0
setuptools                69.5.1
shellingham               1.5.4
simplejson                3.19.2
six                       1.16.0
sniffio                   1.3.1
sortedcontainers          2.4.0
soundfile                 0.12.1
starlette                 0.37.2
sympy                     1.12
tensorboard               2.17.0
tensorboard-data-server   0.7.2
threadpoolctl             3.5.0
tokenizers                0.19.1
tomli                     2.0.1
toolz                     0.12.1
torch                     2.1.1
torch-complex             0.4.4
torchaudio                2.1.1
torchmetrics              1.4.0.post0
torchvision               0.16.1
tqdm                      4.66.4
transformers              4.43.3
triton                    2.1.0
typeguard                 4.3.0
typer                     0.12.3
typing_extensions         4.11.0
tzdata                    2024.1
uc-micro-py               1.0.3
umap                      0.1.1
urllib3                   2.2.2
uvicorn                   0.30.3
uvloop                    0.19.0
watchfiles                0.22.0
websockets                11.0.3
Werkzeug                  3.0.3
wheel                     0.43.0
wordsegment               1.3.1
xxhash                    3.4.1
yapf                      0.40.2
yarl                      1.9.4
zipp                      3.19.2

上传音频

音频文件 demo.wav ,这里图方便直接传了个10秒以内的

分割音频

slice_audio.py 代码中可知参数如下

  • inp:音频文件的地址
  • opt_root:输出结果的文件夹路径
  • threshold:音量小于这个值视作静音的备选切割点
  • min_length:每段最小多长,如果第一段太短一直和后面段连起来直到超过这个值
  • min_interval:最短切割间隔
  • hop_size:怎么算音量曲线,越小精度越大计算量越高(不是精度越大效果越好)
  • max_sil_kept:切完后静音最多留多长
  • i_part、all_part:用于并行处理

运行脚本的参数按上述参数的顺序写:

python tools/slice_audio.py \
	/home/asus/Lang/graphrag/tts/demo.wav \
	/home/asus/Lang/graphrag/tts/GPT-SoVITS/output/slicer \
	-34 4000 300 10 200 1.0 0.8 0 1

asr(识别文字)

funasr_asr.py 代码中可知参数如下,都是 文件夹的路径 而非文件的路径:

  • -i--input_folder:分割好的wav音频文件夹路径(不分割的也可以)
  • -o--output_folder:识别出来的文字存放的文件夹路径
python tools/asr/funasr_asr.py \
	-i /home/asus/Lang/graphrag/tts/GPT-SoVITS/output/slicer \
	-o /home/asus/Lang/graphrag/tts/GPT-SoVITS/output/list

生成文件slicer.list,内容如下:
格式:<路径>|<演讲者名字>|<语言>|<文本内容>

/home/asus/Lang/graphrag/tts/GPT-SoVITS/output/slicer/demo1.wav_0000000000_0000220480.wav|slicer|ZH|然后在这个新页面里点,这里可以播放音频。你对照着看左边的文本有没有差错,有的话就修改一下。
/home/asus/Lang/graphrag/tts/GPT-SoVITS/output/slicer/demo2.wav_0000017600_0000137280.wav|slicer|ZH|未来的研究应进一步探讨这一关系的动态特征。
/home/asus/Lang/graphrag/tts/GPT-SoVITS/output/slicer/demo2.wav_0000145600_0000255360.wav|slicer|ZH|以推动更为全面和深入的可持续发展实践。

推理

参数如下:

  • --gpt_model:gpt模型的路径,后缀为.ckpt
  • --sovits_model:sovits模型的路径,后缀为.pth
  • --ref_audio:参考音频路径,5到10秒以内
  • --ref_text:参考音频对应的文字
  • --ref_language:参考音频的语言,可选 “中文”, “英文”, “日文”
  • --target_text:需要转成音频的 txt 文件路径
  • --target_language:需要转成音频的语言,可选 “中文”, “英文”, “日文”, “中英混合”, “日英混合”, “多语种混合”
  • --output_path:输出文件的文件夹路径
python GPT_SoVITS/inference_cli.py \
	--gpt_model /home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/pretrained_models/s1bert25hz-2kh-longer-epoch=68e-step=50232.ckpt \
	--sovits_model /home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/pretrained_models/s2G488k.pth \
	--ref_audio /home/asus/Lang/graphrag/tts/GPT-SoVITS/output/slicer/demo2.wav_0000145600_0000255360.wav \
	--ref_text /home/asus/Lang/graphrag/tts/GPT-SoVITS/output/ref_text.txt \
	--ref_language "中文" \
	--target_text /home/asus/Lang/graphrag/tts/GPT-SoVITS/output/target_text.txt \
	--target_language "中英混合" \
	--output_path /home/asus/Lang/graphrag/tts/GPT-SoVITS/output/result

api调用

api.py 里已经写了很详细的参数和调用方法,需要对照 config.py 修改一下模型参数,这里只记录一下调用api时需要的部分参数:

  • -dr 是参考音频,5到10秒内
  • -dt 是参考音频对应的文字
  • -dl 是默认参考音频语种,可选 “中文”,“英文”,“日文”,“zh”,“en”,“ja”
  • -fp 是全精度,-hp 是半精度,二选一
  • -sm 是流式,不写就是非流式
  • -mt 返回的音频编码格式,流式默认ogg,非流式默认wav,可选 “wav”, “ogg”, “aac”
  • -cp 文本切分符号设定,默认为空,以",.,。"字符串的方式传入
python api.py \
	-dr "/home/asus/Lang/graphrag/tts/GPT-SoVITS/output/slicer/demo2.wav_0000145600_0000255360.wav" \
	-dt "以推动更为全面和深入的可持续发展实践。" \
	-dl "zh"

python通过api发送请求的代码:

import requests

def get_wav(text, file_name):
    url = "http://127.0.0.1:9880"
    data = {
        "text": text,
        "text_language": "zh",
        "cut_punc": ",。"
    }

    response = requests.post(url, json=data)

    if response.status_code == 200:
        with open(file_name, 'wb') as f:
            f.write(response.content)
        print("音频已成功保存为" + file_name)
    elif response.status_code == 400:
        error_info = response.json()
        print("请求失败:", error_info)
    else:
        print(f"请求返回了意外的状态码: {response.status_code}")
        
        
text = "LLM的预训练通过在不同领域的数据混合进行,以确保在各种下游任务上的性能。本工作表明,在固定计算预算下,最佳数据组合取决于训练数据的规模,建议常见的通过小规模实验确定最佳组合的做法在扩大到最终模型时不会产生最佳数据混合。为解决这一挑战,我们提出了AutoScale,这是一个自动工具,可在任意目标规模下找到适合训练的计算最优数据组合。AutoScale首先利用一种新颖的双层优化框架DDO,在小规模上确定最佳组合,然后拟合一个预测器来估算更大规模上的最佳组合。预测器的设计受到我们对数据组合相关缩放定律的理论分析启发,这可能具有独立的兴趣。在对红睡衣数据集上预训练774M Decoder-only LMs(GPT-2 Large)的实证研究中,AutoScale 比任何基线快至少25%的验证困惑减少,与没有重新加权相比,加速高达38%,在各下游任务中表现最佳。对使用掩码语言建模的Encoder-only LMs(BERT)进行预训练,DDO在所有领域上降低损失,同时在GLUE基准测试中平均任务性能提高8.7%,在大规模QA数据集(SQuAD)上提高5.9%,与没有重新加权相比,AutoScale训练速度提高了28%。我们的代码是开源的。"
get_wav(text, "output.wav")

只用5秒音频,直接用他提供的模型,生成的效果也很好,偶尔会在一小句话里中英文都有、并且都很长的情况下,会出现英文吞词,比如这句:

在对红睡衣数据集上预训练774M Decoder-only LMs(GPT-2 Large)的实证研究中

报错

发现当文字中出现“-”符号时有时候报错有时候不报错,链接已经修复了这个报错,可能要重新装一遍,不想再装一遍的话就直接把文字里的“-”改成空格好了……

报错信息:

ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 265, in __call__
    await wrap(partial(self.listen_for_disconnect, receive))
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 261, in wrap
    await func()
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 238, in listen_for_disconnect
    message = await receive()
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 553, in receive
    await self.message_event.wait()
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/asyncio/locks.py", line 226, in wait
    await fut
asyncio.exceptions.CancelledError: Cancelled by cancel scope 733e8eee0e50

During handling of the above exception, another exception occurred:

  + Exception Group Traceback (most recent call last):
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py",line 399, in run_asgi
  |     result = await app(  # type: ignore[func-returns-value]
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line70, in __call__
  |     return await self.app(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/fastapi/applications.py", line 1054, in __call__
  |     await super().__call__(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/applications.py", line 123, in __call__
  |     await self.middleware_stack(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/middleware/errors.py", line 186,in __call__
  |     raise exc
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/middleware/errors.py", line 164,in __call__
  |     await self.app(scope, receive, _send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 65, in __call__
  |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/_exception_handler.py", line 64,in wrapped_app
  |     raise exc
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53,in wrapped_app
  |     await app(scope, receive, sender)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 756, in __call__
  |     await self.middleware_stack(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 776, in app
  |     await route.handle(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 297, in handle
  |     await self.app(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 77, in app
  |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/_exception_handler.py", line 64,in wrapped_app
  |     raise exc
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53,in wrapped_app
  |     await app(scope, receive, sender)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 75, in app
  |     await response(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 265, in __call__
  |     await wrap(partial(self.listen_for_disconnect, receive))
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 680, in__aexit__
  |     raise BaseExceptionGroup(
  | exceptiongroup.ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 261, in wrap
    |     await func()
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 250, in stream_response
    |     async for chunk in self.body_iterator:
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/concurrency.py", line 65, in iterate_in_threadpool
    |     yield await anyio.to_thread.run_sync(_next, as_iterator)
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/anyio/to_thread.py", line 56, in run_sync
    |     return await get_async_backend().run_sync_in_worker_thread(
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 2177,in run_sync_in_worker_thread
    |     return await future
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 859, in run
    |     result = context.run(func, *args)
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/concurrency.py", line 54, in _next
    |     return next(iterator)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/api.py", line 503, in get_tts_wav
    |     phones2, bert2, norm_text2 = get_phones_and_bert(text, text_language)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/api.py", line 319, in get_phones_and_bert
    |     phones, word2ph, norm_text = clean_text_inf(textlist[i], lang)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/api.py", line 255, in clean_text_inf
    |     phones, word2ph, norm_text = clean_text(text, language)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/text/cleaner.py", line 26, in clean_text
    |     phones = language_module.g2p(norm_text)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/text/english.py", line 363, in g2p
    |     phone_list = _g2p(text)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/text/english.py", line 301, in __call__
    |     pron = self.qryword(o_word)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/text/english.py", line 328, in qryword
    |     phones.extend(self.cmu[w][0])
    | KeyError: '-'
    +------------------------------------ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 265, in __call__
    await wrap(partial(self.listen_for_disconnect, receive))
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 261, in wrap
    await func()
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 238, in listen_for_disconnect
    message = await receive()
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py", line 553, in receive
    await self.message_event.wait()
  File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/asyncio/locks.py", line 226, in wait
    await fut
asyncio.exceptions.CancelledError: Cancelled by cancel scope 733e8eee0e50

During handling of the above exception, another exception occurred:

  + Exception Group Traceback (most recent call last):
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/uvicorn/protocols/http/httptools_impl.py",line 399, in run_asgi
  |     result = await app(  # type: ignore[func-returns-value]
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/uvicorn/middleware/proxy_headers.py", line70, in __call__
  |     return await self.app(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/fastapi/applications.py", line 1054, in __call__
  |     await super().__call__(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/applications.py", line 123, in __call__
  |     await self.middleware_stack(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/middleware/errors.py", line 186,in __call__
  |     raise exc
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/middleware/errors.py", line 164,in __call__
  |     await self.app(scope, receive, _send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/middleware/exceptions.py", line 65, in __call__
  |     await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/_exception_handler.py", line 64,in wrapped_app
  |     raise exc
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53,in wrapped_app
  |     await app(scope, receive, sender)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 756, in __call__
  |     await self.middleware_stack(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 776, in app
  |     await route.handle(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 297, in handle
  |     await self.app(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 77, in app
  |     await wrap_app_handling_exceptions(app, request)(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/_exception_handler.py", line 64,in wrapped_app
  |     raise exc
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/_exception_handler.py", line 53,in wrapped_app
  |     await app(scope, receive, sender)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/routing.py", line 75, in app
  |     await response(scope, receive, send)
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 265, in __call__
  |     await wrap(partial(self.listen_for_disconnect, receive))
  |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 680, in__aexit__
  |     raise BaseExceptionGroup(
  | exceptiongroup.ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
  +-+---------------- 1 ----------------
    | Traceback (most recent call last):
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 261, in wrap
    |     await func()
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/responses.py", line 250, in stream_response
    |     async for chunk in self.body_iterator:
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/concurrency.py", line 65, in iterate_in_threadpool
    |     yield await anyio.to_thread.run_sync(_next, as_iterator)
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/anyio/to_thread.py", line 56, in run_sync
    |     return await get_async_backend().run_sync_in_worker_thread(
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 2177,in run_sync_in_worker_thread
    |     return await future
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/anyio/_backends/_asyncio.py", line 859, in run
    |     result = context.run(func, *args)
    |   File "/home/asus/Downloads/yes/envs/gptsovits/lib/python3.9/site-packages/starlette/concurrency.py", line 54, in _next
    |     return next(iterator)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/api.py", line 503, in get_tts_wav
    |     phones2, bert2, norm_text2 = get_phones_and_bert(text, text_language)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/api.py", line 319, in get_phones_and_bert
    |     phones, word2ph, norm_text = clean_text_inf(textlist[i], lang)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/api.py", line 255, in clean_text_inf
    |     phones, word2ph, norm_text = clean_text(text, language)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/text/cleaner.py", line 26, in clean_text
    |     phones = language_module.g2p(norm_text)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/text/english.py", line 363, in g2p
    |     phone_list = _g2p(text)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/text/english.py", line 301, in __call__
    |     pron = self.qryword(o_word)
    |   File "/home/asus/Lang/graphrag/tts/GPT-SoVITS/GPT_SoVITS/text/english.py", line 328, in qryword
    |     phones.extend(self.cmu[w][0])
    | KeyError: '-'
    +------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值