penguinfish1688's picture
Release standalone duplex TTS with XML interleaver, voice presets and examples
4123b95 verified
Raw History Blame Contribute Delete
1.31 kB
"""Native conditioning for duplex inference."""
import torch
def native_prefix(record, config):
"""Reproduce the pinned official CustomVoice non-streaming prompt using IDs.
A position can have projected text, codec conditioning, or their sum.
-1 means no embedding contribution; it is not a vocabulary token.
"""
c = config.talker_config
text_ids, codec_ids = [], []
def add(t=-1, a=-1):
text_ids.append(int(t))
codec_ids.append([int(a)] + [-1] * (c.num_code_groups - 1))
for token in record["instruct_ids"]:
add(t=token)
ids = record["text_ids"]
for token in ids[:3]:
add(t=token)
lang = record["language"].lower()
if lang == "auto":
control = [c.codec_nothink_id, c.codec_think_bos_id, c.codec_think_eos_id]
else:
control = [c.codec_think_id, c.codec_think_bos_id, c.codec_language_id[lang], c.codec_think_eos_id]
control += [c.spk_id[record["speaker"].lower()]]
for token in control:
add(config.tts_pad_token_id, token)
add(config.tts_bos_token_id, c.codec_pad_id)
for token in ids[3:-5]:
add(token, c.codec_pad_id)
add(config.tts_eos_token_id, c.codec_pad_id)
add(config.tts_pad_token_id, c.codec_bos_id)
return torch.tensor(text_ids), torch.tensor(codec_ids)