/// <summary> /// スクリプトのファイル名から、そのスクリプトの設定ファイルの名前を決定します。 /// </summary> /// <param name="script_file"></param> /// <returns></returns> public static String configFileNameFromScriptFileName(String script_file) { String dir = Path.Combine(Utility.getApplicationDataPath(), "script"); if (!Directory.Exists(dir)) { PortUtil.createDirectory(dir); } return(Path.Combine(dir, PortUtil.getFileNameWithoutExtension(script_file) + ".config")); }
public void bgWork_DoWork(Object sender, DoWorkEventArgs e) { #if DEBUG sout.println("FormGenerateKeySound#bgWork_DoWork"); #endif PrepareStartArgument arg = (PrepareStartArgument)e.Argument; string singer = arg.singer; double amp = arg.amplitude; string dir = arg.directory; bool replace = arg.replace; // 音源を準備 if (!Directory.Exists(dir)) { PortUtil.createDirectory(dir); } for (int i = 0; i < 127; i++) { string path = Path.Combine(dir, i + ".wav"); sout.println("writing \"" + path + "\" ..."); if (replace || (!replace && !File.Exists(path))) { try { GenerateSinglePhone(i, singer, path, amp); if (File.Exists(path)) { try { Wave wv = new Wave(path); wv.trimSilence(); wv.monoralize(); wv.write(path); } catch (Exception ex0) { serr.println("FormGenerateKeySound#bgWork_DoWork; ex0=" + ex0); Logger.write(typeof(FormGenerateKeySound) + ".bgWork_DoWork; ex=" + ex0 + "\n"); } } } catch (Exception ex) { Logger.write(typeof(FormGenerateKeySound) + ".bgWork_DoWork; ex=" + ex + "\n"); serr.println("FormGenerateKeySound#bgWork_DoWork; ex=" + ex); } } sout.println(" done"); if (m_cancel_required) { m_cancel_required = false; break; } bgWork.ReportProgress((int)(i / 127.0 * 100.0), null); } m_cancel_required = false; }
public static void GenerateSinglePhone(int note, string singer, string file, double amp) { string renderer = ""; SingerConfig[] singers1 = VocaloSysUtil.getSingerConfigs(SynthesizerType.VOCALOID1); int c = singers1.Length; string first_found_singer = ""; string first_found_renderer = ""; for (int i = 0; i < c; i++) { if (first_found_singer.Equals("")) { first_found_singer = singers1[i].VOICENAME; first_found_renderer = VsqFileEx.RENDERER_DSB2; } if (singers1[i].VOICENAME.Equals(singer)) { renderer = VsqFileEx.RENDERER_DSB2; break; } } SingerConfig[] singers2 = VocaloSysUtil.getSingerConfigs(SynthesizerType.VOCALOID2); c = singers2.Length; for (int i = 0; i < c; i++) { if (first_found_singer.Equals("")) { first_found_singer = singers2[i].VOICENAME; first_found_renderer = VsqFileEx.RENDERER_DSB3; } if (singers2[i].VOICENAME.Equals(singer)) { renderer = VsqFileEx.RENDERER_DSB3; break; } } foreach (var sc in AppManager.editorConfig.UtauSingers) { if (first_found_singer.Equals("")) { first_found_singer = sc.VOICENAME; first_found_renderer = VsqFileEx.RENDERER_UTU0; } if (sc.VOICENAME.Equals(singer)) { renderer = VsqFileEx.RENDERER_UTU0; break; } } VsqFileEx vsq = new VsqFileEx(singer, 1, 4, 4, 500000); if (renderer.Equals("")) { singer = first_found_singer; renderer = first_found_renderer; } vsq.Track[1].getCommon().Version = renderer; VsqEvent item = new VsqEvent(1920, new VsqID(0)); item.ID.LyricHandle = new LyricHandle("あ", "a"); item.ID.setLength(480); item.ID.Note = note; item.ID.VibratoHandle = null; item.ID.type = VsqIDType.Anote; vsq.Track[1].addEvent(item); vsq.updateTotalClocks(); int ms_presend = 500; string tempdir = Path.Combine(AppManager.getCadenciiTempDir(), AppManager.getID()); if (!Directory.Exists(tempdir)) { try { PortUtil.createDirectory(tempdir); } catch (Exception ex) { Logger.write(typeof(FormGenerateKeySound) + ".GenerateSinglePhone; ex=" + ex + "\n"); serr.println("Program#GenerateSinglePhone; ex=" + ex); return; } } WaveWriter ww = null; try { ww = new WaveWriter(file); RendererKind kind = VsqFileEx.getTrackRendererKind(vsq.Track[1]); WaveGenerator generator = VSTiDllManager.getWaveGenerator(kind); int sample_rate = vsq.config.SamplingRate; FileWaveReceiver receiver = new FileWaveReceiver(file, 1, 16, sample_rate); generator.setReceiver(receiver); generator.setGlobalConfig(AppManager.editorConfig); #if DEBUG sout.println("FormGenerateKeySound#GenerateSinglePhone; sample_rate=" + sample_rate); #endif generator.init(vsq, 1, 0, vsq.TotalClocks, sample_rate); double total_sec = vsq.getSecFromClock(vsq.TotalClocks) + 1.0; WorkerStateImp state = new WorkerStateImp(); generator.begin((long)(total_sec * sample_rate), state); } catch (Exception ex) { serr.println("FormGenerateKeySound#GenerateSinglePhone; ex=" + ex); Logger.write(typeof(FormGenerateKeySound) + ".GenerateSinglePhone; ex=" + ex + "\n"); } finally { if (ww != null) { try { ww.close(); } catch (Exception ex2) { Logger.write(typeof(FormGenerateKeySound) + ".GenerateSinglePhone; ex=" + ex2 + "\n"); serr.println("FormGenerateKeySound#GenerateSinglePhone; ex2=" + ex2); } } } }