Views
No views yet
pip install transformers sentencepiece pyopnjtalk # or pyopenjtalk-prebuiltcurl -O https://huggingface.co/esnya/japanese_speecht5_tts/resolve/main/speecht5_openjtalk_tokenizer.pySpeechToTextPipeline is not released yet.)1import numpy as np
2from transformers import (
3 SpeechT5ForTextToSpeech,
4 SpeechT5HifiGan,
5 SpeechT5FeatureExtractor,
6 SpeechT5Processor,
7)
8from speecht5_openjtalk_tokenizer import SpeechT5OpenjtalkTokenizer
9import soundfile
10import torch
11
12model_name = "esnya/japanese_speecht5_tts"
13with torch.no_grad():
14
15 model = SpeechT5ForTextToSpeech.from_pretrained(
16 model_name, device_map="cuda", torch_dtype=torch.bfloat16
17 )
18
19 tokenizer = SpeechT5OpenjtalkTokenizer.from_pretrained(model_name)
20 feature_extractor = SpeechT5FeatureExtractor.from_pretrained(model_name)
21 processor = SpeechT5Processor(feature_extractor, tokenizer)
22 vocoder = SpeechT5HifiGan.from_pretrained(
23 "microsoft/speecht5_hifigan", device_map="cuda", torch_dtype=torch.bfloat16
24 )
25
26 input = "吾輩は猫である。名前はまだ無い。どこで生れたかとんと見当がつかぬ。"
27 input_ids = processor(text=input, return_tensors="pt").input_ids.to(model.device)
28
29 speaker_embeddings = np.random.uniform(
30 -1, 1, (1, 16)
31 ) # (batch_size, speaker_embedding_dim = 16), first dimension means male (-1.0) / female (1.0)
32 speaker_embeddings = torch.FloatTensor(speaker_embeddings).to(
33 device=model.device, dtype=model.dtype
34 )
35
36 waveform = model.generate_speech(
37 input_ids,
38 speaker_embeddings,
39 vocoder=vocoder,
40 )
41
42 waveform = waveform / waveform.abs().max() # normalize
43 waveform = waveform.reshape(-1).cpu().float().numpy()
44
45 soundfile.write(
46 "output.wav",
47 waveform,
48 vocoder.config.sampling_rate,
49 )