예제 #1
0
        public static VocalIndexObject Deseralize(string Folder)
        {
            VocalIndexObject ret = null;

            if (System.IO.File.Exists(Folder + "\\voicedbi.dat"))
            {
                ret = SerializeFrom(Folder + "\\voicedbi.dat");
                if (ret != null)
                {
                    string NewHash = CalcHash(ret.HashFiles, Folder);
                    if (NewHash != ret.HashValue)
                    {
                        ret = null;
                    }
                }
            }
            if (ret == null)
            {
                ret = new VocalIndexObject();
                ret.BasicData.IntroduceText = "Chorista Voice Index Cache File";
                ret.HashFiles.Add("character.txt");
                ret.CharacertData = CharacterSerializer.DeSerialize(Folder + "\\character.txt");
                ret.SndAtomList   = OtoSerializer.DeSerialize(Folder, ret.HashFiles);
                ret.HashFiles.Add("prefix.map");
                if (System.IO.File.Exists(Folder + "\\prefix.map"))
                {
                    ret.PrefixAtomList = PrefixMapSerialzier.DeSerialize(Folder + "\\prefix.map");
                }
                SplitDictionary sdlib = null;
                if (System.IO.File.Exists(Folder + "\\splitdic.json"))
                {
                    sdlib = SplitDictionary.SerializeFrom(Folder + "\\splitdic.json");
                    if (ret != null)
                    {
                        ret.HashFiles.Add("splitdic.json");
                    }
                }
                if (sdlib == null && System.IO.File.Exists(Folder + "\\presamp.ini"))
                {
                    sdlib = Presamp2DictSerializer.DeSerialize(Folder + "\\presamp.ini");
                    if (sdlib != null)
                    {
                        ret.HashFiles.Add("presamp.ini");
                    }
                }
                if (sdlib != null)
                {
                    ret.SplitDictionary = sdlib;
                }
                else
                {
                    ret.SplitDictionary = new SplitDictionary();
                }
                ret.SplitDictionary.MapSndList(ret.SndAtomList, ret.PrefixAtomList);
                ret.HashValue = CalcHash(ret.HashFiles, Folder);
                SerializeTo(ret, Folder + "\\voicedbi.dat");
            }
            return(ret);
        }
        public static SplitDictionary DeSerialize(string FilePath)
        {
            SplitDictionary ret = new SplitDictionary();

            Dictionary <string, string> VMap = new Dictionary <string, string>();
            Dictionary <string, string> CMap = new Dictionary <string, string>();

            Encoding FileEnc = Encoding.ASCII;// FileEncodingUtils.GetEncodingJIS(FilePath);

            string[] Datas = System.IO.File.ReadAllLines(FilePath, FileEnc);
            LoadSamp(Datas, ref ret);

            return(ret);
        }
예제 #3
0
        static void Main(string[] args)
        {
            SplitDictionary sd = Presamp2DictSerializer.DeSerialize(@"D:\VocalUtau\VocalUtau\bin\Debug\voicedb\YongQi_CVVChinese_Version2\presamp.ini");

            List <VocalUtau.Formats.Model.Database.VocalDatabase.SplitDictionary.SplitAtom> sal = sd.GetCurrentNoteAtom("xxxx", "lao", "{R}");
        }
        static void LoadSamp(string[] T, ref SplitDictionary Dict)
        {
            bool isVOWEL     = false;
            bool isCONSONANT = false;
            bool isENDType   = false;

            string EndCH = "R";

            string[] S = T;
            foreach (string s in S)
            {
                if (s.Substring(0, 1) == "[")
                {
                    isVOWEL     = false;
                    isCONSONANT = false;
                }
                if (s.IndexOf("[VOWEL]") >= 0)
                {
                    isVOWEL = true;
                    continue;
                }
                if (s.IndexOf("[CONSONANT]") >= 0)
                {
                    isCONSONANT = true;
                    continue;
                }
                if (s.IndexOf("[ENDTYPE]") >= 0)
                {
                    isENDType = true;
                    continue;
                }
                if (isENDType)
                {
                    if (s.IndexOf("%v% ") != -1)
                    {
                        string[] w = s.Split(new string[] { "%v% " }, StringSplitOptions.None);
                        try
                        {
                            EndCH = w[1];
                        }
                        catch {; }
                    }
                }
                if (isVOWEL)
                {
                    string[] k   = s.Split('=');
                    string   Si1 = k[0];
                    string   Si2 = k[1];
                    string   Si3 = k[2];
                    string[] o   = Si3.Split(',');
                    foreach (string so in o)
                    {
                        try
                        {
                            if (Dict.NoteAtomMap.ContainsKey(so))
                            {
                                Dict.NoteAtomMap[so][2] = Si1;
                            }
                            else
                            {
                                List <string> lt = new List <string>()
                                {
                                    so, Si1, Si1
                                };
                                Dict.NoteAtomMap.Add(so, lt);
                            }
                        }
                        catch {; }
                    }
                }
                if (isCONSONANT)
                {
                    string[] k   = s.Split('=');
                    string   Si1 = k[0];
                    string   Si2 = k[1];
                    string[] o   = Si2.Split(',');
                    foreach (string so in o)
                    {
                        try
                        {
                            if (Dict.NoteAtomMap.ContainsKey(so))
                            {
                                Dict.NoteAtomMap[so][1] = Si1;
                            }
                            else
                            {
                                List <string> lt = new List <string>()
                                {
                                    so, Si1, ""
                                };
                                Dict.NoteAtomMap.Add(so, lt);
                            }
                        }
                        catch {; }
                    }
                }
            }
            try
            {
                if (Dict.NoteAtomMap.ContainsKey("{R}"))
                {
                    Dict.NoteAtomMap["{R}"][1] = EndCH;
                }
                else
                {
                    List <string> lt = new List <string>()
                    {
                        "", EndCH, ""
                    };
                    Dict.NoteAtomMap.Add("{R}", lt);
                }
            }
            catch {; }
        }