-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathinference.py
68 lines (54 loc) · 1.9 KB
/
inference.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import argparse
import os
import json
import librosa
import numpy as np
import tensorflow as tf
from config import Config
from dataset import LJSpeech
from model import DiffWave
LJ_DATA_SIZE = 13100
def main(args):
# prepare directory for samples
if not os.path.exists(args.sample_dir):
os.makedirs(args.sample_dir)
# load checkpoint
with open(args.config) as f:
config = Config.load(json.load(f))
diffwave = DiffWave(config.model)
diffwave.restore(args.ckpt).expect_partial()
# open dataset
lj = LJSpeech(config.data)
if args.offset is None:
args.offset = config.train.split + \
np.random.randint(LJ_DATA_SIZE - config.train.split)
# sample
print('[*] offset: ', args.offset)
speech = next(iter(lj.rawset.skip(args.offset)))
speech = speech[:speech.shape[0] // config.data.hop * config.data.hop]
librosa.output.write_wav(
os.path.join(args.sample_dir, str(args.offset) + '_gt.wav'),
speech.numpy(),
config.data.sr)
# inference
noise = tf.random.normal(tf.shape(speech[None]))
librosa.output.write_wav(
os.path.join(args.sample_dir, str(args.offset) + '_noise.wav'),
noise[0].numpy(),
config.data.sr)
_, logmel = lj.mel_fn(speech[None])
_, ir = diffwave(logmel, noise)
for i, sample in enumerate(ir):
librosa.output.write_wav(
os.path.join(args.sample_dir, '{}_{}step.wav'.format(args.offset, i)),
sample[0],
config.data.sr)
print('[*] done')
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--sample-dir', default='./sample')
parser.add_argument('--config', default='./ckpt/l1.json')
parser.add_argument('--ckpt', default='./ckpt/l1/l1_1000000.ckpt-1')
parser.add_argument('--offset', default=None, type=int)
args = parser.parse_args()
main(args)