From ef78f74986c3485ce65ed1f7a11deba7d36138d7 Mon Sep 17 00:00:00 2001 From: sabihoshi Date: Wed, 5 Jan 2022 22:59:20 +0800 Subject: [PATCH] Transpose Piano Sheet as well Fixes #20 --- .../GenshinLyreMidiPlayer.WPF.csproj | 2 +- .../ViewModels/PianoSheetViewModel.cs | 23 +++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/GenshinLyreMidiPlayer.WPF/GenshinLyreMidiPlayer.WPF.csproj b/GenshinLyreMidiPlayer.WPF/GenshinLyreMidiPlayer.WPF.csproj index ec85e8e..2f236ea 100644 --- a/GenshinLyreMidiPlayer.WPF/GenshinLyreMidiPlayer.WPF.csproj +++ b/GenshinLyreMidiPlayer.WPF/GenshinLyreMidiPlayer.WPF.csproj @@ -6,7 +6,7 @@ true GenshinLyreMidiPlayer.WPF.App app.manifest - 2.3.3 + 3.0.0 item_windsong_lyre.ico enable https://github.com/sabihoshi/GenshinLyreMidiPlayer diff --git a/GenshinLyreMidiPlayer.WPF/ViewModels/PianoSheetViewModel.cs b/GenshinLyreMidiPlayer.WPF/ViewModels/PianoSheetViewModel.cs index 7ee64f3..05b6a12 100644 --- a/GenshinLyreMidiPlayer.WPF/ViewModels/PianoSheetViewModel.cs +++ b/GenshinLyreMidiPlayer.WPF/ViewModels/PianoSheetViewModel.cs @@ -6,6 +6,7 @@ using Melanchall.DryWetMidi.Interaction; using PropertyChanged; using Stylet; +using static GenshinLyreMidiPlayer.WPF.Core.LyrePlayer.Transpose; namespace GenshinLyreMidiPlayer.WPF.ViewModels; @@ -35,7 +36,7 @@ public PianoSheetViewModel(SettingsPageViewModel settingsPage, public SettingsPageViewModel SettingsPage { get; } - public string Result { get; private set; } + public string Result { get; private set; } = string.Empty; [OnChangedMethod(nameof(Update))] public uint Bars @@ -82,17 +83,19 @@ public void Update() foreach (var note in notes) { - var id = LyrePlayer.TransposeNote(note.NoteNumber); - if (layout.TryGetKey(id, out var key)) - { - var difference = note.Time - last; - var dotCount = difference / Shorten; + var offset = note.NoteNumber - SettingsPage.KeyOffset; + var transpose = SettingsPage.Transpose ?? Ignore; + var id = LyrePlayer.TransposeNote(offset, transpose); - sb.Append(new string(Delimiter, (int) dotCount)); - sb.Append(key.ToString().Last()); + if (!layout.TryGetKey(id, out var key)) continue; - last = (int) note.Time; - } + var difference = note.Time - last; + var dotCount = difference / Shorten; + + sb.Append(new string(Delimiter, (int) dotCount)); + sb.Append(key.ToString().Last()); + + last = (int) note.Time; } sb.AppendLine();