mirror of https://github.com/coqui-ai/TTS.git
remove file
parent
5dfdde000b
commit
95654de860
92
synthesis.py
92
synthesis.py
|
@ -1,92 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from network import *
|
||||
from data import inv_spectrogram, find_endpoint, save_wav, spectrogram
|
||||
import numpy as np
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
import io
|
||||
from text import text_to_sequence
|
||||
|
||||
use_cuda = torch.cuda.is_available()
|
||||
|
||||
|
||||
def main(args):
|
||||
|
||||
# Make model
|
||||
if use_cuda:
|
||||
model = nn.DataParallel(Tacotron().cuda())
|
||||
|
||||
# Load checkpoint
|
||||
try:
|
||||
checkpoint = torch.load(os.path.join(
|
||||
hp.checkpoint_path, 'checkpoint_%d.pth.tar' % args.restore_step))
|
||||
model.load_state_dict(checkpoint['model'])
|
||||
print("\n--------model restored at step %d--------\n" %
|
||||
args.restore_step)
|
||||
|
||||
except:
|
||||
raise FileNotFoundError("\n------------Model not exists------------\n")
|
||||
|
||||
# Evaluation
|
||||
model = model.eval()
|
||||
|
||||
# Make result folder if not exists
|
||||
if not os.path.exists(hp.output_path):
|
||||
os.mkdir(hp.output_path)
|
||||
|
||||
# Sentences for generation
|
||||
sentences = [
|
||||
"I try my best to translate text to speech. But I know I need more work",
|
||||
"The new Firefox, Fast for good.",
|
||||
"Technology is continually providing us with new ways to create and publish stories.",
|
||||
"For these stories to achieve their full impact, it requires tool.",
|
||||
"I am allien and I am here to destron your world."
|
||||
]
|
||||
|
||||
# Synthesis and save to wav files
|
||||
for i, text in enumerate(sentences):
|
||||
wav = generate(model, text)
|
||||
path = os.path.join(hp.output_path, 'result_%d_%d.wav' %
|
||||
(args.restore_step, i + 1))
|
||||
with open(path, 'wb') as f:
|
||||
f.write(wav)
|
||||
|
||||
f.close()
|
||||
print("save wav file at step %d ..." % (i + 1))
|
||||
|
||||
|
||||
def generate(model, text):
|
||||
|
||||
# Text to index sequence
|
||||
cleaner_names = [x.strip() for x in hp.cleaners.split(',')]
|
||||
seq = np.expand_dims(np.asarray(text_to_sequence(
|
||||
text, cleaner_names), dtype=np.int32), axis=0)
|
||||
|
||||
# Provide [GO] Frame
|
||||
mel_input = np.zeros([seq.shape[0], hp.num_mels, 1], dtype=np.float32)
|
||||
|
||||
# Variables
|
||||
characters = Variable(torch.from_numpy(seq).type(
|
||||
torch.cuda.LongTensor), volatile=True).cuda()
|
||||
mel_input = Variable(torch.from_numpy(mel_input).type(
|
||||
torch.cuda.FloatTensor), volatile=True).cuda()
|
||||
|
||||
# Spectrogram to wav
|
||||
_, linear_output = model.forward(characters, mel_input)
|
||||
wav = inv_spectrogram(linear_output[0].data.cpu().numpy())
|
||||
wav = wav[:find_endpoint(wav)]
|
||||
out = io.BytesIO()
|
||||
save_wav(wav, out)
|
||||
|
||||
return out.getvalue()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--restore_step', type=int,
|
||||
help='Global step to restore checkpoint', default=0)
|
||||
parser.add_argument('--batch_size', type=int, help='Batch size', default=1)
|
||||
args = parser.parse_args()
|
||||
main(args)
|
Loading…
Reference in New Issue