neutts-jp
Collection
7 items β’ Updated
This is the ONNX export of the neuTTS-JP-150m model, a Japanese text-to-speech model with voice cloning capabilities.
aoiandroid/neutts-jp-150m-onnx/
βββ neutts-jp-150m-original.onnx # ONNX model structure (1.75 MB)
βββ neutts-jp-150m-original.onnx.data # ONNX model weights (607 MB)
βββ README.md # Model card
File Descriptions:
neutts-jp-150m-original.onnx: ONNX model file containing the graph structure and metadataneutts-jp-150m-original.onnx.data: External data file containing the model weights (large tensor data)README.md: Model documentation and usage instructionspip install onnxruntime transformers torchaudio neucodec soundfile
import onnxruntime as ort
from transformers import AutoTokenizer
from neucodec import NeuCodec
import torch
import torchaudio
from torchaudio import transforms as T
import soundfile as sf
# Load ONNX model
session = ort.InferenceSession(
"neutts-jp-150m-original.onnx",
providers=['CPUExecutionProvider']
)
# Load tokenizer and codec
tokenizer = AutoTokenizer.from_pretrained(
"aoiandroid/neuTTS-JP-150m",
trust_remote_code=True
)
codec = NeuCodec.from_pretrained("neuphonic/neucodec")
codec.eval()
# Load and process reference audio
waveform, sr = torchaudio.load("reference_audio.wav")
if waveform.shape[0] > 1:
waveform = waveform.mean(dim=0, keepdim=True)
if sr != 16_000:
waveform = T.Resample(sr, 16_000)(waveform)
waveform = waveform.unsqueeze(0)
# Encode reference audio
with torch.inference_mode():
ref_codes = codec.encode_code(waveform).flatten().tolist()
# Tokenize text
text = "γγγ«γ‘γ―γγγγ―γγΉγγ§γγ"
text_ids = tokenizer.encode(text, add_special_tokens=False)
eos_id = int(tokenizer.eos_token_id)
input_ids = ref_codes + [eos_id] + text_ids + [eos_id]
input_ids = torch.tensor([input_ids], dtype=torch.long)
# Generate using ONNX model
input_ids_np = input_ids.numpy()
outputs = session.run(None, {'input_ids': input_ids_np})
logits = outputs[0]
# Get next token (greedy decoding)
next_token = int(logits[0, -1].argmax())
# (Repeat generation loop for full sequence)
# Decode audio
gen_ids = [generated_tokens] # Your generated tokens
gen_ids_tensor = torch.tensor(gen_ids, dtype=torch.long).unsqueeze(0).unsqueeze(0)
with torch.inference_mode():
audio_data = codec.decode_code(gen_ids_tensor).cpu()
# Save output
sf.write("output.wav", audio_data[0][0].cpu().numpy(), 24_000)
This model is based on LlamaForCausalLM with the following configuration:
MIT License
If you use this model, please cite the original neuTTS-JP-150m model.