Пример #1
0
        public ChordMagicianWindow(Vst.Plugin plugin, Score score)
        {
            InitializeComponent();

            DataContext              = _viewModel = new ChordMagicianViewModel(_api, plugin, score);
            _viewModel.ChordChanged += OnChordChanged;
        }
Пример #2
0
        public void Restore(Vst.Plugin target)
        {
            target.Name       = Name;
            target.ChannelNum = ChannelNum;
            target.Volume     = Volume;
            target.Panning    = Panning;
            target.Mute       = Mute;

            target.LoadParameters(Parameters);
        }
Пример #3
0
 public Plugin(int id, Vst.Plugin source)
 {
     Id         = id;
     Name       = source.Name;
     PluginPath = source.PluginPath;
     ChannelNum = source.ChannelNum;
     Volume     = source.Volume;
     Panning    = source.Panning;
     Mute       = source.Mute;
     Parameters = source.DumpParameters();
 }
Пример #4
0
        /// <summary>
        /// 주어진 VST 플러그인의 편집기 창을 엽니다.
        /// 창이 열려있지 않은 경우에는 새로운 창 인스턴스가 생성되고,
        /// 이미 열려있는 경우에는 기존의 창을 활성화합니다.
        /// </summary>
        /// <param name="plugin">VST 플러그인</param>
        public void OpenEditor(Vst.Plugin plugin)
        {
            if (_table.TryGetValue(plugin, out PluginEditorWindow window))
            {
                // 이미 열려있는 창을 활성화
                window.Activate();
            }
            else
            {
                // 새로운 창 인스턴스 생성 후 열기
                PluginEditorWindow newWindow = new PluginEditorWindow(plugin);
                newWindow.Closed += PluginWindow_Closed;
                _table.Add(plugin, newWindow);

                newWindow.Show();
            }
        }
Пример #5
0
        public void Restore(Vst.Plugin target)
        {
            target.Name       = Name;
            target.ChannelNum = ChannelNum;
            target.Volume     = Volume;
            target.Panning    = Panning;
            target.Mute       = Mute;

            if (target.PluginCommandStub.PluginContext.PluginInfo.Flags.HasFlag(VstPluginFlags.ProgramChunks))
            {
                target.PluginCommandStub.SetChunk(Chunk, false);
            }

            target.PluginCommandStub.BeginSetProgram();
            target.PluginCommandStub.SetProgram(ProgramIndex);
            target.PluginCommandStub.EndSetProgram();
            target.LoadParameters(Parameters);
        }
Пример #6
0
        private IDictionary <int, Vst.Plugin> RestorePlugins(ProjectFile file)
        {
            Dictionary <int, Vst.Plugin> pluginTable = new Dictionary <int, Vst.Plugin>();

            _pluginManager.UnloadAll();

            foreach (Plugin plugin in file.Plugins)
            {
                Vst.Plugin p = _pluginManager.AddPlugin(plugin.PluginPath, null);

                if (p == null)
                {
                    // Fail? Open a OpenFileDialog?
                }
                else
                {
                    pluginTable.Add(plugin.Id, p);
                    plugin.Restore(p);
                }
            }

            return(pluginTable);
        }
Пример #7
0
        public Plugin(int id, Vst.Plugin source)
        {
            Id         = id;
            Name       = source.Name;
            PluginPath = source.PluginPath;
            ChannelNum = source.ChannelNum;
            Volume     = source.Volume;
            Panning    = source.Panning;
            Mute       = source.Mute;
            source.PluginCommandStub.GetProgram();
            Parameters = source.DumpParameters();

            if (source.PluginCommandStub.PluginContext.PluginInfo.Flags.HasFlag(VstPluginFlags.ProgramChunks))
            {
                Chunk     = source.PluginCommandStub.GetChunk(false);
                ChunkSize = Chunk.Length;
            }
            else
            {
                Chunk     = new byte[0];
                ChunkSize = 0;
            }
        }
Пример #8
0
 private bool[] this[Vst.Plugin plugin]
 {
     get
     {
         if (_maskTable.TryGetValue(plugin, out bool[] noteMask))
Пример #9
0
 public PianoRollWorkspaceKey(Vst.Plugin plugin) : base(plugin)
 {
 }
Пример #10
0
 /// <summary>
 /// 새로운 PluginEditorHost 인스턴스를 생성합니다.
 /// </summary>
 /// <param name="plugin">편집기를 열 VST 플러그인</param>
 public PluginEditorHost(Vst.Plugin plugin)
 {
     _pluginCmdStub = plugin.PluginCommandStub;
 }
Пример #11
0
        private IEnumerable <int> GetTickIterator(MidiToolkit.Track track, Vst.Plugin plugin, int startPosition)
        {
            IEnumerator <MidiToolkit.MidiEvent> enumerator = track.Iterator().GetEnumerator();

            bool hasNext;
            bool breakLoop = false;

            for (hasNext = enumerator.MoveNext();
                 hasNext && enumerator.Current.AbsoluteTicks < startPosition;
                 hasNext = enumerator.MoveNext())
            {
            }

            int ticks = startPosition;

            while (hasNext)
            {
                while (ticks < enumerator.Current.AbsoluteTicks)
                {
                    if (ticks >= _length)
                    {
                        breakLoop = true;
                        break;
                    }

                    yield return(ticks);

                    ticks++;
                }

                if (breakLoop)
                {
                    break;
                }

                yield return(ticks);

                while (hasNext && enumerator.Current.AbsoluteTicks == ticks)
                {
                    if (enumerator.Current.MidiMessage is MidiToolkit.ChannelMessage cm)
                    {
                        if (cm.Command == MidiToolkit.ChannelCommand.NoteOn)
                        {
                            _masterSequencer.SendNoteOn(plugin, (byte)cm.Data1, (byte)cm.Data2);
                            _pressedNotes[cm.Data1] = true;
                        }
                        else if (cm.Command == MidiToolkit.ChannelCommand.NoteOff)
                        {
                            _masterSequencer.SendNoteOff(plugin, (byte)cm.Data1);
                            _pressedNotes[cm.Data1] = false;
                        }
                    }

                    hasNext = enumerator.MoveNext();
                }

                ticks++;
            }

            for (byte i = 0; i < 128; i++)
            {
                if (_pressedNotes[i])
                {
                    _masterSequencer.SendNoteOff(plugin, i);
                }
            }

            _numOfPlayingScores--;
        }
Пример #12
0
        public PluginEditorWindow(Vst.Plugin plugin)
        {
            Plugin = plugin ?? throw new ArgumentNullException(nameof(plugin));

            InitializeComponent();
        }
Пример #13
0
 /// <summary>
 /// 주어진 VST 플러그인의 편집기 창을 닫습니다.
 /// 해당하는 창이 열려있지 않은 경우 아무런 동작도 수행하지 않습니다.
 /// </summary>
 /// <param name="plugin">VST 플러그인</param>
 public void CloseEditor(Vst.Plugin plugin)
 {
     _table.TryGetValue(plugin, out PluginEditorWindow window);
     window?.Close();
 }