又一款超逼真TTS模型发布,还支持带情感的语音克隆!

2025-03-17 08:32:32 6点赞 38收藏 0评论

最近,TTS 模型领域也真的是要过年了!陆续有各种新型的效果逼真的 TTS 模型发布!

就比如上周爆火的 TTS 排行榜No.1:Kokoro TTS

图片图片

而今天再为大家分享一款新型的TTS 模型:Llasa TTS,该模型在近两天非常的热门。

不仅支持中英文的文本转语音功能,还支持语音克隆,只需15S的声音素材即可完美复刻,还能克隆目标语音的情感特色。

项目简介

Llasa TTS 是香港科技大学开发的一款基于 LLaMA 微调的 文本到语音(TTS)模型,支持中英双语生成。

图片图片

模型训练使用了 250,000 小时的中英双语语音数据,与传统的 TTS 模型相比,Llasa 在语音自然性、情感表达以及风格匹配上都有显著提升。

不仅能从纯文本生成语音,还支持通过语音样例提示生成具有类似风格和情感的语音,表现力极其出色。

无论是为语音助手生成自然对话,还是用于配音和个性化语音场景,Llasa 都是一个非常出色的选择。

功能亮点

1、纯文本到语音

输入一段文字,即可生成自然流畅的语音,适合多场景应用,比如智能客服、有声读物、播客配音等。

2、语音风格克隆

通过提供 15 秒的语音样本,Llasa 能生成与提示语音风格一致的目标语音:

  • • 模仿语调、语速和语音特征。

  • • 实现情感语音(如快乐、悲伤、愤怒、耳语)生成。

3、双语支持

同时支持中文和英文,适用于多语言场景,尤其是需要中英混合生成的场合。

4、多模型支持

提供 1B 和 3B 参数规模模型,未来还将推出 8B 模型:

  • • 1B 模型:更快、更轻量化,适合资源受限设备。

  • • 3B 模型:更高质量,更细腻的语音表达。

5、开放权重

所有模型均提供开放权重,开发者可直接使用或二次微调,支持 Transformers 和 vLLM 框架。

使用方式

1、在线体验

HuggingFace 有现成的 Llasa-3B 的在线TTS项目,可快速体验 Llasa 的语音生成效果。

图片图片

2、模型下载

可以在 HuggingFace 下载模型权重:

3、模型代码调用示例

下载模型权重并通过 transformers 或 vLLM 加载:

from transformers import AutoTokenizer, AutoModelForCausalLM import torch import soundfile as sf llasa_3b ='HKUST-Audio/Llasa-3B' tokenizer = AutoTokenizer.from_pretrained(llasa_3b) model = AutoModelForCausalLM.from_pretrained(llasa_3b) model.eval() model.to('cuda') from xcodec2.modeling_xcodec2 import XCodec2Model model_path = "HKUST-Audio/xcodec2" Codec_model = XCodec2Model.from_pretrained(model_path) Codec_model.eval().cuda() input_text = 'Dealing with family secrets is never easy. Yet, sometimes, omission is a form of protection, intending to safeguard some from the harsh truths. One day, I hope you understand the reasons behind my actions. Until then, Anna, please, bear with me.' # input_text = '突然,身边一阵笑声。我看着他们,意气风发地挺直了胸膛,甩了甩那稍显肉感的双臂,轻笑道:"我身上的肉,是为了掩饰我爆棚的魅力,否则,岂不吓坏了你们呢?"' def ids_to_speech_tokens(speech_ids): speech_tokens_str = [] for speech_id in speech_ids: speech_tokens_str.append(f"<|s_{speech_id}|>") return speech_tokens_str def extract_speech_ids(speech_tokens_str): speech_ids = [] for token_str in speech_tokens_str: if token_str.startswith('<|s_') and token_str.endswith('|>'): num_str = token_str[4:-2] num = int(num_str) speech_ids.append(num) else: print(f"Unexpected token: {token_str}") return speech_ids #TTS start! with torch.no_grad(): formatted_text = f"<|TEXT_UNDERSTANDING_START|>{input_text}<|TEXT_UNDERSTANDING_END|>" # Tokenize the text chat = [ {"role": "user", "content": "Convert the text to speech:" + formatted_text}, {"role": "assistant", "content": "<|SPEECH_GENERATION_START|>"} ] input_ids = tokenizer.apply_chat_template( chat, tokenize=True, return_tensors='pt', continue_final_message=True ) input_ids = input_ids.to('cuda') speech_end_id = tokenizer.convert_tokens_to_ids('<|SPEECH_GENERATION_END|>') # Generate the speech autoregressively outputs = model.generate( input_ids, max_length=2048, # We trained our model with a max length of 2048 eos_token_id= speech_end_id , do_sample=True, top_p=1, # Adjusts the diversity of generated content temperature=0.8, # Controls randomness in output ) # Extract the speech tokens generated_ids = outputs[0][input_ids.shape[1]:-1] speech_tokens = tokenizer.batch_decode(generated_ids, skip_special_tokens=True) # Convert token <|s_23456|> to int 23456 speech_tokens = extract_speech_ids(speech_tokens) speech_tokens = torch.tensor(speech_tokens).cuda().unsqueeze(0).unsqueeze(0) # Decode the speech tokens to speech waveform gen_wav = Codec_model.decode_code(speech_tokens) sf.write("gen.wav", gen_wav[0, 0, :].cpu().numpy(), 16000)

写在最后

Llasa 的推出为文本到语音的生成提供了一种更自然、更灵活的解决方案。

其支持多语言、多情感生成,以及示例语音风格克隆等功能,以及未来 8B 模型的发布及更多功能的扩展,Llasa 有潜力成为多语言、多场景语音生成的行业新标杆。

如果你正在寻找一款开源且高质量的 TTS 工具,Llasa 是一个不错的选择。不妨下载模型权重或在线体验,一起探索!

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
38
扫一下,分享更方便,购买更轻松