public ChordMagicianWindow(Vst.Plugin plugin, Score score) { InitializeComponent(); DataContext = _viewModel = new ChordMagicianViewModel(_api, plugin, score); _viewModel.ChordChanged += OnChordChanged; }
public void Restore(Vst.Plugin target) { target.Name = Name; target.ChannelNum = ChannelNum; target.Volume = Volume; target.Panning = Panning; target.Mute = Mute; target.LoadParameters(Parameters); }
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(); }
/// <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(); } }
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); }
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); }
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; } }
private bool[] this[Vst.Plugin plugin] { get { if (_maskTable.TryGetValue(plugin, out bool[] noteMask))
public PianoRollWorkspaceKey(Vst.Plugin plugin) : base(plugin) { }
/// <summary> /// 새로운 PluginEditorHost 인스턴스를 생성합니다. /// </summary> /// <param name="plugin">편집기를 열 VST 플러그인</param> public PluginEditorHost(Vst.Plugin plugin) { _pluginCmdStub = plugin.PluginCommandStub; }
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--; }
public PluginEditorWindow(Vst.Plugin plugin) { Plugin = plugin ?? throw new ArgumentNullException(nameof(plugin)); InitializeComponent(); }
/// <summary> /// 주어진 VST 플러그인의 편집기 창을 닫습니다. /// 해당하는 창이 열려있지 않은 경우 아무런 동작도 수행하지 않습니다. /// </summary> /// <param name="plugin">VST 플러그인</param> public void CloseEditor(Vst.Plugin plugin) { _table.TryGetValue(plugin, out PluginEditorWindow window); window?.Close(); }