/// <summary>
            /// VOCALOID2システムが使用する辞書を読み込みます。
            /// </summary>
            public static void loadSystemDictionaries()
            {
                if (mInitialized)
                {
                    return;
                }
                // 辞書フォルダからの読込み
                string editor_path = VocaloSysUtil.getEditorPath(SynthesizerType.VOCALOID2);

                if (editor_path != "")
                {
                    string path = Path.Combine(PortUtil.getDirectoryName(editor_path), "UDIC");
                    if (!Directory.Exists(path))
                    {
                        return;
                    }
                    string[] files = PortUtil.listFiles(path, "*.udc");
                    for (int i = 0; i < files.Length; i++)
                    {
                        files[i] = PortUtil.getFileName(files[i]);
                        string dict = Path.Combine(path, files[i]);
                        mTable.Add(new SymbolTable(dict, true, false, "Shift_JIS"));
                    }
                }
                mInitialized = true;
            }
Beispiel #2
0
 /// <summary>
 /// 指定されたディレクトリにある言語設定ファイルを全て読込み、メッセージリストに追加します
 /// </summary>
 /// <param name="directory"></param>
 public static void loadMessages(string directory)
 {
     s_messages.Clear();
     string[] files = PortUtil.listFiles(directory, ".po");
     for (int i = 0; i < files.Length; i++)
     {
         string name  = PortUtil.getFileName(files[i]);
         string fname = Path.Combine(directory, name);
         appendFromFile(fname);
     }
 }
 /// <summary>
 /// 指定したディレクトリにある拡張辞書ファイル(拡張子*.eudc)を全て読み込みます
 /// </summary>
 /// <param name="directory"></param>
 public static void loadAllDictionaries(string directory)
 {
     // 起動ディレクトリ
     if (Directory.Exists(directory))
     {
         string[] files2 = PortUtil.listFiles(directory, "*.eudc");
         for (int i = 0; i < files2.Length; i++)
         {
             files2[i] = PortUtil.getFileName(files2[i]);
             string dict = Path.Combine(directory, files2[i]);
             mTable.Add(new SymbolTable(dict, true, false, "UTF-8"));
         }
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="path_voicedb">音源のデータディレクトリ(ex:"C:\Program Files\VOCALOID2\voicedbdir")</param>
        /// <param name="path_installed_singers">音源のインストールディレクトリ(ex:new String[]{ "C:\Program Files\VOCALOID2\voicedbdir\BXXXXXXXXXXXXXXX", "D:\singers\BNXXXXXXXXXX" })</param>
        public SingerConfigSys(string path_voicedb, string[] path_installed_singers)
        {
            m_installed_singers = new List <SingerConfig>();
            m_singer_configs    = new List <SingerConfig>();
            string map = Path.Combine(path_voicedb, "voice.map");

            if (!System.IO.File.Exists(map))
            {
                return;
            }

            // インストールされている歌手の情報を読み取る。miku.vvd等から。
            for (int j = 0; j < path_installed_singers.Length; j++)
            {
                string ipath = path_installed_singers[j];
#if DEBUG
                sout.println("SingerConfigSys#.ctor; path_installed_singers[" + j + "]=" + path_installed_singers[j]);
#endif
                //TODO: ここでエラー起こる場合があるよ。SingerConfigSys::.ctor
                //      実際にディレクトリがある場合にのみ,ファイルのリストアップをするようにした.
                //      これで治っているかどうか要確認
                if (Directory.Exists(ipath))
                {
                    string[] vvds = PortUtil.listFiles(ipath, "*.vvd");
                    if (vvds.Length > 0)
                    {
                        SingerConfig installed = SingerConfig.fromVvd(vvds[0], 0, 0);
                        m_installed_singers.Add(installed);
                        break;
                    }
                }
            }

            // voice.mapから、プログラムチェンジ、バンクセレクトと音源との紐付け情報を読み出す。
            FileStream fs = null;
            try {
                fs = new FileStream(map, FileMode.Open, FileAccess.Read);
                byte[] dat = new byte[8];
                fs.Seek(0x20, SeekOrigin.Begin);
                for (int language = 0; language < 0x80; language++)
                {
                    for (int program = 0; program < 0x80; program++)
                    {
                        fs.Read(dat, 0, 8);
                        long value = PortUtil.make_int64_le(dat);
                        if (value >= 1)
                        {
                            string       vvd  = Path.Combine(path_voicedb, "vvoice" + value + ".vvd");
                            SingerConfig item = SingerConfig.fromVvd(vvd, language, program);
                            m_singer_configs.Add(item);
                        }
                    }
                }
            } catch (Exception ex) {
                serr.println("SingerConfigSys#.ctor; ex=" + ex);
            } finally {
                if (fs != null)
                {
                    try {
                        fs.Close();
                    } catch (Exception ex2) {
                        serr.println("SingerConfigSys#.ctor; ex2=" + ex2);
                    }
                }
            }

            // m_singer_configsの情報から、m_installed_singersの歌唱言語情報を類推する
            foreach (var sc in m_installed_singers)
            {
                string searchid = sc.VOICEIDSTR;
                foreach (var sc2 in m_singer_configs)
                {
                    if (sc2.VOICEIDSTR.Equals(searchid))
                    {
                        sc.Language = sc2.Language;
                        break;
                    }
                }
            }
        }