Skip to content

Commit fae27c8

Browse files
authored
Merge pull request #1022 from oxygen-dioxide/diffsinger-phonemizer-glide
diffsinger phonemizers: support glide phonemes
2 parents 0643434 + a3636b2 commit fae27c8

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

OpenUtau.Core/DiffSinger/DiffSingerBasePhonemizer.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,25 @@ List<phonemesPerNote> ProcessWord(Note[] notes){
138138
};
139139
var dsPhonemes = GetDsPhonemes(notes[0]);
140140
var isVowel = dsPhonemes.Select(s => g2p.IsVowel(s.Symbol)).ToArray();
141+
var isGlide = dsPhonemes.Select(s => g2p.IsGlide(s.Symbol)).ToArray();
141142
var nonExtensionNotes = notes.Where(n=>!IsSyllableVowelExtensionNote(n)).ToArray();
143+
var isStart = new bool[dsPhonemes.Length];
144+
if(!isStart.Any()){
145+
isStart[0] = true;
146+
}
147+
for(int i=0; i<dsPhonemes.Length; i++){
148+
if(isVowel[i]){
149+
if(i>=2 && isGlide[i-1] && !isVowel[i-2]){
150+
isStart[i-1] = true;
151+
}else{
152+
isStart[i] = true;
153+
}
154+
}
155+
}
142156
//distribute phonemes to notes
143157
var noteIndex = 0;
144158
for (int i = 0; i < dsPhonemes.Length; i++) {
145-
if (isVowel[i] && noteIndex < nonExtensionNotes.Length) {
159+
if (isStart[i] && noteIndex < nonExtensionNotes.Length) {
146160
var note = nonExtensionNotes[noteIndex];
147161
wordPhonemes.Add(new phonemesPerNote(note.position, note.tone));
148162
noteIndex++;

0 commit comments

Comments
 (0)