Skip to content

Commit 17cb0b0

Browse files
authored
Merge pull request #20 from seyong92/main
add variable pad size to minimum f0
2 parents 38a79d8 + 5346064 commit 17cb0b0

1 file changed

Lines changed: 14 additions & 11 deletions

File tree

pytsmod/tdpsolatsm.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ def tdpsola(x, sr, src_f0, tgt_f0=None, alpha=1, beta=None,
4949
elif beta is None:
5050
beta = 1
5151

52+
min_f0 = src_f0[np.nonzero(src_f0)].min()
53+
pad_len = int(np.ceil(sr / min_f0))
54+
5255
n_chan = x.shape[0]
5356
output_length = int(np.ceil(x.shape[1] * alpha))
5457
y = np.zeros((n_chan, output_length))
@@ -80,9 +83,9 @@ def tdpsola(x, sr, src_f0, tgt_f0=None, alpha=1, beta=None,
8083

8184
output_length = int(np.ceil(x_chan.size * alpha))
8285

83-
pad = int(np.ceil(sr / 100))
84-
x_chan = np.pad(x_chan, (pad, pad), 'constant')
85-
y_chan = np.zeros(output_length + 2 * pad) # output signal
86+
# pad = int(np.ceil(sr / 100))
87+
x_chan = np.pad(x_chan, (pad_len, pad_len), 'constant')
88+
y_chan = np.zeros(output_length + 2 * pad_len) # output signal
8689

8790
tk = pitch_period[0] + 1 # output pitch mark
8891
ow = np.zeros(y_chan.shape)
@@ -97,10 +100,10 @@ def tdpsola(x, sr, src_f0, tgt_f0=None, alpha=1, beta=None,
97100
st = pm_chan[i] - pit
98101
en = pm_chan[i] + pit
99102

100-
gr = x_chan[st + pad: en + pad + 1] * win
103+
gr = x_chan[st + pad_len: en + pad_len + 1] * win
101104

102-
ini_gr = int(round(tk)) - pit + pad
103-
end_gr = int(round(tk)) + pit + pad
105+
ini_gr = int(round(tk)) - pit + pad_len
106+
end_gr = int(round(tk)) + pit + pad_len
104107

105108
y_chan[ini_gr: end_gr + 1] = y_chan[ini_gr: end_gr + 1] + gr
106109
ow[ini_gr: end_gr + 1] = ow[ini_gr: end_gr + 1] + win
@@ -109,7 +112,7 @@ def tdpsola(x, sr, src_f0, tgt_f0=None, alpha=1, beta=None,
109112
ow[ow < 1e-3] = 1
110113

111114
y_chan = y_chan / ow
112-
y_chan = y_chan[pad:]
115+
y_chan = y_chan[pad_len:]
113116
y_chan = y_chan[: output_length]
114117
y[c, :] = y_chan
115118

@@ -167,11 +170,11 @@ def _find_pitch_marks(x, sr, f0, hop_size, win_size):
167170
sample rate of the input audio sequence.
168171
f0 : numpy.ndarray [shape=(num_freqs)]
169172
the fundamental frequency contour of the input audio sequence.
170-
p_hop_size : int > 0 [scalar]
173+
hop_size : int > 0 [scalar]
171174
the hop size of f0 contour (in samples).
172-
p_win_size : int > 0 [scalar]
173-
the window size of pitch tracking algorithm
174-
you used. (in samples).
175+
win_size : int > 0 [scalar]
176+
the window size of pitch tracking algorithm
177+
you used. (in samples).
175178
176179
Returns
177180
-------

0 commit comments

Comments
 (0)