Пример #1
0
		private static void DrawDebugWindow()
		{
			//ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new Vector2(5, 0));
			if (ImGui.Begin("MIDIBARD DEBUG", ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.AlwaysAutoResize))
			{
				try
				{
					ImGui.TextUnformatted($"AgentModule: {AgentManager.AgentModule.ToInt64():X}");
					ImGui.SameLine();
					if (ImGui.SmallButton("C##AgentModule")) ImGui.SetClipboardText($"{AgentManager.AgentModule.ToInt64():X}");

					ImGui.TextUnformatted($"UiModule: {AgentManager.UiModule.ToInt64():X}");
					ImGui.SameLine();
					if (ImGui.SmallButton("C##4")) ImGui.SetClipboardText($"{AgentManager.UiModule.ToInt64():X}");
					ImGui.TextUnformatted($"AgentCount:{AgentManager.Agents.Count}");
				}
				catch (Exception e)
				{
					ImGui.TextUnformatted(e.ToString());
				}

				ImGui.Separator();
				try
				{
					ImGui.TextUnformatted($"AgentPerformance: {PerformanceAgent.Pointer.ToInt64():X}");
					ImGui.SameLine();
					if (ImGui.SmallButton("C##AgentPerformance")) ImGui.SetClipboardText($"{PerformanceAgent.Pointer.ToInt64():X}");

					ImGui.TextUnformatted($"AgentID: {PerformanceAgent.Id}");

					ImGui.TextUnformatted($"notePressed: {notePressed}");
					ImGui.TextUnformatted($"noteNumber: {noteNumber}");
					ImGui.TextUnformatted($"InPerformanceMode: {InPerformanceMode}");
					ImGui.TextUnformatted($"Timer1: {TimeSpan.FromMilliseconds(PerformanceTimer1)}");
					ImGui.TextUnformatted($"Timer2: {TimeSpan.FromTicks(PerformanceTimer2 * 10)}");
				}
				catch (Exception e)
				{
					ImGui.TextUnformatted(e.ToString());
				}

				ImGui.Separator();

				try
				{
					ImGui.TextUnformatted($"AgentMetronome: {MetronomeAgent.Pointer.ToInt64():X}");
					ImGui.SameLine();
					if (ImGui.SmallButton("C##AgentMetronome")) ImGui.SetClipboardText($"{MetronomeAgent.Pointer.ToInt64():X}");
					ImGui.TextUnformatted($"AgentID: {MetronomeAgent.Id}");


					ImGui.TextUnformatted($"Running: {MetronomeRunning}");
					ImGui.TextUnformatted($"Ensemble: {EnsembleModeRunning}");
					ImGui.TextUnformatted($"BeatsElapsed: {MetronomeBeatsElapsed}");
					ImGui.TextUnformatted($"PPQN: {MetronomePPQN} ({60_000_000 / (double)MetronomePPQN:F3}bpm)");
					ImGui.TextUnformatted($"BeatsPerBar: {MetronomeBeatsperBar}");
					ImGui.TextUnformatted($"Timer1: {TimeSpan.FromMilliseconds(MetronomeTimer1)}");
					ImGui.TextUnformatted($"Timer2: {TimeSpan.FromTicks(MetronomeTimer2 * 10)}");
				}
				catch (Exception e)
				{
					ImGui.TextUnformatted(e.ToString());
				}



				ImGui.Separator();
				try
				{
					ImGui.TextUnformatted($"PerformInfos: {PerformInfos.ToInt64() + 3:X}");
					ImGui.SameLine();
					if (ImGui.SmallButton("C##PerformInfos")) ImGui.SetClipboardText($"{PerformInfos.ToInt64() + 3:X}");
					ImGui.TextUnformatted($"CurrentInstrumentKey: {CurrentInstrument}");
					ImGui.TextUnformatted($"Instrument: {InstrumentSheet.GetRow(CurrentInstrument).Instrument}");
					ImGui.TextUnformatted($"Name: {InstrumentSheet.GetRow(CurrentInstrument).Name.RawString}");
					ImGui.TextUnformatted($"Tone: {CurrentGroupTone}");
					//ImGui.Text($"unkFloat: {UnkFloat}");
					////ImGui.Text($"unkByte: {UnkByte1}");
				}
				catch (Exception e)
				{
					ImGui.TextUnformatted(e.ToString());
				}

				ImGui.Separator();
				ImGui.TextUnformatted($"currentPlaying: {PlaylistManager.CurrentPlaying}");
				ImGui.TextUnformatted($"currentSelected: {PlaylistManager.CurrentSelected}");
				ImGui.TextUnformatted($"FilelistCount: {PlaylistManager.Filelist.Count}");
				ImGui.TextUnformatted($"currentUILanguage: {pluginInterface.UiLanguage}");

				ImGui.Separator();
				try
				{
					//var devicesList = DeviceManager.Devices.Select(i => i.ToDeviceString()).ToArray();


					//var inputDevices = DeviceManager.Devices;
					////ImGui.BeginListBox("##auofhiao", new Vector2(-1, ImGui.GetTextLineHeightWithSpacing()* (inputDevices.Length + 1)));
					//if (ImGui.BeginCombo("Input Device", DeviceManager.CurrentInputDevice.ToDeviceString()))
					//{
					//	if (ImGui.Selectable("None##device", DeviceManager.CurrentInputDevice is null))
					//	{
					//		DeviceManager.DisposeDevice();
					//	}
					//	for (int i = 0; i < inputDevices.Length; i++)
					//	{
					//		var device = inputDevices[i];
					//		if (ImGui.Selectable($"{device.Name}##{i}", device.Id == DeviceManager.CurrentInputDevice?.Id))
					//		{
					//			DeviceManager.SetDevice(device);
					//		}
					//	}
					//	ImGui.EndCombo();
					//}



					//ImGui.EndListBox();

					//if (ImGui.ListBox("##????", ref InputDeviceID, devicesList, devicesList.Length))
					//{
					//	if (InputDeviceID == 0)
					//	{
					//		DeviceManager.DisposeDevice();
					//	}
					//	else
					//	{
					//		DeviceManager.SetDevice(InputDevice.GetByName(devicesList[InputDeviceID]));
					//	}
					//}

					if (ImGui.SmallButton("Start Event Listening"))
					{
						DeviceManager.CurrentInputDevice?.StartEventsListening();
					}
					ImGui.SameLine();
					if (ImGui.SmallButton("Stop Event Listening"))
					{
						DeviceManager.CurrentInputDevice?.StopEventsListening();
					}

					ImGui.TextUnformatted($"InputDevices: {InputDevice.GetDevicesCount()}\n{string.Join("\n", InputDevice.GetAll().Select(i => $"[{i.Id}] {i.Name}"))}");
					ImGui.TextUnformatted($"OutputDevices: {OutputDevice.GetDevicesCount()}\n{string.Join("\n", OutputDevice.GetAll().Select(i => $"[{i.Id}] {i.Name}({i.DeviceType})"))}");

					ImGui.TextUnformatted($"CurrentInputDevice: \n{DeviceManager.CurrentInputDevice} Listening: {DeviceManager.CurrentInputDevice?.IsListeningForEvents}");
					ImGui.TextUnformatted($"CurrentOutputDevice: \n{CurrentOutputDevice}");
				}
				catch (Exception e)
				{
					PluginLog.Error(e.ToString());
				}

				#region Generator

				//ImGui.Separator();

				//if (ImGui.BeginChild("Generate", new Vector2(size - 5, 150), false, ImGuiWindowFlags.NoDecoration))
				//{
				//	ImGui.DragInt("length##keyboard", ref config.testLength, 0.05f);
				//	ImGui.DragInt("interval##keyboard", ref config.testInterval, 0.05f);
				//	ImGui.DragInt("repeat##keyboard", ref config.testRepeat, 0.05f);
				//	if (config.testLength < 0)
				//	{
				//		config.testLength = 0;
				//	}

				//	if (config.testInterval < 0)
				//	{
				//		config.testInterval = 0;
				//	}

				//	if (config.testRepeat < 0)
				//	{
				//		config.testRepeat = 0;
				//	}

				//	if (ImGui.Button("generate##keyboard"))
				//	{
				//		try
				//		{
				//			testplayback?.Dispose();

				//		}
				//		catch (Exception e)
				//		{
				//			//
				//		}

				//		static Pattern GetSequence(int octave)
				//		{
				//			return new PatternBuilder()
				//				.SetRootNote(Note.Get(NoteName.C, octave))
				//				.SetNoteLength(new MetricTimeSpan(0, 0, 0, config.testLength))
				//				.SetStep(new MetricTimeSpan(0, 0, 0, config.testInterval))
				//				.Note(Interval.Zero)
				//				.StepForward()
				//				.Note(Interval.One)
				//				.StepForward()
				//				.Note(Interval.Two)
				//				.StepForward()
				//				.Note(Interval.Three)
				//				.StepForward()
				//				.Note(Interval.Four)
				//				.StepForward()
				//				.Note(Interval.Five)
				//				.StepForward()
				//				.Note(Interval.Six)
				//				.StepForward()
				//				.Note(Interval.Seven)
				//				.StepForward()
				//				.Note(Interval.Eight)
				//				.StepForward()
				//				.Note(Interval.Nine)
				//				.StepForward()
				//				.Note(Interval.Ten)
				//				.StepForward()
				//				.Note(Interval.Eleven)
				//				.StepForward().Build();
				//		}

				//		static Pattern GetSequenceDown(int octave)
				//		{
				//			return new PatternBuilder()
				//				.SetRootNote(Note.Get(NoteName.C, octave))
				//				.SetNoteLength(new MetricTimeSpan(0, 0, 0, config.testLength))
				//				.SetStep(new MetricTimeSpan(0, 0, 0, config.testInterval))
				//				.Note(Interval.Eleven)
				//				.StepForward()
				//				.Note(Interval.Ten)
				//				.StepForward()
				//				.Note(Interval.Nine)
				//				.StepForward()
				//				.Note(Interval.Eight)
				//				.StepForward()
				//				.Note(Interval.Seven)
				//				.StepForward()
				//				.Note(Interval.Six)
				//				.StepForward()
				//				.Note(Interval.Five)
				//				.StepForward()
				//				.Note(Interval.Four)
				//				.StepForward()
				//				.Note(Interval.Three)
				//				.StepForward()
				//				.Note(Interval.Two)
				//				.StepForward()
				//				.Note(Interval.One)
				//				.StepForward()
				//				.Note(Interval.Zero)
				//				.StepForward()
				//				.Build();
				//		}

				//		Pattern pattern = new PatternBuilder()

				//			.SetNoteLength(new MetricTimeSpan(0, 0, 0, config.testLength))
				//			.SetStep(new MetricTimeSpan(0, 0, 0, config.testInterval))

				//			.Pattern(GetSequence(3))
				//			.Pattern(GetSequence(4))
				//			.Pattern(GetSequence(5))
				//			.SetRootNote(Note.Get(NoteName.C, 5))
				//			.StepForward()
				//			.Note(Interval.Twelve)
				//			.Pattern(GetSequenceDown(5))
				//			.Pattern(GetSequenceDown(4))
				//			.Pattern(GetSequenceDown(3))
				//			// Get pattern
				//			.Build();

				//		var repeat = new PatternBuilder().Pattern(pattern).Repeat(config.testRepeat).Build();

				//		testplayback = repeat.ToTrackChunk(TempoMap.Default).GetPlayback(TempoMap.Default, Plugin.CurrentOutputDevice,
				//			new MidiClockSettings() { CreateTickGeneratorCallback = () => new HighPrecisionTickGenerator() });
				//	}

				//	ImGui.SameLine();
				//	if (ImGui.Button("chord##keyboard"))
				//	{
				//		try
				//		{
				//			testplayback?.Dispose();

				//		}
				//		catch (Exception e)
				//		{
				//			//
				//		}

				//		var pattern = new PatternBuilder()
				//			//.SetRootNote(Note.Get(NoteName.C, 3))
				//			//C-G-Am-(G,Em,C/G)-F-(C,Em)-(F,Dm)-G
				//			.SetOctave(Octave.Get(3))
				//			.SetStep(new MetricTimeSpan(0, 0, 0, config.testInterval))
				//			.Chord(Chord.GetByTriad(NoteName.C, ChordQuality.Major)).Repeat(config.testRepeat)
				//			.Chord(Chord.GetByTriad(NoteName.G, ChordQuality.Major)).Repeat(config.testRepeat)
				//			.Chord(Chord.GetByTriad(NoteName.A, ChordQuality.Minor)).Repeat(config.testRepeat)
				//			.Chord(Chord.GetByTriad(NoteName.G, ChordQuality.Major)).Repeat(config.testRepeat)
				//			.Chord(Chord.GetByTriad(NoteName.F, ChordQuality.Major)).Repeat(config.testRepeat)
				//			.Chord(Chord.GetByTriad(NoteName.C, ChordQuality.Major)).Repeat(config.testRepeat)
				//			.Chord(Chord.GetByTriad(NoteName.F, ChordQuality.Major)).Repeat(config.testRepeat)
				//			.Chord(Chord.GetByTriad(NoteName.G, ChordQuality.Major)).Repeat(config.testRepeat)

				//			.Build();

				//		testplayback = pattern.ToTrackChunk(TempoMap.Default).GetPlayback(TempoMap.Default, Plugin.CurrentOutputDevice,
				//			new MidiClockSettings() { CreateTickGeneratorCallback = () => new HighPrecisionTickGenerator() });
				//	}

				//	ImGui.Spacing();
				//	if (ImGui.Button("play##keyboard"))
				//	{
				//		try
				//		{
				//			testplayback?.MoveToStart();
				//			testplayback?.Start();
				//		}
				//		catch (Exception e)
				//		{
				//			PluginLog.Error(e.ToString());
				//		}
				//	}

				//	ImGui.SameLine();
				//	if (ImGui.Button("dispose##keyboard"))
				//	{
				//		try
				//		{
				//			testplayback?.Dispose();
				//		}
				//		catch (Exception e)
				//		{
				//			PluginLog.Error(e.ToString());
				//		}
				//	}

				//	try
				//	{
				//		ImGui.TextUnformatted($"{testplayback.GetDuration(TimeSpanType.Metric)}");
				//	}
				//	catch (Exception e)
				//	{
				//		ImGui.TextUnformatted("null");
				//	}
				//	//ImGui.SetNextItemWidth(120);
				//	//UIcurrentInstrument = Plugin.CurrentInstrument;
				//	//if (ImGui.ListBox("##instrumentSwitch", ref UIcurrentInstrument, InstrumentSheet.Select(i => i.Instrument.ToString()).ToArray(), (int)InstrumentSheet.RowCount, (int)InstrumentSheet.RowCount))
				//	//{
				//	//	Task.Run(() => SwitchInstrument.SwitchTo((uint)UIcurrentInstrument));
				//	//}

				//	//if (ImGui.Button("Quit"))
				//	//{
				//	//	Task.Run(() => SwitchInstrument.SwitchTo(0));
				//	//}

				//	ImGui.EndChild();
				//}

				#endregion

				ImGui.End();
			}
			//ImGui.PopStyleVar();

		}
Пример #2
0
		private static unsafe void DrawProgressBar()
		{
			ImGui.PushStyleColor(ImGuiCol.PlotHistogram, 0x9C60FF8E);
			//ImGui.PushStyleColor(ImGuiCol.FrameBg, 0x800000A0);



			MetricTimeSpan currentTime = new MetricTimeSpan(0);
			MetricTimeSpan duration = new MetricTimeSpan(0);
			float progress = 0;

			if (currentPlayback != null)
			{
				currentTime = currentPlayback.GetCurrentTime<MetricTimeSpan>();
				duration = currentPlayback.GetDuration<MetricTimeSpan>();
				try
				{
					progress = (float)currentTime.Divide(duration);
				}
				catch (Exception e)
				{
					//
				}

				ImGui.PushStyleColor(ImGuiCol.FrameBg, 0xAC104020);
				ImGui.ProgressBar(progress, new Vector2(-1, 3));
				ImGui.PopStyleColor();
			}
			else
			{
				ImGui.ProgressBar(progress, new Vector2(-1, 3));
			}

			ImGui.TextUnformatted($"{currentTime.Hours}:{currentTime.Minutes:00}:{currentTime.Seconds:00}");
			var durationText = $"{duration.Hours}:{duration.Minutes:00}:{duration.Seconds:00}";
			ImGui.SameLine(ImGui.GetWindowContentRegionWidth() - ImGui.CalcTextSize(durationText).X);
			ImGui.TextUnformatted(durationText);
			try
			{
				var currentInstrument = PlayingGuitar && !config.OverrideGuitarTones ? (uint)(24 + CurrentGroupTone) : CurrentInstrument;

				string currentInstrumentText;
				if (currentInstrument != 0)
				{
					currentInstrumentText = InstrumentSheet.GetRow(currentInstrument).Instrument;
					if (PlayingGuitar && config.OverrideGuitarTones)
					{
						currentInstrumentText = currentInstrumentText.Split(':', ':').First()+": Auto";
					}
				}
				else
				{
					currentInstrumentText = string.Empty;
				}

				ImGui.SameLine((ImGui.GetWindowContentRegionWidth() - ImGui.CalcTextSize(currentInstrumentText).X) / 2);
				ImGui.TextUnformatted(currentInstrumentText);
			}
			catch (Exception e)
			{
				//
			}

			ImGui.PopStyleColor();
		}
Пример #3
0
        public unsafe void Draw()
        {
            if (!IsVisible)
            {
                return;
            }

            //var Buttoncolor = *ImGui.GetStyleColorVec4(ImGuiCol.Button);
            //var ButtonHoveredcolor = *ImGui.GetStyleColorVec4(ImGuiCol.ButtonHovered);
            //var ButtonActivecolor = *ImGui.GetStyleColorVec4(ImGuiCol.ButtonActive);


            ImGui.PushStyleVar(ImGuiStyleVar.WindowPadding, new Vector2(5, 5));
            ImGui.SetNextWindowPos(new Vector2(100, 100), ImGuiCond.FirstUseEver);
            ImGui.SetNextWindowSize(new Vector2(400, 400), ImGuiCond.FirstUseEver);
            //ImGui.SetNextWindowSizeConstraints(new Vector2(356, 10), config.miniPlayer ? new Vector2(356, 100) : new Vector2(10000, 10000));
            var flag = config.miniPlayer ? ImGuiWindowFlags.NoDecoration : ImGuiWindowFlags.None;

            if (config.miniPlayer)
            {
                ImGui.SetNextWindowSizeConstraints(Vector2.Zero, new Vector2(357, 800));
            }
            if (ImGui.Begin("MidiBard", ref IsVisible,
                            ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.AlwaysAutoResize | flag))
            {
                if (!config.miniPlayer)
                {
                    ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(4, 4));
                    ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new Vector2(15, 4));
                    {
                        if (!_isImportRunning)
                        {
                            DrawImportButton();
                            ToolTip("Import midi file.".Localize());
                        }
                        else
                        {
                            DrawImportProgress();
                        }

                        if (_hasError)
                        {
                            DrawFailedImportMessage();
                        }

                        //ImGui.SameLine();
                        //if (ImGui.Button("Remove Selected"))
                        //{
                        //	PlaylistManager.Remove(PlaylistManager.currentPlaying);
                        //}

                        ImGui.SameLine();
                        if (ImGui.Button("Clear Playlist".Localize()))
                        {
                            PlaylistManager.Clear();
                        }

                        if (localizer.Language == UILang.CN)
                        {
                            ImGui.SameLine();
                            ImGui.PushFont(UiBuilder.IconFont);
                            if (ImGui.Button(FontAwesomeIcon.QuestionCircle.ToIconString()))
                            {
                                //config.showHelpWindow ^= true;
                            }

                            ImGui.PopFont();

                            if (ImGui.IsItemHovered())
                            {
                                var currentwindowpos = ImGui.GetWindowPos();
                                var width            = ImGui.GetWindowWidth();
                                ImGui.SetNextWindowPos(currentwindowpos + new Vector2(0,
                                                                                      ImGui.GetTextLineHeightWithSpacing() + ImGui.GetFrameHeightWithSpacing() +
                                                                                      ImGui.GetStyle().WindowPadding.Y));
                                ImGui.SetNextWindowSizeConstraints(new Vector2(width, 0), new Vector2(10000, 10000));
                                ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new Vector2(4, 4));
                                if (ImGui.Begin("HelpWindow",
                                                ImGuiWindowFlags.NoDecoration | ImGuiWindowFlags.Tooltip |
                                                ImGuiWindowFlags.AlwaysAutoResize))
                                {
                                    ImGui.BulletText(
                                        "如何开始使用MIDIBARD演奏?" +
                                        "\n MIDIBARD窗口默认在角色进入演奏模式后自动弹出。" +
                                        "\n 点击窗口左上角的“+”按钮来将乐曲文件导入到播放列表,仅支持.mid格式的乐曲。" +
                                        "\n 导入时按Ctrl或Shift可以选择多个文件一同导入。" +
                                        "\n 双击播放列表中要演奏的乐曲后点击播放按钮开始演奏。\n");
                                    ImGui.BulletText(
                                        "为什么点击播放之后没有正常演奏?" +
                                        "\n MIDIBARD仅使用37键演奏模式。" +
                                        "\n 请在游戏“乐器演奏操作设置”的“键盘操作”类别下启用“全音阶一同显示、设置按键”的选项。\n");
                                    ImGui.BulletText(
                                        "如何使用MIDIBARD进行多人合奏?" +
                                        "\n MIDIBARD使用游戏中的合奏助手来完成合奏,请在合奏时打开游戏的节拍器窗口。" +
                                        "\n 合奏前在播放列表中双击要合奏的乐曲,播放器下方会出现可供演奏的所有音轨,请为每位合奏成员分别选择其需要演奏的音轨。" +
                                        "\n 选择音轨后队长点击节拍器窗口的“合奏准备确认”按钮," +
                                        "\n 并确保合奏准备确认窗口中已勾选“使用合奏助手”选项后点击开始即可开始合奏。" +
                                        "\n 注:节拍器前两小节为准备时间,从第1小节开始会正式开始合奏。" +
                                        "\n   考虑到不同使用环境乐曲加载速度可能不一致,为了避免切换乐曲导致的不同步,在乐曲结束时合奏会自动停止。\n");
                                    ImGui.BulletText(
                                        "后台演奏时有轻微卡顿不流畅怎么办?" +
                                        "\n 在游戏内“系统设置→显示设置→帧数限制”中取消勾选 “程序在游戏窗口处于非激活状态时限制帧数” 的选项并应用设置。\n");
                                    ImGui.Spacing();

                                    ImGui.End();
                                }

                                ImGui.PopStyleVar();
                            }
                        }

                        if (EnsembleModeRunning)
                        {
                            ImGui.SameLine();
                            if (MetronomeBeatsElapsed < 0)
                            {
                                ImGui.PushStyleColor(ImGuiCol.Button, 0xFF00A0D0);
                                ImGui.Button("Ensemble Mode Preparing".Localize());
                            }
                            else
                            {
                                ImGui.PushStyleColor(ImGuiCol.Button, 0xFF0000D0);
                                ImGui.Button("Ensemble Mode Running".Localize());
                            }

                            ImGui.PopStyleColor();
                        }
                    }

                    ImGui.PopStyleVar(2);



                    if (PlaylistManager.Filelist.Count == 0)
                    {
                        if (ImGui.Button("Import midi files to start performing!".Localize(), new Vector2(-1, 25)))
                        {
                            RunImportTask();
                        }
                    }
                    else
                    {
                        ImGui.PushStyleColor(ImGuiCol.Button, 0);
                        ImGui.PushStyleColor(ImGuiCol.ButtonHovered, 0);
                        ImGui.PushStyleColor(ImGuiCol.ButtonActive, 0);
                        ImGui.PushStyleColor(ImGuiCol.Header, 0x3C60FF8E);
                        ImGui.PushStyleColor(ImGuiCol.HeaderHovered, 0x80808080);
                        if (ImGui.BeginTable("##PlaylistTable", 3,
                                             ImGuiTableFlags.RowBg | ImGuiTableFlags.PadOuterX |
                                             ImGuiTableFlags.ScrollY | ImGuiTableFlags.NoSavedSettings | ImGuiTableFlags.BordersInnerV | ImGuiTableFlags.ContextMenuInBody,
                                             new Vector2(-1,
                                                         ImGui.GetTextLineHeightWithSpacing() * Math.Min(config.playlistSizeY,
                                                                                                         PlaylistManager.Filelist.Count)
                                                         )))
                        {
                            ImGui.TableSetupColumn("\ue035", ImGuiTableColumnFlags.WidthFixed);
                            ImGui.TableSetupColumn("##delete", ImGuiTableColumnFlags.WidthFixed);
                            ImGui.TableSetupColumn("filename", ImGuiTableColumnFlags.WidthStretch);
                            for (var i = 0; i < PlaylistManager.Filelist.Count; i++)
                            {
                                ImGui.TableNextRow();
                                ImGui.TableSetColumnIndex(0);
                                if (ImGui.Selectable($"{i + 1:000}##plistitem", PlaylistManager.CurrentPlaying == i,
                                                     ImGuiSelectableFlags.SpanAllColumns | ImGuiSelectableFlags.AllowDoubleClick |
                                                     ImGuiSelectableFlags.AllowItemOverlap))
                                {
                                    if (ImGui.IsMouseDoubleClicked(ImGuiMouseButton.Left))
                                    {
                                        PlaylistManager.CurrentPlaying = i;

                                        try
                                        {
                                            var wasplaying = IsPlaying;
                                            currentPlayback?.Dispose();
                                            currentPlayback = null;

                                            currentPlayback = PlaylistManager.Filelist[PlaylistManager.CurrentPlaying].GetFilePlayback();
                                            if (wasplaying)
                                            {
                                                currentPlayback?.Start();
                                            }
                                            Task.Run(SwitchInstrument.WaitSwitchInstrument);
                                        }
                                        catch (Exception e)
                                        {
                                            //
                                        }
                                    }
                                    else
                                    {
                                        PlaylistManager.CurrentSelected = i;
                                    }
                                }

                                ImGui.TableNextColumn();
                                ImGui.PushFont(UiBuilder.IconFont);
                                ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, Vector2.Zero);
                                if (ImGui.Button($"{((FontAwesomeIcon)0xF2ED).ToIconString()}##{i}", new Vector2(ImGui.GetTextLineHeight(), ImGui.GetTextLineHeight())))
                                {
                                    PlaylistManager.Remove(i);
                                }
                                ImGui.PopStyleVar();
                                ImGui.PopFont();
                                ImGui.TableNextColumn();
                                try
                                {
                                    ImGui.Text(PlaylistManager.Filelist[i].Item2);
                                }
                                catch (Exception e)
                                {
                                    ImGui.Text("deleted");
                                }
                            }

                            ImGui.EndTable();
                        }

                        ImGui.PopStyleColor(5);
                    }

                    #region old playlist

                    //ImGui.BeginListBox("##PlayList1", new Vector2(-1, ImGui.GetTextLineHeightWithSpacing() * maxItems));
                    //{
                    //	var i = 0;
                    //	foreach (var tuple in PlaylistManager.Filelist)
                    //	{
                    //		if (PlaylistManager.currentPlaying == i)
                    //		{
                    //			ImGui.PushStyleColor(ImGuiCol.Text, config.ThemeColor);
                    //		}

                    //		if (ImGui.Selectable($"{tuple.Item2}##{i}", PlaylistManager.currentSelected[i], ImGuiSelectableFlags.AllowDoubleClick))
                    //		{

                    //		}
                    //		if (PlaylistManager.currentPlaying == i)
                    //		{
                    //			ImGui.PopStyleColor();
                    //		}
                    //		i++;
                    //	}
                    //}
                    //ImGui.EndListBox();
                    //ImGui.Text(sb.ToString());

                    //if (ImGui.ListBox("##PlayList", ref PlaylistManager.currentPlaying, items, itemsCount, maxItems))
                    //{
                    //	var wasplaying = IsPlaying;
                    //	currentPlayback?.Dispose();

                    //	try
                    //	{
                    //		currentPlayback = PlaylistManager.Filelist[PlaylistManager.currentPlaying].Item1.GetPlayback();
                    //		if (wasplaying) currentPlayback?.Start();
                    //	}
                    //	catch (Exception e)
                    //	{

                    //	}
                    //}

                    #endregion

                    ImGui.Spacing();
                }

                DrawCurrentPlaying();

                ImGui.Spacing();

                DrawProgressBar();

                ImGui.Spacing();

                ImGui.PushFont(UiBuilder.IconFont);
                ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(4, 4));
                ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new Vector2(15, 4));
                {
                    DrawButtonPlayPause();
                    DrawButtonStop();
                    DrawButtonFastForward();
                    DrawButtonPlayMode();
                    DrawButtonShowSettingsPanel();
                    DrawButtonShowInstrumentSwitch();
                    DrawButtonMiniPlayer();
                }
                ImGui.PopFont();
                ImGui.PopStyleVar(2);

                if (config.showMusicControlPanel)
                {
                    DrawTrackTrunkSelectionWindow();
                    ImGui.Separator();
                    DrawPanelMusicControl();
                    //}
                    //if (config.showSettingsPanel)
                    //{
                    ImGui.Separator();
                    DrawPanelGeneralSettings();
                }
                if (Debug)
                {
                    DrawDebugWindow();
                }

                var size = ImGui.GetWindowSize();
                var pos  = ImGui.GetWindowPos();
                var vp   = ImGui.GetWindowViewport();



                //ImGui.SetNextWindowViewport(vp.ID);
                ImGui.SetNextWindowPos(pos + new Vector2(size.X + 1, 0));
                //ImGui.SetNextWindowSizeConstraints(Vector2.Zero, size);
                if (config.showInstrumentSwitchWindow && ImGui.Begin("Instrument".Localize(), ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoFocusOnAppearing | ImGuiWindowFlags.NoBringToFrontOnFocus | ImGuiWindowFlags.NoMove | ImGuiWindowFlags.AlwaysAutoResize))
                {
                    ImGui.SetNextItemWidth(120);
                    UIcurrentInstrument = Plugin.CurrentInstrument;
                    if (ImGui.ListBox("##instrumentSwitch", ref UIcurrentInstrument,
                                      InstrumentSheet.Select(i => i.Instrument.ToString()).ToArray(), (int)InstrumentSheet.RowCount,
                                      (int)InstrumentSheet.RowCount))
                    {
                        Task.Run(() => SwitchInstrument.SwitchTo((uint)UIcurrentInstrument));
                    }

                    //if (ImGui.Button("Quit"))
                    //{
                    //	Task.Run(() => SwitchInstrument.SwitchTo(0));
                    //}
                    ImGui.End();
                }

                ImGui.End();
            }

            ImGui.PopStyleVar();
        }
Пример #4
0
        private static void DrawDebugWindow()
        {
            ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new Vector2(5, 0));
            //ImGui.SetNextWindowSize(new Vector2(500, 800));
            ImGui.Begin("MIDIBARD DEBUG", ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoTitleBar);
            ImGui.Columns(2);
            ImGui.SetColumnWidth(0, ImGui.GetWindowContentRegionWidth() - 130);
            ImGui.BeginChild("childleft", ImGui.GetContentRegionAvail(), false);
            try
            {
                ImGui.Text($"AgentModule: {AgentManager.AgentModule.ToInt64():X}");
                ImGui.SameLine();
                if (ImGui.Button("C##3"))
                {
                    ImGui.SetClipboardText($"{AgentManager.AgentModule.ToInt64():X}");
                }

                ImGui.Text($"UiModule: {AgentManager.UiModule.ToInt64():X}");
                ImGui.SameLine();
                if (ImGui.Button("C##4"))
                {
                    ImGui.SetClipboardText($"{AgentManager.UiModule.ToInt64():X}");
                }
                ImGui.Text($"AgentCount:{AgentManager.Agents.Count}");
            }
            catch (Exception e)
            {
                ImGui.Text(e.ToString());
            }

            ImGui.Separator();

            try
            {
                ImGui.Text($"AgentMetronome: {MetronomeAgent.Pointer.ToInt64():X}");
                ImGui.SameLine();
                if (ImGui.Button("C##1"))
                {
                    ImGui.SetClipboardText($"{MetronomeAgent.Pointer.ToInt64():X}");
                }
                ImGui.Text($"AgentID: {MetronomeAgent.Id}");


                ImGui.Text($"Running: {MetronomeRunning}");
                ImGui.Text($"Ensemble: {EnsembleModeRunning}");
                ImGui.Text($"BeatsElapsed: {MetronomeBeatsElapsed}");
                ImGui.Text($"TickRate: {MetronomeTickRate} ({60_000_000 / (double)MetronomeTickRate:F3})");
                ImGui.Text($"BeatsPerBar: {MetronomeBeatsperBar}");
                ImGui.Text($"Timer1: {TimeSpan.FromMilliseconds(MetronomeTimer1)}");
                ImGui.Text($"Timer2: {TimeSpan.FromTicks(MetronomeTimer2 * 10)}");
            }
            catch (Exception e)
            {
                ImGui.Text(e.ToString());
            }

            ImGui.Separator();
            try
            {
                ImGui.Text($"AgentPerformance: {PerformanceAgent.Pointer.ToInt64():X}");
                ImGui.SameLine();
                if (ImGui.Button("C##2"))
                {
                    ImGui.SetClipboardText($"{PerformanceAgent.Pointer.ToInt64():X}");
                }

                ImGui.Text($"AgentID: {PerformanceAgent.Id}");

                ImGui.Text($"notePressed: {notePressed}");
                ImGui.Text($"noteNumber: {noteNumber}");
                ImGui.Text($"InPerformanceMode: {InPerformanceMode}");
                ImGui.Text($"Timer1: {TimeSpan.FromMilliseconds(PerformanceTimer1)}");
                ImGui.Text($"Timer2: {TimeSpan.FromTicks(PerformanceTimer2 * 10)}");
            }
            catch (Exception e)
            {
                ImGui.Text(e.ToString());
            }

            ImGui.Separator();
            ImGui.Text($"currentPlaying: {PlaylistManager.CurrentPlaying}");
            ImGui.Text($"currentSelected: {PlaylistManager.CurrentSelected}");
            ImGui.Text($"FilelistCount: {PlaylistManager.Filelist.Count}");
            ImGui.Text($"currentUILanguage: {pluginInterface.UiLanguage}");
            ImGui.Separator();
            try
            {
                ImGui.Text($"CurrentInstrumentKey: {CurrentInstrument}");
                //if (CurrentInstrument != 0)
                {
                    ImGui.Text($"Instrument: {InstrumentSheet.GetRow(CurrentInstrument).Instrument}");
                    ImGui.Text($"Name: {InstrumentSheet.GetRow(CurrentInstrument).Name.RawString}");
                }
                //ImGui.Text($"unkFloat: {UnkFloat}");
                //ImGui.Text($"unkByte: {UnkByte1}");
            }
            catch (Exception e)
            {
                ImGui.Text(e.ToString());
            }

            ImGui.EndChild();
            ImGui.NextColumn();
            ImGui.BeginChild("childright", ImGui.GetContentRegionAvail(), false);

            //ImGui.SetNextItemWidth(120);
            //UIcurrentInstrument = Plugin.CurrentInstrument;
            //if (ImGui.ListBox("##instrumentSwitch", ref UIcurrentInstrument, InstrumentSheet.Select(i => i.Instrument.ToString()).ToArray(), (int)InstrumentSheet.RowCount, (int)InstrumentSheet.RowCount))
            //{
            //	Task.Run(() => SwitchInstrument.SwitchTo((uint)UIcurrentInstrument));
            //}

            //if (ImGui.Button("Quit"))
            //{
            //	Task.Run(() => SwitchInstrument.SwitchTo(0));
            //}
            ImGui.EndChild();
            ImGui.End();
            ImGui.PopStyleVar();
        }
Пример #5
0
        private static unsafe void DrawProgressBar()
        {
            ImGui.PushStyleColor(ImGuiCol.PlotHistogram, 0x9C60FF8E);
            //ImGui.PushStyleColor(ImGuiCol.FrameBg, 0x800000A0);
            if (currentPlayback != null)
            {
                var   currentTime = currentPlayback.GetCurrentTime <MetricTimeSpan>();
                var   duration    = currentPlayback.GetDuration <MetricTimeSpan>();
                float progress;
                try
                {
                    progress = (float)currentTime.Divide(duration);
                }
                catch (Exception e)
                {
                    progress = 0;
                }

                ImGui.PushStyleColor(ImGuiCol.FrameBg, 0xAC104020);
                ImGui.ProgressBar(progress, new Vector2(-1, 3));
                ImGui.PopStyleColor();

                ImGui.Text($"{currentTime.Hours}:{currentTime.Minutes:00}:{currentTime.Seconds:00}");
                var fmt = $"{duration.Hours}:{duration.Minutes:00}:{duration.Seconds:00}";
                ImGui.SameLine(ImGui.GetWindowContentRegionWidth() - ImGui.CalcTextSize(fmt).X);
                ImGui.Text(fmt);

                try
                {
                    var text = CurrentInstrument != 0 ? InstrumentSheet.GetRow(CurrentInstrument).Instrument : string.Empty;
                    var size = ImGui.CalcTextSize(text);
                    ImGui.SameLine((ImGui.GetWindowContentRegionWidth() - size.X) / 2);
                    ImGui.Text(text);
                }
                catch (Exception e)
                {
                    //
                }
            }
            else
            {
                ImGui.ProgressBar(0, new Vector2(-1, 3));
                ImGui.Text("0:00:00");
                ImGui.SameLine(ImGui.GetWindowContentRegionWidth() - ImGui.GetItemRectSize().X);
                ImGui.Text("0:00:00");

                try
                {
                    var text = CurrentInstrument != 0 ? InstrumentSheet.GetRow(CurrentInstrument).Instrument : string.Empty;
                    var size = ImGui.CalcTextSize(text);
                    ImGui.SameLine((ImGui.GetWindowContentRegionWidth() - size.X) / 2);
                    ImGui.Text(text);
                }
                catch (Exception e)
                {
                    //
                }
            }

            ImGui.PopStyleColor();
        }