Kartoffel Orpheus 3B German Synthetic V0.1
基于Orpheus-3B的德语文本转语音(TTS)模型,支持多说话者和情感表达。
下载量 147
发布时间 : 4/5/2025
模型简介
这是一个德语文本转语音模型,支持合成音色的说话者,并额外提供情感和语气表达功能。
模型特点
多说话者支持
模型可以从预定义的说话者中选择不同身份生成语音。
情感表达
支持多种情感表达,如开心、悲伤、兴奋等。
语气表达
支持多种语气词,如haha、ughh、wow等。
模型能力
德语文本转语音
多说话者语音生成
情感化语音合成
语气词识别与生成
使用案例
语音合成
有声读物
生成带有情感的有声读物内容。
自然且富有情感的语音输出。
虚拟助手
为虚拟助手提供多说话者和情感化的语音响应。
提升用户体验,使交互更加自然。
🚀 卡托菲尔-3B(基于俄耳甫斯-3B) - 合成版
卡托菲尔-3B是一个基于俄耳甫斯-3B的德语文本转语音(TTS)模型家族,能够生成多种说话人身份和情感表达的语音,为德语语音合成提供了丰富的选择。
模型概述
这是一个基于俄耳甫斯-3B的德语文本转语音(TTS)模型家族,有两个主要版本:
- 卡托菲尔-3B-自然版:主要在自然人类语音录音上进行微调,旨在实现逼真的语音效果。数据集基于高质量的德语音频,包括许可的播客、讲座和其他开放教育资源(OER)数据,并通过Emilia风格的管道进行处理。
- 卡托菲尔-3B-合成版:使用合成语音数据进行微调,具有丰富的情感和不同的语气表达。数据集包含4个不同说话人的多种情感。
目前这个是合成版,适用于合成语音效果,同时支持添加情感和语气表达。
两个版本都支持:
- 多说话人:模型可以根据预定义的说话人身份生成不同的语音。
- 多样表达:能够根据输入文本生成具有不同情感基调和表达方式的语音。
合成版可用的说话人和表达
说话人
- 马丁
- 卢卡
- 安妮
- 艾玛
情感
为了添加情感,可以使用以下情感类型:
- 中性
- 高兴
- 悲伤
- 兴奋
- 惊讶
- 幽默
- 愤怒
- 平静
- 厌恶
- 恐惧
- 骄傲
- 浪漫
使用时,在说话人姓名后面加上情感类型,格式为[说话人姓名] - [情感类型]: [德语文本]
。例如,对于说话人马丁和悲伤情感,正确的模板是:
马丁 - 悲伤: 哦,我太伤心了。
语气表达
以下语气表达可用:
- 哈哈
- 呃
- 哇
- 呜呼呼
- 哦哦
可以直接在文本中使用这些语气表达,也可以将它们放在标签中。请确保使用确切的文本。
推理
import torch
import torchaudio.transforms as T
import os
import torch
from snac import SNAC
from peft import PeftModel
import soundfile as sf
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"SebastianBodza/Kartoffel_Orpheus-3B_german_synthetic-v0.1",
device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained(
"SebastianBodza/Kartoffel_Orpheus-3B_german_synthetic-v0.1",
)
snac_model = SNAC.from_pretrained("hubertsiuzdak/snac_24khz")
snac_model = snac_model.to("cuda")
chosen_voice = "Martin"
prompts = [
'Tief im verwunschenen Wald, wo die Bäume uralte Geheimnisse flüsterten, lebte ein kleiner Gnom namens Fips, der die Sprache der Tiere verstand.',
]
def process_single_prompt(prompt, chosen_voice):
if chosen_voice == "in_prompt" or chosen_voice == "":
full_prompt = prompt
else:
full_prompt = f"{chosen_voice}: {prompt}"
start_token = torch.tensor([[128259]], dtype=torch.int64)
end_tokens = torch.tensor([[128009, 128260]], dtype=torch.int64)
input_ids = tokenizer(full_prompt, return_tensors="pt").input_ids
modified_input_ids = torch.cat([start_token, input_ids, end_tokens], dim=1)
input_ids = modified_input_ids.to("cuda")
attention_mask = torch.ones_like(input_ids)
generated_ids = model.generate(
input_ids=input_ids,
attention_mask=attention_mask,
max_new_tokens=4000,
do_sample=True,
temperature=0.6,
top_p=0.95,
repetition_penalty=1.1,
num_return_sequences=1,
eos_token_id=128258,
use_cache=True,
)
token_to_find = 128257
token_to_remove = 128258
token_indices = (generated_ids == token_to_find).nonzero(as_tuple=True)
if len(token_indices[1]) > 0:
last_occurrence_idx = token_indices[1][-1].item()
cropped_tensor = generated_ids[:, last_occurrence_idx + 1 :]
else:
cropped_tensor = generated_ids
masked_row = cropped_tensor[0][cropped_tensor[0] != token_to_remove]
row_length = masked_row.size(0)
new_length = (row_length // 7) * 7
trimmed_row = masked_row[:new_length]
code_list = [t - 128266 for t in trimmed_row]
return code_list
def redistribute_codes(code_list):
layer_1 = []
layer_2 = []
layer_3 = []
for i in range((len(code_list) + 1) // 7):
layer_1.append(code_list[7 * i])
layer_2.append(code_list[7 * i + 1] - 4096)
layer_3.append(code_list[7 * i + 2] - (2 * 4096))
layer_3.append(code_list[7 * i + 3] - (3 * 4096))
layer_2.append(code_list[7 * i + 4] - (4 * 4096))
layer_3.append(code_list[7 * i + 5] - (5 * 4096))
layer_3.append(code_list[7 * i + 6] - (6 * 4096))
codes = [
torch.tensor(layer_1).unsqueeze(0),
torch.tensor(layer_2).unsqueeze(0),
torch.tensor(layer_3).unsqueeze(0),
]
codes = [c.to("cuda") for c in codes]
audio_hat = snac_model.decode(codes)
return audio_hat
for i, prompt in enumerate(prompts):
print(f"Processing prompt {i + 1}/{len(prompts)}")
with torch.no_grad():
code_list = process_single_prompt(prompt, chosen_voice)
samples = redistribute_codes(code_list)
audio_numpy = samples.detach().squeeze().to("cpu").numpy()
sf.write(f"output_{i}.wav", audio_numpy, 24000)
print(f"Saved output_{i}.wav")
信息表格
属性 | 详情 |
---|---|
模型类型 | 基于俄耳甫斯-3B的德语文本转语音(TTS)模型 |
训练数据 | 自然版:高质量德语音频,包括许可的播客、讲座和其他开放教育资源(OER)数据;合成版:包含4个不同说话人的多种情感的合成语音数据 |
许可证 | llama3.2 |
Kokoro 82M
Apache-2.0
Kokoro是一款拥有8200万参数的开源文本转语音(TTS)模型,以其轻量级架构和高音质著称,同时具备快速和成本效益高的特点。
语音合成 英语
K
hexgrad
2.0M
4,155
XTTS V2
其他
ⓍTTS是一款革命性的语音生成模型,仅需6秒音频片段即可实现跨语言音色克隆,支持17种语言。
语音合成
X
coqui
1.7M
2,630
F5 TTS
F5-TTS 是一个基于流匹配的语音合成模型,专注于流畅且忠实的语音合成,特别适用于童话讲述等场景。
语音合成
F
SWivid
851.49k
1,000
Bigvgan V2 22khz 80band 256x
MIT
BigVGAN是基于大规模训练的通用神经声码器,能够从梅尔频谱生成高质量音频波形。
语音合成
B
nvidia
503.23k
16
Speecht5 Tts
MIT
基于LibriTTS数据集微调的SpeechT5语音合成(文本转语音)模型,支持高质量的文本转语音转换。
语音合成
Transformers

S
microsoft
113.83k
760
Dia 1.6B
Apache-2.0
Dia是由Nari实验室开发的16亿参数文本转语音模型,能够直接从文本生成高度逼真的对话,支持情感和语调控制,并能生成非语言交流内容。
语音合成
Safetensors 英语
D
nari-labs
80.28k
1,380
Csm 1b
Apache-2.0
CSM是Sesame开发的10亿参数规模语音生成模型,可根据文本和音频输入生成RVQ音频编码
语音合成
Safetensors 英语
C
sesame
65.03k
1,950
Kokoro 82M V1.1 Zh
Apache-2.0
Kokoro 是一个开放权重的小型但功能强大的文本转语音(TTS)模型系列,新增了来自专业数据集的100名中文说话人数据。
语音合成
K
hexgrad
51.56k
112
Indic Parler Tts
Apache-2.0
Indic Parler-TTS 是 Parler-TTS Mini 的多语言印度语言扩展版本,支持21种语言,包括多种印度语言和英语。
语音合成
Transformers 支持多种语言

I
ai4bharat
43.59k
124
Bark
MIT
Bark是由Suno创建的基于Transformer的文本转音频模型,能生成高度逼真的多语言语音、音乐、背景噪音和简单音效。
语音合成
Transformers 支持多种语言

B
suno
35.72k
1,326
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98