Skip to content

QChatGPT语音插件,可利用多个TTS平台实现语音聊天

Notifications You must be signed in to change notification settings

the-lazy-me/NewChatVoice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NewChatVoice插件使用教程

我没学过python,代码大量依赖于AI生成,难免有不合理不正确之处,反正代码和人有一个能跑就行😋

插件介绍

NewChatVoice,一个可以调用多个TTS服务平台的QChatGPT插件,用于将LLM返回的文本转为你喜欢的语音

当前支持以下TTS服务平台:

  1. TTS-Online原神免费文本转语音(在使用中,本插件称之为acgn_ttson
  2. GPT-SoVITS(在使用中本插件称之为gpt_sovits

TODO:

插件安装

配置完成 QChatGPT 主程序后使用管理员账号向机器人发送命令即可安装:

!plugin get https://github.com/the-lazy-me/NewChatVoice.git

插件配置

acgn_ttson的token获取

如果不使用在线语音则可跳过

打开此页面https://www.ttson.cn/

点击升级专业版

付款后,会给出一个链接(只展示一次,相当重要,记清楚,不然钱就白花了!!!

复制粘贴给出的网址

GPT-SoVITS推理整合包

如果不使用本地语音则可跳过

整合包来源:B站UP主:箱庭XTer制作的基于GPT-SoVITS开发的 推理特化的 前后端项目GPT-soVITS-Inference

推理整合包下载路径:参考原教程的整合包下载部分

下载,解压,打开0 一键启动脚本文件夹,然后双击打开里面的5 启动后端程序.bat

等待1分钟之内,可以看到如下提示就说明可以了

INFO:     Started server process [15276]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:5000 (Press CTRL+C to quit)

GPT-SoVITS推理整合包,仅限Windows

其他平台,参考原教程

配置文件

请注意,所有的配置文件和用户数据,默认都在QChatGPT目录下的data/plugins/NewChatVoice

打开data/plugins/NewChatVoice的config文件夹下的global_config.json,内容如下所示

{
  "provider": "acgn_ttson",
  "max_characters": 300,
  "voiceWithText": false,
  "temp_dir_path": "data/plugins/NewChatVoice/temp",
  "data_dir_path": "data/plugins/NewChatVoice/data",
  "acgn_ttson": {
    "character_id": 430,
    "token": "填入购买后给出的网址"
  },
  "gpt_sovits": {
    "url": "http://127.0.0.1:5000",
    "character_name": "Hutao",
    "emotion": "default",
    "batch_size": 1,
    "speed": 1.0,
    "save_temp": true
  }
}

默认情况下,你需要修改的只有

token,将填入购买后给出的网址这句话,替换为你上面购买后复制的链接

以下是参数解释

  • provider: 默认使用的TTS服务提供商,可以使用的是 acgn_ttsongpt_sovits
  • max_characters: 单个音频消息中最多包含的字符,超过即切分
  • voiceWithText: 设置回复语音消息时,是否连同文本一起回复
  • temp_dir_path: 临时文件存储路径。在合成过程中生成的语音文件将存储在这个目录中,每次运行主程序会清空
  • data_dir_path: 数据文件存储路径。生成的用户偏好配置将存储在这个目录中
  • acgn_ttson:
    • character_id: 指定要使用的角色ID。这里设置为430(派蒙)
    • token: 需要替换为你购买后提供的链接或令牌,用于身份验证
  • gpt_sovits:
    • url:默认本地服务器 http://127.0.0.1:5000
    • character_name: 角色文件夹名称,注意大小写、全半角、语言。默认设置为 Hutao
    • emotion: 角色情感,需为角色实际支持的情感,否则将调用默认情感。默认设置为 default
    • batch_size: 一次性几个batch,电脑牛逼一些可以开大点,会加速很多,整数,默认为1
    • speed: 语速,默认为1.0
    • save_temp: 是否保存临时文件,为true时,后端会保存生成的音频,下次相同请求会直接返回该数据,默认为true

插件指令

对话中,发送

  1. 为当前用户开启语音: !ncv 开启!ncv on

  2. 为当前用户关闭语音: !ncv 关闭!ncv off

  3. 查看当前用户语音合成状态: !ncv 状态!ncv status

  4. 查看当前TTS平台的角色列表: !ncv 角色列表!ncv list

  5. 切换TTS平台: !ncv 平台 <TTS平台名称>!ncv provider <TTS平台名称>

  6. 切换当前TTS平台的角色: !ncv 角色 <角色>!ncv character <角色>

  7. 查看NewChatVoice插件的帮助: !ncv 帮助!ncv help

acgn_ttson角色列表:

飞书云文档:https://s1c65jp249c.feishu.cn/sheets/WoiOsshwfhtUXRt2ZS0cVMCFnLc?from=from_copylink

腾讯文档:https://docs.qq.com/sheet/DSFhQT3dUZkpabHVu?tab=BB08J2

切换角色请使用id,例如切换角色为流萤(id为2075): !ncv 切换 2075

Q&A:

  • acgn_ttson是什么

    • 答:这里的acgn_ttson是指这个站点https://acgn.ttson.cn,一个在线生成二次元语音的,支持超多角色,生成速度快,生成效果好,使用成本低
  • gpt_sovits是什么

    • 这里的gpt_sovits是指GPT-SoVITS,这是花儿不哭大佬研发的低成本AI音色克隆软件。目前只有TTS(文字转语音)功能,将来会更新变声功能。(2024-08-08摘录自GPT-SoVITS指南
    • 特点:本地部署,自由度高,但是生成速度慢,使用成本高
  • 我应该选什么

    • 为更好的体验,建议使用acgn_ttson,为了更高自由度,选择gpt_sovits
  • 如何给gpt_sovits增加新的模型

  • 报错:ImportError:DLL load failed while importing _silkv3:找不到指定的模块

    • 这里下载最新版本的 C++ Redistributable
  • 报错:{"detail":"未注册的用户,请联系管理员"}

    • 没有填写acgn_ttson的token,如果不需要,则可以无视,这时建议把global_config.jsonprovider改为gpt_sovits,不然一直报这个
  • 报错:插件 NewChatVoice 触发事件 NormalMessageResponded 时发生错误: Cannot connect to host 127.0.0.1:5000 ssl:default [远程计算机拒绝网络连接。]

    • gpt_sovits没有开启,按教程开启上面整合包中的后端程序
  • 如何给GPT-SoVITS增加模型

    • 自己制作或在网上下载,例如:B站UP主白菜工厂1145号员工分享了很多
    • 有了模型后,导入到GPT-SoVITS整合包的trained文件夹中,而且要符合要求
    • 此外实测,模型文件夹内,必须要有infer_config.json文件,内容必须符合如下格式,特别是要有emotion_list
    {
        "gpt_path": "hutao-e75.ckpt",
        "sovits_path": "hutao_e60_s3360.pth",
        "software_version": "1.1",
        "简介": "这是一个配置文件适用于https://github.com/X-T-E-R/TTS-for-GPT-soVITS,是一个简单好用的前后端项目",
        "emotion_list": {
            "default": {
                "ref_wav_path": "我说白术,你不会看不出来吧?难不成你师父,忘了教你这门功夫?.wav",
                "prompt_text": "我说白术,你不会看不出来吧?难不成你师父,忘了教你这门功夫?",
                "prompt_language": "多语种混合"
            }
        }
    }

版本记录

更新摘要:

NewChatVoice 2.2

优化可能有的诸多问题

NewChatVoice 2.1

  • 群聊中自动切割长文本,以多个音频分别返回,私聊中单个音频直接返回(不得已而为之)
  • 优化自动切分逻辑
  • 修改外部调用接口
async def ncv_outside_interface(self, sender_id: str, text: str, split: bool) -> Voice:
    """
    供外部调用的文字转Voice的接口
    Args:
        sender_id (str): 会话ID
        text (str): 要转换的文本
        split (bool): 是否分割文本
    Returns:
        Voice: 生成的语音silk文件路径(如果split为True则以列表返回多个路径)
    """
    if split:
        audio_paths = await self.ncv.auto_split_generate_audio(sender_id, text)
        if audio_paths:
            return audio_paths
    else:
        audio_path = await self.ncv.no_split_generate_audio(sender_id, text)
        return audio_path

NewChatVoice 2.0

  • 新增对gpt_sovits的支持
  • 支持长文本自动切分,以多个音频消息发送
  • 修改所有配置文件为json格式
  • 修改外部调用接口
async def ncv_outsid_interface(self, sender_id: str, text: str) -> Voice:
    """
    供外部调用的文字转Voice的接口

    Args:
        sender_id (str): 会话ID
        text (str): 要转换的文本

    Returns:
        Voice: 生成的语音silk文件列表
    """

NewChatVoice 1.2

  • 修改配置文件位置,为了避免升级时被删除,过程文件及配置文件目录移至插件目录外:“QChatGPT\data\plugins\NewChatVoice\”。

NewChatVoice 1.1

  • 新增外部调用接口。

    • 外部调用将使用相同的插件配置文件,但无视voice_switch状态。

    • 接口函数:

      async def ncv_tts(self, user_id: str, text: str) -> Voice:
          """
          供外部调用的文字转Voice的接口
      
          Args:
              user_id (str): 会话ID
              text (str): 要转换的文本
      
          Returns:
              Voice: 生成的语音对象
          """
    • 调用示例:

      async def handle_voice_synthesis(self, launcher_id: int, text: str, ctx: EventContext):
          try:
              from plugins.NewChatVoice.main import VoicePlugin, VoiceSynthesisError
          except ImportError as e:
              self.ap.logger.error(f"Failed to import VoicePlugin: {e}")
              return False
      
          ncv = VoicePlugin(self.host)
          try:
              voice = await ncv.ncv_tts(launcher_id, text)
              await ctx.event.query.adapter.reply_message(ctx.event.query.message_event, MessageChain([voice]), False)
              return True
          except VoiceSynthesisError as e:
              self.ap.logger.error(f"{e}")
              return False
  • 优化配置文件逻辑。

    • 配置将分为通用配置“config.yaml”,以及会话配置“config_[会话].yaml”
    • 会话配置优先级高于通用配置

About

QChatGPT语音插件,可利用多个TTS平台实现语音聊天

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages