安装MeloTTS报错解决方法

0. 研究背景

在国内环境中安装MeloTTS往往会报错,因为有些资料需要从国外网站中下载。

1. huggingface无法访问问题

首先需要解决国内无法访问huggingface的问题,可以配置使用国内镜像来解决。

export HF_ENDPOINT=https://hf-mirror.com

2. nltk无法下载问题

参考文档

3. unidic无法下载问题

在执行python -m unidic download 时会报错,由于网络原因。

download url: https://cotonoha-dic.s3-ap-northeast-1.amazonaws.com/unidic-3.1.0.zip
Dictionary version: 3.1.0+2021-08-31
Downloading UniDic v3.1.0+2021-08-31...
unidic-3.1.0.zip: 0.00B [00:00, ?B/s]
Traceback (most recent call last):
  File "/root/miniconda3/envs/tts/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/root/miniconda3/envs/tts/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/root/miniconda3/envs/tts/lib/python3.9/site-packages/unidic/__main__.py", line 17, in <module>
    plac.call(commands[command], sys.argv[1:])
  File "/root/miniconda3/envs/tts/lib/python3.9/site-packages/plac_core.py", line 436, in call
    cmd, result = parser.consume(arglist)
  File "/root/miniconda3/envs/tts/lib/python3.9/site-packages/plac_core.py", line 287, in consume
    return cmd, self.func(*(args + varargs + extraopts), **kwargs)
  File "/root/miniconda3/envs/tts/lib/python3.9/site-packages/unidic/download.py", line 104, in download_version
    download_and_clean(dictinfo['version'], dictinfo['url'])
  File "/root/miniconda3/envs/tts/lib/python3.9/site-packages/unidic/download.py", line 62, in download_and_clean
    download_progress(url, fname)
  File "/root/miniconda3/envs/tts/lib/python3.9/site-packages/unidic/download.py", line 38, in download_progress
    urlretrieve(url, filename=fname, reporthook=t.update_to, data=None)
  File "/root/miniconda3/envs/tts/lib/python3.9/urllib/request.py", line 239, in urlretrieve
    with contextlib.closing(urlopen(url, data)) as fp:
  File "/root/miniconda3/envs/tts/lib/python3.9/urllib/request.py", line 214, in urlopen
    return opener.open(url, data, timeout)
  File "/root/miniconda3/envs/tts/lib/python3.9/urllib/request.py", line 523, in open
    response = meth(req, response)
  File "/root/miniconda3/envs/tts/lib/python3.9/urllib/request.py", line 632, in http_response
    response = self.parent.error(
  File "/root/miniconda3/envs/tts/lib/python3.9/urllib/request.py", line 561, in error
    return self._call_chain(*args)
  File "/root/miniconda3/envs/tts/lib/python3.9/urllib/request.py", line 494, in _call_chain
    result = func(*args)
  File "/root/miniconda3/envs/tts/lib/python3.9/urllib/request.py", line 641, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 503: Service Unavailable

解决方式:

1. 从 https://cotonoha-dic.s3-ap-northeast-1.amazonaws.com/unidic-3.1.0.zip 中下载
2. 把下载后的文件上传到服务器中的 /root/miniconda3/envs/tts/lib/python3.9/site-packages/unidic,并把 unidic-3.1.0.zip 重命名为 unidic.zip
3. 修改 download.py,找到 93 行,也就是在 download_version() 函数中,注释掉除了 download_and_clean() 之外的内容
4. 修改 download_and_clean() 中的参数,你可以随意设置
5. 修改 download.py 中的 62 行,注释 download_process()
6. 执行 python -m unidic download

参考文件

给这个压缩包赋值执行权限

chmod +x unidic.zip

4. 下载模型

melo/download_utils.py中可以找到对应的下载地址

DOWNLOAD_CKPT_URLS = {
    'EN': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/EN/checkpoint.pth',
    'EN_V2': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/EN_V2/checkpoint.pth',
    'FR': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/FR/checkpoint.pth',
    'JP': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/JP/checkpoint.pth',
    'ES': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/ES/checkpoint.pth',
    'ZH': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/ZH/checkpoint.pth',
    'KR': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/KR/checkpoint.pth',
}

DOWNLOAD_CONFIG_URLS = {
    'EN': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/EN/config.json',
    'EN_V2': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/EN_V2/config.json',
    'FR': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/FR/config.json',
    'JP': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/JP/config.json',
    'ES': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/ES/config.json',
    'ZH': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/ZH/config.json',
    'KR': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/KR/config.json',
}

PRETRAINED_MODELS = {
    'G.pth': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/pretrained/G.pth',
    'D.pth': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/pretrained/D.pth',
    'DUR.pth': 'https://myshell-public-repo-host.s3.amazonaws.com/openvoice/basespeakers/pretrained/DUR.pth',
}

LANG_TO_HF_REPO_ID = {
    'EN': 'myshell-ai/MeloTTS-English',
    'EN_V2': 'myshell-ai/MeloTTS-English-v2',
    'EN_NEWEST': 'myshell-ai/MeloTTS-English-v3',
    'FR': 'myshell-ai/MeloTTS-French',
    'JP': 'myshell-ai/MeloTTS-Japanese',
    'ES': 'myshell-ai/MeloTTS-Spanish',
    'ZH': 'myshell-ai/MeloTTS-Chinese',
    'KR': 'myshell-ai/MeloTTS-Korean',
}

5. 阻止联网下载文件

默认会从网上下载模型和配置文件,需要修改melo/download_utils.py源码,阻止联网下载文件。

def load_or_download_config(locale, use_hf=True, config_path=None):
    if config_path is None:
        language = locale.split('-')[0].upper()
        if use_hf:
            assert language in LANG_TO_HF_REPO_ID
            config_path = hf_hub_download(repo_id=LANG_TO_HF_REPO_ID[language], filename="config.json")
        #else:
        #    assert language in DOWNLOAD_CONFIG_URLS
        #    config_path = cached_path(DOWNLOAD_CONFIG_URLS[language])
    return utils.get_hparams_from_file(config_path)

def load_or_download_model(locale, device, use_hf=True, ckpt_path=None):
    if ckpt_path is None:
        language = locale.split('-')[0].upper()
        if use_hf:
            assert language in LANG_TO_HF_REPO_ID
            ckpt_path = hf_hub_download(repo_id=LANG_TO_HF_REPO_ID[language], filename="checkpoint.pth")
        #else:
        #    assert language in DOWNLOAD_CKPT_URLS
        #    ckpt_path = cached_path(DOWNLOAD_CKPT_URLS[language])
    return torch.load(ckpt_path, map_location=device)

修改app.py

'EN': TTS(language='EN', device=device, use_hf=False, config_path='/root/autodl-tmp/tts/model/English/config.json', ckpt_path='/root/autodl-tmp/tts/model/English/checkpoint.pth')

6. 解决AttributeError: module ‘botocore.exceptions’ has no attribute 'HTTPClientError’报错问题

botocore>=1.34.98
cached_path>=1.6.2
boto3>=1.35.81

参考文档

7. 解决nltk_data报错问题

报错信息:

  Resource averaged_perceptron_tagger_eng not found.
  Please use the NLTK Downloader to obtain the resource:

  >>> import nltk
  >>> nltk.download('averaged_perceptron_tagger_eng')
  
  For more information see: https://www.nltk.org/data.html

  Attempted to load taggers/averaged_perceptron_tagger_eng/

  Searched in:
    - '/root/nltk_data'
    - '/root/miniconda3/envs/tts/nltk_data'
    - '/root/miniconda3/envs/tts/share/nltk_data'
    - '/root/miniconda3/envs/tts/lib/nltk_data'
    - '/usr/share/nltk_data'
    - '/usr/local/share/nltk_data'
    - '/usr/lib/nltk_data'
    - '/usr/local/lib/nltk_data'

解决方法:

git clone https://github.com/nltk/nltk_data.git

找到nltk_data/packages/taggers/averaged_perceptron_tagger_eng.zip复制到/root/nltk_data/taggers解压。

8. 报错cmudict解决方法

将上面下载的nltk_data解压出来的cmudict目录放置到/root/nltk_data路径下。

### MeloTTS.cpp 源代码功能及用途 MeloTTS.cpp 是一个轻量级的纯 C++ 文本转语音(Text-to-Speech,TTS)库,由 MyShell.ai 开发并发布。该项目基于 MeloTTS 项目,旨在提供一个高效、跨平台的语音合成解决方案。[^1] #### 核心功能 1. **多语言支持**: - MeloTTS.cpp 支持多种语言的语音合成,包括英语和中文(混合英语)。未来计划支持更多语言,如日语等。[^1] 2. **高性能与轻量化**: - 作为一个纯 C++ 库,MeloTTS.cpp 具有很高的性能表现,同时保持了较小的体积,适合在资源受限的环境中运行。 3. **跨平台兼容性**: - 由于使用 C++ 编写,MeloTTS.cpp 可以在多种操作系统上运行,包括 Windows、Linux 和 macOS。 4. **灵活的 API 设计**: - 提供了丰富的 API 接口,开发者可以根据需求自定义语音合成过程,例如调整语速、音调、音量等参数。 5. **高质量的语音输出**: - MeloTTS.cpp 采用了先进的语音合成技术,能够生成自然流畅的语音,适用于各种语音助手、导航系统、语音播报等应用场景。 #### 主要用途 1. **语音助手**: - MeloTTS.cpp 可以用于开发智能语音助手,为用户提供语音交互功能,如语音导航、语音搜索、语音控制等。 2. **无障碍应用**: - 在视障人士辅助工具中,MeloTTS.cpp 可以将文本信息转换为语音,帮助用户更好地获取信息。 3. **教育与培训**: - 在在线教育和语言学习平台中,MeloTTS.cpp 可以用于生成语音教材,帮助学生提高听力和口语能力。 4. **智能家居与物联网**: - MeloTTS.cpp 可以集成到智能家居设备中,实现语音播报功能,如天气预报、新闻播报、闹钟提醒等。 5. **游戏与娱乐**: - 在游戏中,MeloTTS.cpp 可以用于生成角色对话、剧情旁白等,增强玩家的沉浸感。 #### 开发与部署 1. **源代码获取**: - MeloTTS.cpp 的源代码通常托管在 GitHub 上,开发者可以通过克隆仓库来获取最新的代码版本。例如: ```bash git clone https://github.com/MyShell-Inc/MeloTTS.cpp.git ``` 2. **编译与构建**: - MeloTTS.cpp 使用 CMake 进行项目管理,开发者可以使用 CMake 工具生成相应的构建文件,并在不同平台上进行编译。例如,在 Linux 或 macOS 上,可以使用以下命令进行编译: ```bash mkdir build cd build cmake .. make ``` 3. **示例代码**: - MeloTTS.cpp 提供了一些简单的示例代码,帮助开发者快速上手。以下是一个基本的语音合成示例: ```cpp #include "melo_tts.h" int main() { // 初始化 MeloTTS 模型 MeloTTS* tts = melo_tts_init("path/to/model"); // 设置语音参数 melo_tts_set_speaker(tts, "female_01"); melo_tts_set_speed(tts, 1.0f); melo_tts_set_pitch(tts, 1.0f); melo_tts_set_volume(tts, 1.0f); // 合成语音 const char* text = "Hello, this is a test of MeloTTS.cpp."; float* audio_data; int audio_length; melo_tts_synthesize(tts, text, &audio_data, &audio_length); // 保存或播放音频 // 这里可以调用音频播放库或保存为 WAV 文件 // ... // 释放资源 melo_tts_free(tts); return 0; } ``` 4. **模型训练与优化**: - 开发者可以根据自己的需求对 MeloTTS.cpp 进行模型训练和优化,以适应特定的应用场景。例如,可以训练自定义的语音模型,使其具有独特的音色或风格。 #### 社区与支持 1. **文档与教程**: - MeloTTS.cpp 的官方文档提供了详细的 API 说明和使用指南,帮助开发者快速掌握库的使用方法。 2. **开源社区**: - MeloTTS.cpp 是一个开源项目,开发者可以在 GitHub 上参与项目的开发与维护,提交 bug 报告、功能请求或贡献代码。 3. **论坛与讨论组**: - 开发者可以通过官方论坛或讨论组与其他用户交流经验,解决问题。 #### 总结 MeloTTS.cpp 是一个功能强大且易于使用的文本转语音库,适用于多种应用场景。无论是语音助手、无障碍应用,还是教育、智能家居等领域,MeloTTS.cpp 都能够提供高质量的语音合成服务。[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值