MCPcopy Index your code
hub / github.com/MoonInTheRiver/DiffSinger / forward

Method forward

modules/fastspeech/tts_modules.py:159–189  ·  view source on GitHub ↗

Example (no batch dim version): 1. dur = [2,2,3] 2. token_idx = [[1],[2],[3]], dur_cumsum = [2,4,7], dur_cumsum_prev = [0,2,4] 3. token_mask = [[1,1,0,0,0,0,0], [0,0,1,1,0,0,0], [0,0,0,0,1,1,1]]

(self, dur, dur_padding=None, alpha=1.0)

Source from the content-addressed store, hash-verified

157 self.pad_value = pad_value
158
159 def forward(self, dur, dur_padding=None, alpha=1.0):
160 """
161 Example (no batch dim version):
162 1. dur = [2,2,3]
163 2. token_idx = [[1],[2],[3]], dur_cumsum = [2,4,7], dur_cumsum_prev = [0,2,4]
164 3. token_mask = [[1,1,0,0,0,0,0],
165 [0,0,1,1,0,0,0],
166 [0,0,0,0,1,1,1]]
167 4. token_idx * token_mask = [[1,1,0,0,0,0,0],
168 [0,0,2,2,0,0,0],
169 [0,0,0,0,3,3,3]]
170 5. (token_idx * token_mask).sum(0) = [1,1,2,2,3,3,3]
171
172 :param dur: Batch of durations of each frame (B, T_txt)
173 :param dur_padding: Batch of padding of each frame (B, T_txt)
174 :param alpha: duration rescale coefficient
175 :return:
176 mel2ph (B, T_speech)
177 """
178 assert alpha > 0
179 dur = torch.round(dur.float() * alpha).long()
180 if dur_padding is not None:
181 dur = dur * (1 - dur_padding.long())
182 token_idx = torch.arange(1, dur.shape[1] + 1)[None, :, None].to(dur.device)
183 dur_cumsum = torch.cumsum(dur, 1)
184 dur_cumsum_prev = F.pad(dur_cumsum, [1, -1], mode='constant', value=0)
185
186 pos_idx = torch.arange(dur.sum(-1).max())[None, None].to(dur.device)
187 token_mask = (pos_idx >= dur_cumsum_prev[:, :, None]) & (pos_idx < dur_cumsum[:, :, None])
188 mel2ph = (token_idx * token_mask.long()).sum(1)
189 return mel2ph
190
191
192class PitchPredictor(torch.nn.Module):

Callers

nothing calls this directly

Calls 1

padMethod · 0.80

Tested by

no test coverage detected