From 967528630906297c172aeb6f90114862ba1a0faf Mon Sep 17 00:00:00 2001 From: Maiko Date: Wed, 15 Nov 2023 10:47:56 +0900 Subject: [PATCH] Use filename as alias --- OpenUtau.Core/Classic/ClassicSinger.cs | 2 ++ OpenUtau.Core/Classic/VoiceBank.cs | 3 +- OpenUtau.Core/Classic/VoicebankConfig.cs | 1 + OpenUtau.Core/Classic/VoicebankLoader.cs | 35 ++++++++++++++++++++++-- OpenUtau/Strings/Strings.axaml | 3 +- OpenUtau/Strings/Strings.ja-JP.axaml | 3 +- OpenUtau/Styles/Styles.axaml | 16 +++++++++++ OpenUtau/ViewModels/SingersViewModel.cs | 24 +++++++++++++--- OpenUtau/Views/SingersDialog.axaml | 5 ++++ OpenUtau/Views/SingersDialog.axaml.cs | 5 ++++ 10 files changed, 88 insertions(+), 9 deletions(-) diff --git a/OpenUtau.Core/Classic/ClassicSinger.cs b/OpenUtau.Core/Classic/ClassicSinger.cs index cdc1d7402..17265b256 100644 --- a/OpenUtau.Core/Classic/ClassicSinger.cs +++ b/OpenUtau.Core/Classic/ClassicSinger.cs @@ -43,6 +43,8 @@ public class ClassicSinger : USinger { Dictionary otoMap = new Dictionary(); OtoWatcher otoWatcher; + public bool? UseFilenameAsAlias { get => voicebank.UseFilenameAsAlias; set => voicebank.UseFilenameAsAlias = value; } + public ClassicSinger(Voicebank voicebank) { this.voicebank = voicebank; found = true; diff --git a/OpenUtau.Core/Classic/VoiceBank.cs b/OpenUtau.Core/Classic/VoiceBank.cs index bf992d02d..f586140f9 100644 --- a/OpenUtau.Core/Classic/VoiceBank.cs +++ b/OpenUtau.Core/Classic/VoiceBank.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Drawing; using System.Text; using OpenUtau.Core.Ustx; @@ -25,6 +24,7 @@ public class Voicebank { public List OtoSets = new List(); public List Subbanks = new List(); public string Id; + public bool? UseFilenameAsAlias = null; public void Reload() { Name = null; @@ -44,6 +44,7 @@ public void Reload() { OtoSets.Clear(); Subbanks.Clear(); Id = null; + UseFilenameAsAlias = null; VoicebankLoader.LoadVoicebank(this); } diff --git a/OpenUtau.Core/Classic/VoicebankConfig.cs b/OpenUtau.Core/Classic/VoicebankConfig.cs index 33cf8121e..424ed21c6 100644 --- a/OpenUtau.Core/Classic/VoicebankConfig.cs +++ b/OpenUtau.Core/Classic/VoicebankConfig.cs @@ -52,6 +52,7 @@ public class VoicebankConfig { public string DefaultPhonemizer; public SymbolSet SymbolSet { get; set; } public Subbank[] Subbanks { get; set; } + public bool? UseFilenameAsAlias = null; public void Save(Stream stream) { using (var writer = new StreamWriter(stream, Encoding.UTF8)) { diff --git a/OpenUtau.Core/Classic/VoicebankLoader.cs b/OpenUtau.Core/Classic/VoicebankLoader.cs index e456545ca..462ff6871 100644 --- a/OpenUtau.Core/Classic/VoicebankLoader.cs +++ b/OpenUtau.Core/Classic/VoicebankLoader.cs @@ -66,7 +66,7 @@ public static void LoadVoicebank(Voicebank voicebank) { public static void LoadOtoSets(Voicebank voicebank, string dirPath) { var otoFile = Path.Combine(dirPath, kOtoIni); if (File.Exists(otoFile)) { - var otoSet = ParseOtoSet(otoFile, voicebank.TextFileEncoding); + var otoSet = ParseOtoSet(otoFile, voicebank.TextFileEncoding, voicebank.UseFilenameAsAlias); var voicebankDir = Path.GetDirectoryName(voicebank.File); otoSet.Name = Path.GetRelativePath(voicebankDir, dirPath); if (otoSet.Name == ".") { @@ -228,6 +228,9 @@ public static void ApplyConfig(Voicebank bank, VoicebankConfig bankConfig) { } bank.Subbanks.AddRange(bankConfig.Subbanks); } + if (bank.SingerType is USingerType.Classic && bankConfig.UseFilenameAsAlias != null) { + bank.UseFilenameAsAlias = bankConfig.UseFilenameAsAlias; + } } public static void LoadPrefixMap(Voicebank voicebank) { @@ -304,11 +307,14 @@ public static Dictionary, SortedSet> ParsePrefixMap(S } } - public static OtoSet ParseOtoSet(string filePath, Encoding encoding) { + public static OtoSet ParseOtoSet(string filePath, Encoding encoding , bool? useFilenameAsAlias) { try { using (var stream = File.OpenRead(filePath)) { var otoSet = ParseOtoSet(stream, filePath, encoding); AddAliasForMissingFiles(otoSet); + if (useFilenameAsAlias == true) { + AddFilenameAlias(otoSet); + } return otoSet; } } catch (Exception e) { @@ -362,6 +368,31 @@ static void AddAliasForMissingFiles(OtoSet otoSet) { } } + static void AddFilenameAlias(OtoSet otoSet) { + // Use filename as alias. + var files = otoSet.Otos.Where(oto => oto.IsValid).Select(oto => oto.Wav).Distinct().ToList(); + foreach (var wav in files) { + string filename = Path.GetFileNameWithoutExtension(wav); + if (!otoSet.Otos.Any(oto => oto.Alias == filename)) { + var reference = otoSet.Otos.OrderBy(oto => oto.Offset).First(oto => oto.Wav == wav); + var oto = new Oto { + Alias = filename, + Phonetic = filename, + Wav = wav, + Offset = reference.Offset, + Consonant = reference.Consonant, + Cutoff = reference.Cutoff, + Preutter = reference.Preutter, + Overlap = reference.Overlap, + IsValid = true, + Error = reference.Error, + FileTrace = reference.FileTrace + }; + otoSet.Otos.Add(oto); + } + } + } + static Oto ParseOto(string line, FileTrace trace) { const string format = "=,,,,,"; var oto = new Oto { diff --git a/OpenUtau/Strings/Strings.axaml b/OpenUtau/Strings/Strings.axaml index e40ba25cf..ac2523fd5 100644 --- a/OpenUtau/Strings/Strings.axaml +++ b/OpenUtau/Strings/Strings.axaml @@ -371,9 +371,9 @@ Warning: this option removes custom presets. Show All Zoom In Zoom Out + Play sample Open readme.txt readme.txt not found. - Play sample Refresh Set Default Phonemizer Set Encoding @@ -394,6 +394,7 @@ Warning: this option removes custom presets. Set Tone Tone Ranges + Use filename as alias Visit Website Archive File Encoding diff --git a/OpenUtau/Strings/Strings.ja-JP.axaml b/OpenUtau/Strings/Strings.ja-JP.axaml index 58d1e5b47..34b0db958 100644 --- a/OpenUtau/Strings/Strings.ja-JP.axaml +++ b/OpenUtau/Strings/Strings.ja-JP.axaml @@ -370,9 +370,9 @@ 全て表示 ズームイン ズームアウト + サンプルボイスを再生 readme.txtを開く readme.txtが見つかりません - サンプルボイスを再生 再読み込み デフォルトのPhonemizerを設定 文字コードを設定 @@ -393,6 +393,7 @@ セット 音程 音域 + ファイル名をエイリアスとして使用する ウェブサイトを開く アーカイブファイルのエンコード diff --git a/OpenUtau/Styles/Styles.axaml b/OpenUtau/Styles/Styles.axaml index c71309f12..5d4cef587 100644 --- a/OpenUtau/Styles/Styles.axaml +++ b/OpenUtau/Styles/Styles.axaml @@ -222,6 +222,22 @@ + + + + +