public RendererMenuHandler( RendererKind kind, ToolStripMenuItem track_menu, ToolStripMenuItem context_menu, ToolStripMenuItem vsti_ui_menu ) { kind_ = kind; track_menu_ = track_menu; context_menu_ = context_menu; vsti_ui_menu_ = vsti_ui_menu; }
/// <summary> /// 現在選択されている合成器を設定する。これにより、メニューのチェック状態が更新される /// </summary> /// <param name="kind">現在選択されている合成器の種類</param> public void updateCheckedState( RendererKind kind ) { bool match = kind == kind_; if ( track_menu_ != null ) { track_menu_.Checked = match; } if ( context_menu_ != null ) { context_menu_.Checked = match; } }
/// <summary> /// このインスタンスの整合性をチェックします. /// PathResamplersとPathResamplersWithWineの個数があってるかどうかなどのチェックを行う /// </summary> public void check() { int count = SymbolTable.getCount(); for (int i = 0; i < count; i++) { SymbolTable st = SymbolTable.getSymbolTable(i); bool found = false; foreach (var s in UserDictionaries) { string[] spl = PortUtil.splitString(s, new char[] { '\t' }, 2); if (st.getName().Equals(spl[0])) { found = true; break; } } if (!found) { UserDictionaries.Add(st.getName() + "\tT"); } } // key_widthを最大,最小の間に収める int draft_key_width = this.KeyWidth; if (draft_key_width < AppManager.MIN_KEY_WIDTH) { draft_key_width = AppManager.MIN_KEY_WIDTH; } else if (AppManager.MAX_KEY_WIDTH < draft_key_width) { draft_key_width = AppManager.MAX_KEY_WIDTH; } // PathResamplersWithWineの個数があってるかどうかチェック if (PathResamplers == null) { PathResamplers = new List <string>(); } if (ResamplersWithWine == null) { ResamplersWithWine = new List <Boolean>(); } if (PathResamplers.Count != ResamplersWithWine.Count) { int delta = ResamplersWithWine.Count - PathResamplers.Count; if (delta > 0) { for (int i = 0; i < delta; i++) { ResamplersWithWine.RemoveAt(ResamplersWithWine.Count - 1); } } else if (delta < 0) { for (int i = 0; i < -delta; i++) { ResamplersWithWine.Add(false); } } } DefaultSynthesizer = RendererKind.UTAU; }
public void processQueue(WorkerState state, Object arg) { #if DEBUG sout.println("SynthesizeWorker#processQueue"); #endif PatchWorkQueue q = (PatchWorkQueue)arg; VsqFileEx vsq = q.vsq; int channel = vsq.config.WaveFileOutputChannel == 1 ? 1 : 2; double amp_master = VocaloSysUtil.getAmplifyCoeffFromFeder(vsq.Mixer.MasterFeder); double pan_left_master = VocaloSysUtil.getAmplifyCoeffFromPanLeft(vsq.Mixer.MasterPanpot); double pan_right_master = VocaloSysUtil.getAmplifyCoeffFromPanRight(vsq.Mixer.MasterPanpot); int numTrack = vsq.Track.Count; string tmppath = AppManager.getTempWaveDir(); int track = q.track; VsqTrack vsq_track = vsq.Track[track]; int count = vsq_track.getEventCount(); if (count <= 0) { return;// false; } double amp_track = VocaloSysUtil.getAmplifyCoeffFromFeder(vsq.Mixer.Slave[track - 1].Feder); double pan_left_track = VocaloSysUtil.getAmplifyCoeffFromPanLeft(vsq.Mixer.Slave[track - 1].Panpot); double pan_right_track = VocaloSysUtil.getAmplifyCoeffFromPanRight(vsq.Mixer.Slave[track - 1].Panpot); double amp_left = amp_track * pan_left_track; double amp_right = amp_track * pan_right_track; int total_clocks = vsq.TotalClocks; double total_sec = vsq.getSecFromClock(total_clocks); RendererKind kind = VsqFileEx.getTrackRendererKind(vsq_track); mGenerator = VSTiDllManager.getWaveGenerator(kind); Amplifier amp = new Amplifier(); amp.setRoot(mGenerator); if (q.renderAll) { amp.setAmplify(amp_left, amp_right); } mGenerator.setReceiver(amp); mGenerator.setGlobalConfig(AppManager.editorConfig); mGenerator.setMainWindow(mMainWindow); Mixer mixer = new Mixer(); mixer.setRoot(mGenerator); mixer.setGlobalConfig(AppManager.editorConfig); amp.setReceiver(mixer); if (q.renderAll && vsq.config.WaveFileOutputFromMasterTrack) { // トラック全体を合成するモードで,かつ,他トラックを合成して出力するよう指示された場合 if (numTrack > 2) { for (int i = 1; i < numTrack; i++) { if (i == track) { continue; } string file = Path.Combine(tmppath, i + ".wav"); if (!File.Exists(file)) { // mixするべきファイルが揃っていないのでbailout return;// true; } WaveReader r = null; try { r = new WaveReader(file); } catch (Exception ex) { Logger.write(typeof(SynthesizeWorker) + ".processQueue; ex=" + ex + "\n"); r = null; } if (r == null) { return;// true; } double end_sec = vsq.getSecFromClock(q.clockStart); r.setOffsetSeconds(end_sec); Amplifier amp_i_unit = new Amplifier(); amp_i_unit.setRoot(mGenerator); double amp_i = VocaloSysUtil.getAmplifyCoeffFromFeder(vsq.Mixer.Slave[i - 1].Feder); double pan_left_i = VocaloSysUtil.getAmplifyCoeffFromPanLeft(vsq.Mixer.Slave[i - 1].Panpot); double pan_right_i = VocaloSysUtil.getAmplifyCoeffFromPanRight(vsq.Mixer.Slave[i - 1].Panpot); double amp_left_i = amp_i * pan_left_i; double amp_right_i = amp_i * pan_right_i; #if DEBUG sout.println("FormSynthesize#bgWork_DoWork; #" + i + "; amp_left_i=" + amp_left_i + "; amp_right_i=" + amp_right_i); #endif amp_i_unit.setAmplify(amp_left_i, amp_right_i); FileWaveSender wave_sender = new FileWaveSender(r); wave_sender.setRoot(mGenerator); wave_sender.setGlobalConfig(AppManager.editorConfig); amp_i_unit.setSender(wave_sender); mixer.addSender(amp_i_unit); } } } PortUtil.deleteFile(q.file); int sample_rate = vsq.config.SamplingRate; #if DEBUG sout.println("FormSynthesize#bgWork_DoWork; q.file=" + q.file); #endif FileWaveReceiver wave_receiver = new FileWaveReceiver(q.file, channel, 16, sample_rate); wave_receiver.setRoot(mGenerator); wave_receiver.setGlobalConfig(AppManager.editorConfig); Amplifier amp_unit_master = new Amplifier(); amp_unit_master.setRoot(mGenerator); if (q.renderAll) { double l = amp_master * pan_left_master; double r = amp_master * pan_right_master; amp_unit_master.setAmplify(l, r); } mixer.setReceiver(amp_unit_master); amp_unit_master.setReceiver(wave_receiver); int end = q.clockEnd; if (end == int.MaxValue) { end = vsq.TotalClocks + 240; } mGenerator.init(vsq, track, q.clockStart, end, sample_rate); double sec_start = vsq.getSecFromClock(q.clockStart); double sec_end = vsq.getSecFromClock(end); long samples = (long)((sec_end - sec_start) * sample_rate); mGenerator.begin(samples, state); return;// false; }
/// <summary> /// デフォルトの音声合成システムを設定します /// </summary> /// <param name="value"></param> public void setDefaultSynthesizer( RendererKind value ) { int c = comboDefaultSynthesizer.Items.Count; int select_indx = 0; for ( int i = 0; i < c; i++ ) { String str = (String)comboDefaultSynthesizer.Items[i]; RendererKind p = RendererKindUtil.fromString( str ); if ( p == value ) { select_indx = i; break; } } comboDefaultSynthesizer.SelectedIndex = select_indx; }
public VocaloidDriver( RendererKind kind ) { this.kind = kind; }