|
16 | 16 | namespace OpenUtau.Core.DiffSinger {
|
17 | 17 | public class DiffSingerRenderer : IRenderer {
|
18 | 18 | const float headMs = 0;
|
19 |
| - const float tailMs = 0; |
| 19 | + const float tailMs = 500; |
20 | 20 |
|
21 | 21 | static readonly HashSet<string> supportedExp = new HashSet<string>(){
|
22 | 22 | Format.Ustx.DYN,
|
@@ -109,10 +109,12 @@ float[] InvokeDiffsinger(RenderPhrase phrase,int speedup) {
|
109 | 109 | //speedup:加速倍数
|
110 | 110 | var tokens = phrase.phones
|
111 | 111 | .Select(p => p.phoneme)
|
| 112 | + .Append("SP") |
112 | 113 | .Select(x => (long)(singer.phonemes.IndexOf(x)))
|
113 | 114 | .ToList();
|
114 | 115 | var durations = phrase.phones
|
115 | 116 | .Select(p => (long)(p.endMs / frameMs) - (long)(p.positionMs / frameMs))//防止累计误差
|
| 117 | + .Append(tailFrames) |
116 | 118 | .ToList();
|
117 | 119 | var totalFrames = (int)(durations.Sum());
|
118 | 120 | var f0 = SampleCurve(phrase, phrase.pitches, 0, totalFrames, headFrames, tailFrames, x => MusicMath.ToneToFreq(x * 0.01));
|
@@ -167,8 +169,8 @@ double[] SampleCurve(RenderPhrase phrase, float[] curve, double defaultValue, in
|
167 | 169 | }
|
168 | 170 | }
|
169 | 171 | //填充头尾
|
170 |
| - Array.Fill(result, defaultValue, 0, headFrames); |
171 |
| - Array.Fill(result, defaultValue, length - tailFrames, tailFrames); |
| 172 | + Array.Fill(result, convert(curve[0]), 0, headFrames); |
| 173 | + Array.Fill(result, convert(curve.Last()), length - tailFrames, tailFrames); |
172 | 174 | return result;
|
173 | 175 | }
|
174 | 176 |
|
|
0 commit comments