Skip to content

Commit bf42a99

Browse files
Merge pull request #20 from oxygen-dioxide/diffsinger-enunux
Diffsinger enunux
2 parents 77000ba + 9327a87 commit bf42a99

File tree

10 files changed

+1864
-21
lines changed

10 files changed

+1864
-21
lines changed

OpenUtau.Core/Enunu/EnunuConfig.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,17 @@ public EnunuConfig Convert() {
5656
enunuConfig.sampleRate = this.sampleRate;
5757
enunuConfig.framePeriod = this.framePeriod;
5858
enunuConfig.extensions = new EnunuExtensions();
59-
ParseEnunuExtension(enunuConfig.extensions.ust_editor, this.extensions.ust_editor);
60-
ParseEnunuExtension(enunuConfig.extensions.ust_converter, this.extensions.ust_converter);
61-
ParseEnunuExtension(enunuConfig.extensions.score_editor, this.extensions.score_editor);
62-
ParseEnunuExtension(enunuConfig.extensions.timing_calculator, this.extensions.timing_calculator);
63-
ParseEnunuExtension(enunuConfig.extensions.timing_editor, this.extensions.timing_editor);
64-
ParseEnunuExtension(enunuConfig.extensions.acoustic_calculator, this.extensions.acoustic_calculator);
65-
ParseEnunuExtension(enunuConfig.extensions.acoustic_editor, this.extensions.acoustic_editor);
66-
ParseEnunuExtension(enunuConfig.extensions.wav_synthesizer, this.extensions.wav_synthesizer);
67-
ParseEnunuExtension(enunuConfig.extensions.wav_editor, this.extensions.wav_editor);
59+
if (this.extensions != null) {
60+
ParseEnunuExtension(enunuConfig.extensions.ust_editor, this.extensions.ust_editor);
61+
ParseEnunuExtension(enunuConfig.extensions.ust_converter, this.extensions.ust_converter);
62+
ParseEnunuExtension(enunuConfig.extensions.score_editor, this.extensions.score_editor);
63+
ParseEnunuExtension(enunuConfig.extensions.timing_calculator, this.extensions.timing_calculator);
64+
ParseEnunuExtension(enunuConfig.extensions.timing_editor, this.extensions.timing_editor);
65+
ParseEnunuExtension(enunuConfig.extensions.acoustic_calculator, this.extensions.acoustic_calculator);
66+
ParseEnunuExtension(enunuConfig.extensions.acoustic_editor, this.extensions.acoustic_editor);
67+
ParseEnunuExtension(enunuConfig.extensions.wav_synthesizer, this.extensions.wav_synthesizer);
68+
ParseEnunuExtension(enunuConfig.extensions.wav_editor, this.extensions.wav_editor);
69+
}
6870
return enunuConfig;
6971
}
7072

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System.Collections.Generic;
2+
using System.IO;
3+
using OpenUtau.Core;
4+
5+
//Instead of using Enunu/EnunuConfig.cs, we created a copy to add EnunuOnnx-specific features
6+
//without potentially breaking the existing Enunu Phonemizers and renderers.
7+
namespace OpenUtau.Plugin.Builtin.EnunuOnnx {
8+
class EnunuConfig {
9+
public string tablePath;
10+
public string questionPath;
11+
public int sampleRate;
12+
public double framePeriod;
13+
public string modelDir;
14+
public string statsDir;
15+
public EnunuDurationConfig duration;
16+
public EnunuTimelagConfig timelag;
17+
18+
public static EnunuConfig Load(string configPath) {
19+
var configTxt = File.ReadAllText(configPath);
20+
RawEnunuConfig config = Yaml.DefaultDeserializer.Deserialize<RawEnunuConfig>(configTxt);
21+
return config.Convert();
22+
}
23+
}
24+
25+
26+
class EnunuTimelagConfig {
27+
public string checkpoint;
28+
public List<int> allowedRange;
29+
public List<int> allowedRangeRest;
30+
}
31+
class EnunuDurationConfig {
32+
public string checkpoint;
33+
34+
}
35+
36+
class RawEnunuConfig {
37+
public string tablePath;
38+
public string questionPath;
39+
public int sampleRate;
40+
public double framePeriod;
41+
public string modelDir;
42+
public string statsDir;
43+
public EnunuDurationConfig duration;
44+
public EnunuTimelagConfig timelag;
45+
46+
public EnunuConfig Convert() {
47+
EnunuConfig enunuConfig = new EnunuConfig();
48+
enunuConfig.tablePath = this.tablePath;
49+
enunuConfig.questionPath = this.questionPath;
50+
enunuConfig.sampleRate = this.sampleRate;
51+
enunuConfig.framePeriod = this.framePeriod;
52+
enunuConfig.duration = this.duration;
53+
enunuConfig.modelDir = this.modelDir;
54+
enunuConfig.statsDir = this.statsDir;
55+
enunuConfig.timelag = this.timelag;
56+
return enunuConfig;
57+
}
58+
}
59+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Text;
5+
using OpenUtau.Api;
6+
using OpenUtau.Core.G2p;
7+
using Serilog;
8+
9+
namespace OpenUtau.Plugin.Builtin {
10+
[Phonemizer("Enunu Onnx English Phonemizer", "ENUNU X EN", language:"EN")]
11+
public class EnunuOnnxEnglishPhonemizer : EnunuOnnxPhonemizer {
12+
protected override IG2p LoadG2p(string rootPath) {
13+
var g2ps = new List<IG2p>();
14+
15+
// Load dictionary from singer folder.
16+
string file = Path.Combine(rootPath, "enunux.yaml");
17+
if (File.Exists(file)) {
18+
try {
19+
g2ps.Add(G2pDictionary.NewBuilder().Load(File.ReadAllText(file)).Build());
20+
} catch (Exception e) {
21+
Log.Error(e, $"Failed to load {file}");
22+
}
23+
}
24+
g2ps.Add(new ArpabetG2p());
25+
return new G2pFallbacks(g2ps.ToArray());
26+
}
27+
28+
}
29+
}

0 commit comments

Comments
 (0)