From 222c1d9aa10d558c3bdc1edc21d06998d5998d4e Mon Sep 17 00:00:00 2001 From: Zhe Fang Date: Tue, 28 Oct 2025 15:28:45 -0400 Subject: [PATCH] chores: replace romaji convert package with a lightweight one; fix search control result lacking languages --- .../BetterLyrics.WinUI3/App.xaml | 1 + .../BetterLyrics.WinUI3.csproj | 3 +- .../Converter/ByteArrayToImageConverter.cs | 44 ++++++++ .../Helper/LanguageHelper.cs | 28 ++++- .../Helper/LyricsParser.cs | 8 +- .../Helper/SpectrumAnalyzer.cs | 2 +- .../Helper/WindowHelper.cs | 12 +- .../LyricsSearchControlViewModel.cs | 5 +- .../ViewModels/LyricsWindowViewModel.cs | 2 +- .../BetterLyrics.WinUI3/Views/LyricsPage.xaml | 2 +- .../Views/LyricsWindow.xaml | 8 ++ .../Views/LyricsWindow.xaml.cs | 5 + .../Views/MusicGalleryPage.xaml | 103 ++++++++++-------- .../Views/MusicGalleryWindow.xaml | 23 +++- .../Views/MusicGalleryWindow.xaml.cs | 12 ++ .../Views/SettingsWindow.xaml | 25 ++++- .../Views/SettingsWindow.xaml.cs | 12 ++ 17 files changed, 223 insertions(+), 72 deletions(-) create mode 100644 BetterLyrics.WinUI3/BetterLyrics.WinUI3/Converter/ByteArrayToImageConverter.cs diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml index 07c430b..e6fc9ba 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/App.xaml @@ -60,6 +60,7 @@ + diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/BetterLyrics.WinUI3.csproj b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/BetterLyrics.WinUI3.csproj index 492f151..915f90b 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/BetterLyrics.WinUI3.csproj +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/BetterLyrics.WinUI3.csproj @@ -50,6 +50,7 @@ + @@ -64,6 +65,7 @@ + @@ -78,7 +80,6 @@ - diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Converter/ByteArrayToImageConverter.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Converter/ByteArrayToImageConverter.cs new file mode 100644 index 0000000..f6c7084 --- /dev/null +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Converter/ByteArrayToImageConverter.cs @@ -0,0 +1,44 @@ +using Microsoft.UI.Xaml.Data; +using Microsoft.UI.Xaml.Media.Imaging; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BetterLyrics.WinUI3.Converter +{ + public partial class ByteArrayToImageConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, string language) + { + if (value is byte[] byteArray && byteArray.Length > 0) + { + try + { + using (var ms = new MemoryStream(byteArray)) + { + var stream = ms.AsRandomAccessStream(); + var bitmapImage = new BitmapImage(); + + bitmapImage.SetSource(stream); + + return bitmapImage; + } + } + catch + { + return null; + } + } + + return null; + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } +} diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs index 8955c90..ae9654a 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LanguageHelper.cs @@ -2,6 +2,7 @@ using NTextCat; using System.Collections.Generic; using System.Linq; +using System.Text; using Windows.Globalization; namespace BetterLyrics.WinUI3.Services @@ -87,7 +88,6 @@ namespace BetterLyrics.WinUI3.Services static LanguageHelper() { _identifier = _factory.Load(PathHelper.LanguageProfilePath); - RomajiConverter.Core.Helpers.RomajiHelper.Init(); } public static string? DetectLanguageCode(string? text) @@ -135,9 +135,9 @@ namespace BetterLyrics.WinUI3.Services if (char.IsLetter(c) && c < 128) return char.ToUpper(c).ToString(); - if (Pinyin.Pinyin.Instance.IsHanzi(c.ToString())) + if (IsHanzi(c.ToString())) { - return Pinyin.Pinyin.Instance.HanziToPinyin(c.ToString(), Pinyin.ManTone.Style.NORMAL).ToStr().ToUpper().FirstOrDefault().ToString(); + return ToPinyin(c.ToString(), Pinyin.ManTone.Style.NORMAL).ToUpper().FirstOrDefault().ToString(); } return "#"; @@ -145,7 +145,27 @@ namespace BetterLyrics.WinUI3.Services public static string ToRomaji(string text) { - return string.Join(" ", RomajiConverter.Core.Helpers.RomajiHelper.SentenceToRomaji(text).Select(x => x.Romaji)); + return Kana.Kana.KanaToRomaji(text).ToStr(); + } + + public static string ToPinyin(string text, Pinyin.ManTone.Style style = Pinyin.ManTone.Style.TONE) + { + return Pinyin.Pinyin.Instance.HanziToPinyin(text, style).ToStr(); + } + + public static string ToJyutping(string text) + { + return Pinyin.Jyutping.Instance.HanziToPinyin(text).ToStr(); + } + + public static bool IsHanzi(char ch) + { + return IsHanzi(ch.ToString()); + } + + public static bool IsHanzi(string text) + { + return Pinyin.Pinyin.Instance.IsHanzi(text); } } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs index a54a939..87da7f7 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/LyricsParser.cs @@ -111,12 +111,12 @@ namespace BetterLyrics.WinUI3.Helper { StartMs = line.StartMs, EndMs = line.EndMs, - OriginalText = Pinyin.Pinyin.Instance.HanziToPinyin(line.OriginalText).ToStr(), + OriginalText = LanguageHelper.ToPinyin(line.OriginalText), LyricsChars = line.LyricsChars.Select(c => new LyricsChar { StartMs = c.StartMs, EndMs = c.EndMs, - Text = Pinyin.Pinyin.Instance.HanziToPinyin(c.Text).ToStr(), + Text = LanguageHelper.ToPinyin(c.Text), StartIndex = c.StartIndex }).ToList() }).ToList() @@ -128,12 +128,12 @@ namespace BetterLyrics.WinUI3.Helper { StartMs = line.StartMs, EndMs = line.EndMs, - OriginalText = Pinyin.Jyutping.Instance.HanziToPinyin(line.OriginalText).ToStr(), + OriginalText = LanguageHelper.ToJyutping(line.OriginalText), LyricsChars = line.LyricsChars.Select(c => new LyricsChar { StartMs = c.StartMs, EndMs = c.EndMs, - Text = Pinyin.Jyutping.Instance.HanziToPinyin(c.Text).ToStr(), + Text = LanguageHelper.ToJyutping(c.Text), StartIndex = c.StartIndex }).ToList() }).ToList() diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/SpectrumAnalyzer.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/SpectrumAnalyzer.cs index 03067d0..f8cfebc 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/SpectrumAnalyzer.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/SpectrumAnalyzer.cs @@ -31,7 +31,7 @@ namespace BetterLyrics.WinUI3.Helper public float[] SmoothSpectrum { get; private set; } public int BarCount { get; set; } = 32; - public int Sensitivity { get; set; } = 5; + public int Sensitivity { get; set; } = 10; public float SmoothingFactor { get; set; } = 0.95f; public bool IsCapturing { get; private set; } = false; diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/WindowHelper.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/WindowHelper.cs index a0b9dc9..9e01725 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/WindowHelper.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Helper/WindowHelper.cs @@ -114,16 +114,8 @@ namespace BetterLyrics.WinUI3.Helper else { var castedWindow = (Window)window; - if (typeof(T) == typeof(LyricsWindow)) - { - var lyricsWindow = (LyricsWindow)window; - lyricsWindow.Show(); - } - else - { - castedWindow.Restore(); - castedWindow.Activate(); - } + castedWindow.Activate(); + castedWindow.AppWindow.MoveInZOrderAtTop(); } } diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsSearchControlViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsSearchControlViewModel.cs index 0703f9e..abdc714 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsSearchControlViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsSearchControlViewModel.cs @@ -172,7 +172,10 @@ namespace BetterLyrics.WinUI3.ViewModels if (value?.Raw != null) { var lyricsParser = new LyricsParser(); - lyricsParser.Parse(value?.Title ?? "", value?.Artist ?? "", value?.Raw, (int?)_mediaSessionsService.SongInfo?.DurationMs, value?.Provider); + lyricsParser.Parse( + MappedSongSearchQuery?.MappedTitle ?? "", + MappedSongSearchQuery?.MappedArtist ?? "", + value?.Raw, (int?)_mediaSessionsService.SongInfo?.DurationMs, value?.Provider); LyricsDataArr = [.. lyricsParser.LyricsDataArr]; } else diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs index c4f289d..6ac47a5 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/ViewModels/LyricsWindowViewModel.cs @@ -70,7 +70,7 @@ namespace BetterLyrics.WinUI3 [ObservableProperty] public partial ElementTheme ThemeType { get; set; } = ElementTheme.Default; - [ObservableProperty] public partial double TitleBarFontSize { get; set; } = 11; + [ObservableProperty] public partial double TitleBarFontSize { get; set; } = 12; [ObservableProperty] public partial Visibility CloseButtonVisibility { get; set; } = Visibility.Visible; diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/LyricsPage.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/LyricsPage.xaml index d983bb2..09beeae 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/LyricsPage.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/LyricsPage.xaml @@ -267,7 +267,7 @@ x:Name="SettingsButton" Command="{x:Bind ViewModel.OpenSettingsWindowCommand}" Content="{ui:FontIcon FontFamily={StaticResource IconFontFamily}, - Glyph=}" + Glyph=}" Style="{StaticResource GhostButtonStyle}"> diff --git a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/LyricsWindow.xaml b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/LyricsWindow.xaml index 8a1e9eb..6b04279 100644 --- a/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/LyricsWindow.xaml +++ b/BetterLyrics.WinUI3/BetterLyrics.WinUI3/Views/LyricsWindow.xaml @@ -57,6 +57,14 @@ + + (); + } + + private void MusicGalleryButton_Click(object sender, RoutedEventArgs e) + { + WindowHelper.OpenOrShowWindow(); + } } }