Example #1
0
 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;
 }
Example #2
0
 /// <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; }
 }
Example #3
0
        /// <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;
        }
Example #5
0
 /// <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;
 }
Example #6
0
 public VocaloidDriver( RendererKind kind )
 {
     this.kind = kind;
 }