/// <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; }
/// <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; } } } }