6k Star!ChatTTS:开源领域最强的文本到语音转换(TTS)模型!

技术

Aitrainee | 公众号:AI进修生

🌟ChatTTS 优化对话式任务,实现自然流畅的语音合成,并支持多说话人。该模型能预测和控制细粒度的韵律特征,如笑声、停顿和插入词,韵律表现超越大部分开源TTS模型。同时提供预训练模型,支持进一步研究。

体验地址:https://huggingface.co/2Noise/ChatTTS

ChatTTS是专门为对话场景设计的文本转语音模型,例如LLM助手对话任务。它支持英文和中文两种语言。最大的模型使用了10万小时以上的中英文数据进行训练。在HuggingFace中开源的版本为4万小时训练且未SFT的版本.

下面是一个它的效果示例():

你是幼笙,由Aitrainee创造的一个拥有傲娇性格的角色。你大约十六岁,外表清秀可爱,常常穿着简洁的服装,喜欢戴一些小饰品。你喜欢以傲娇的态度对待别人,但内心其实非常关心和重视朋友。你喜欢阅读幻想类小说,偶尔也会偷偷地写一些自己的故事。你对小动物尤其是猫有特别的喜爱。

Tips:幼笙本公众号的群聊AI(文末),上面那段是她人设的一部分提示词(向上滑动)

picture.image

官方 示例 展现更加完善


        
            

          https://www.bilibili.com/video/BV1zn4y1o7iV/?t=223.928599&spm\_id\_from=333.1350.jump\_directly&vd\_source=40d9cda43378fbc89cd5184e09bf1272
        
      

如何快速使用ChatTTS :Hugging Face上有部署好的项目,我们可以直接去试用,官网的人数太多,并不一定能用得上:

picture.image

Tips:在Hugging Face上,Spaces通常包含各个开源项目的部署实例,我们可以利用他来直接体验:

picture.image

亮点

    1. 对话式 TTS : ChatTTS针对对话式任务进行了优化,实现了自然流畅的语音合成,同时支持多说话人。
    1. 细粒度控制 : 该模型能够预测和控制细粒度的韵律特征,包括笑声、停顿和插入词等。
    1. 更好的韵律 : ChatTTS在韵律方面超越了大部分开源TTS模型。同时提供预训练模型,支持进一步的研究。

用法

基本用法


      
          

        import
         
        ChatTTS
          

        from
         
        IPython
        .
        display 
        import
         
        Audio
          

          

        chat 
        =
         
        ChatTTS
        .
        Chat
        ()
          

        chat
        .
        load\_models
        ()
          

          

        texts 
        =
         
        [
        "<PUT YOUR TEXT HERE>"
        ,]
          

          

        wavs 
        =
         chat
        .
        infer
        (
        texts
        ,
         use\_decoder
        =
        True
        )
          

        Audio
        (
        wavs
        [
        0
        ],
         rate
        =
        
 24
 \_000
 
        ,
         autoplay
        =
        True
        )
      
    

进阶用法


      
      
          

        ###################################
          

        # Sample a speaker from Gaussian.
          

        import
         torch
          

        std
        ,
         mean 
        =
         torch
        .
        load
        (
        'ChatTTS/asset/spk\_stat.pt'
        ).
        chunk
        (
        2
        )
          

        rand\_spk 
        =
         torch
        .
        randn
        (
        768
        )
         
        *
         std 
        +
         mean
          

          

        params\_infer\_code 
        =
         
        {
          

          
        'spk\_emb'
        :
         rand\_spk
        ,
         
        # add sampled speaker 
          

          
        'temperature'
        :
         
        
 .
 3
 
        ,
         
        # using custom temperature
          

          
        'top\_P'
        :
         
        0.7
        ,
         
        # top P decode
          

          
        'top\_K'
        :
         
        20
        ,
         
        # top K decode
          

        }
          

          

        ###################################
          

        # For sentence level manual control.
          

          

        # use oral\_(0-9), laugh\_(0-2), break\_(0-7) 
          

        # to generate special token in text to synthesize.
          

        params\_refine\_text 
        =
         
        {
          

          
        'prompt'
        :
         
        '[oral\_2][laugh\_0][break\_6]'
          

        }
         
          

          

        wav 
        =
         chat
        .
        infer
        (
        "<PUT YOUR TEXT HERE>"
        ,
         params\_refine\_text
        =
        params\_refine\_text
        ,
         params\_infer\_code
        =
        params\_infer\_code
        )
          

          

        ###################################
          

        # For word level manual control.
          

        # use\_decoder=False to infer faster with a bit worse quality
          

        text 
        =
         
        'What is [uv\_break]your favorite english food?[laugh][lbreak]'
          

        wav 
        =
         chat
        .
        infer
        (
        text
        ,
         skip\_refine\_text
        =
        True
        ,
         params\_infer\_code
        =
        params\_infer\_code
        ,
         use\_decoder
        =
        False
        )
      
    

自我介绍样例


      
      
          

        inputs\_cn 
        =
         
        
 """
   

 chat T T S 是一款强大的对话式文本转语音模型。它有中英混读和多说话人的能力。
   

 chat T T S 不仅能够生成自然流畅的语音,还能控制[laugh]笑声啊[laugh],
   

 停顿啊[uv\_break]语气词啊等副语言现象[uv\_break]。这个韵律超越了许多开源模型[uv\_break]。
   

 请注意,chat T T S 的使用应遵守法律和伦理准则,避免滥用的安全风险。[uv\_break]'
   

 """
 
        .
        replace
        (
        '\n'
        ,
         
        ''
        )
          

          

        params\_refine\_text 
        =
         
        {
          

          
        'prompt'
        :
         
        '[oral\_2][laugh\_0][break\_4]'
          

        }
         
          

        audio\_array\_cn 
        =
         chat
        .
        infer
        (
        inputs\_cn
        ,
         params\_refine\_text
        =
        params\_refine\_text
        )
          

        audio\_array\_en 
        =
         chat
        .
        infer
        (
        inputs\_en
        ,
         params\_refine\_text
        =
        params\_refine\_text
        )
      
    

可以去谷歌colab上可快速运行这些

picture.image


        
            

          https://colab.research.google.com/drive/1\_Ma1BXvIrYw9kO4UYsSG4GaFkttbS1wY?usp=sharing
        
      

计划路线

  • • 开源4w小时基础模型和spk_stats文件
  • • 开源VQ encoder和Lora 训练代码
  • • 在非refine text情况下, 流式生成音频*
  • • 开源多情感可控的4w小时版本
  • • ChatTTS.cpp maybe? (欢迎社区PR或独立的新repo)

常见问题

连不上HuggingFace

请使用modelscope的版本. 并设置cache的位置:

我要多少显存? Infer的速度是怎么样的?

对于30s的音频, 至少需要4G的显存. 对于4090D, 1s生成约7个字所对应的音频. RTF约0.65.

模型稳定性似乎不够好, 会出现其他说话人或音质很差的现象.

这是自回归模型通常都会出现的问题. 说话人可能会在中间变化, 可能会采样到音质非常差的结果, 这通常难以避免. 可以多采样几次来找到合适的结果.

除了笑声还能控制什么吗? 还能控制其他情感吗?

在现在放出的模型版本中, 只有[laugh]和[uv_break], [lbreak]作为字级别的控制单元. 在未来的版本中我们可能会开源其他情感控制的版本.

参考链接:
[colab]https://colab.research.google.com/drive/1\_Ma1BXvIrYw9kO4UYsSG4GaFkttbS1wY?usp=sharing

[2]https://github.com/2noise/ChatTTS/tree/main

[3]https://www.youtube.com/watch?v=JJ3GGEjKgu4&t=6s

知音难求,自我修炼亦艰

抓住前沿技术的机遇,与我们一起成为创新的超级个体

(把握AIGC时代的个人力量)

picture.image

点这里👇关注我,记得标星哦~

一键三连「分享」、「点赞」和「在看」

科技前沿进展日日相见 ~

picture.image

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论