mirror of
https://github.com/jayfunc/BetterLyrics.git
synced 2026-01-12 19:08:33 +08:00
Update README files and enhance SettingsPageViewModel
- Improved the Chinese and English README files for clarity and consistency, including updates to feature descriptions and links. - Added detailed support information for multiple music players in the README. - Implemented the SettingsPageViewModel with properties and methods for managing application settings, including language, display options, and playback settings. - Introduced partial methods for handling property changes in SettingsPageViewModel to ensure settings are saved and applied correctly. - Enhanced the observable properties for better data binding and UI updates.
This commit is contained in:
@@ -12,7 +12,7 @@
|
|||||||
<Identity
|
<Identity
|
||||||
Name="37412.BetterLyrics"
|
Name="37412.BetterLyrics"
|
||||||
Publisher="CN=E1428B0E-DC1D-4EA4-ACB1-4556569D5BA9"
|
Publisher="CN=E1428B0E-DC1D-4EA4-ACB1-4556569D5BA9"
|
||||||
Version="1.0.30.0" />
|
Version="1.0.31.0" />
|
||||||
|
|
||||||
<mp:PhoneIdentity PhoneProductId="ca4a4830-fc19-40d9-b823-53e2bff3d816" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
<mp:PhoneIdentity PhoneProductId="ca4a4830-fc19-40d9-b823-53e2bff3d816" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
||||||
|
|
||||||
|
|||||||
@@ -75,8 +75,6 @@ namespace BetterLyrics.WinUI3
|
|||||||
|
|
||||||
protected override void OnLaunched(LaunchActivatedEventArgs args)
|
protected override void OnLaunched(LaunchActivatedEventArgs args)
|
||||||
{
|
{
|
||||||
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime;
|
|
||||||
|
|
||||||
WindowHelper.OpenWindow<LyricsWindow>();
|
WindowHelper.OpenWindow<LyricsWindow>();
|
||||||
var lyricsWindow = WindowHelper.GetWindowByWindowType<LyricsWindow>();
|
var lyricsWindow = WindowHelper.GetWindowByWindowType<LyricsWindow>();
|
||||||
if (lyricsWindow == null) return;
|
if (lyricsWindow == null) return;
|
||||||
|
|||||||
@@ -61,7 +61,9 @@ namespace BetterLyrics.WinUI3.Services
|
|||||||
LyricsFontColorType LyricsFgFontColorType { get; set; }
|
LyricsFontColorType LyricsFgFontColorType { get; set; }
|
||||||
LyricsFontColorType LyricsStrokeFontColorType { get; set; }
|
LyricsFontColorType LyricsStrokeFontColorType { get; set; }
|
||||||
|
|
||||||
int LyricsFontSize { get; set; }
|
int LyricsStandardFontSize { get; set; }
|
||||||
|
int LyricsDockFontSize { get; set; }
|
||||||
|
int LyricsDesktopFontSize { get; set; }
|
||||||
|
|
||||||
ElementTheme LyricsBackgroundTheme { get; set; }
|
ElementTheme LyricsBackgroundTheme { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -62,7 +62,11 @@ namespace BetterLyrics.WinUI3.Services
|
|||||||
|
|
||||||
private const string LyricsFontStrokeWidthKey = "LyricsFontStrokeWidth";
|
private const string LyricsFontStrokeWidthKey = "LyricsFontStrokeWidth";
|
||||||
|
|
||||||
private const string LyricsFontSizeKey = "LyricsFontSize";
|
// Lyrics font size
|
||||||
|
private const string LyricsStandardFontSizeKey = "LyricsStandardFontSize";
|
||||||
|
private const string LyricsDockFontSizeKey = "LyricsDockFontSize";
|
||||||
|
private const string LyricsDesktopFontSizeKey = "LyricsDesktopFontSize";
|
||||||
|
|
||||||
private const string LyricsFontWeightKey = "LyricsFontWeightKey";
|
private const string LyricsFontWeightKey = "LyricsFontWeightKey";
|
||||||
private const string LyricsGlowEffectScopeKey = "LyricsGlowEffectScope";
|
private const string LyricsGlowEffectScopeKey = "LyricsGlowEffectScope";
|
||||||
private const string LyricsHighlightSopeKey = "LyricsHighlightSope";
|
private const string LyricsHighlightSopeKey = "LyricsHighlightSope";
|
||||||
@@ -204,7 +208,10 @@ namespace BetterLyrics.WinUI3.Services
|
|||||||
SetDefault(LyricsCustomFgFontColorKey, Colors.White.ToInt());
|
SetDefault(LyricsCustomFgFontColorKey, Colors.White.ToInt());
|
||||||
SetDefault(LyricsCustomStrokeFontColorKey, Colors.White.ToInt());
|
SetDefault(LyricsCustomStrokeFontColorKey, Colors.White.ToInt());
|
||||||
|
|
||||||
SetDefault(LyricsFontSizeKey, 28);
|
SetDefault(LyricsStandardFontSizeKey, 28);
|
||||||
|
SetDefault(LyricsDockFontSizeKey, 20);
|
||||||
|
SetDefault(LyricsDesktopFontSizeKey, 28);
|
||||||
|
|
||||||
SetDefault(LyricsLineSpacingFactorKey, 0.5f);
|
SetDefault(LyricsLineSpacingFactorKey, 0.5f);
|
||||||
SetDefault(LyricsVerticalEdgeOpacityKey, 0);
|
SetDefault(LyricsVerticalEdgeOpacityKey, 0);
|
||||||
SetDefault(IsLyricsGlowEffectEnabledKey, true);
|
SetDefault(IsLyricsGlowEffectEnabledKey, true);
|
||||||
@@ -511,10 +518,22 @@ namespace BetterLyrics.WinUI3.Services
|
|||||||
set => SetValue(LyricsFontStrokeWidthKey, value);
|
set => SetValue(LyricsFontStrokeWidthKey, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int LyricsFontSize
|
public int LyricsStandardFontSize
|
||||||
{
|
{
|
||||||
get => GetValue<int>(LyricsFontSizeKey);
|
get => GetValue<int>(LyricsStandardFontSizeKey);
|
||||||
set => SetValue(LyricsFontSizeKey, value);
|
set => SetValue(LyricsStandardFontSizeKey, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int LyricsDockFontSize
|
||||||
|
{
|
||||||
|
get => GetValue<int>(LyricsDockFontSizeKey);
|
||||||
|
set => SetValue(LyricsDockFontSizeKey, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int LyricsDesktopFontSize
|
||||||
|
{
|
||||||
|
get => GetValue<int>(LyricsDesktopFontSizeKey);
|
||||||
|
set => SetValue(LyricsDesktopFontSizeKey, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LyricsFontWeight LyricsFontWeight
|
public LyricsFontWeight LyricsFontWeight
|
||||||
|
|||||||
@@ -37,7 +37,9 @@ namespace BetterLyrics.WinUI3.ViewModels
|
|||||||
PositionOffset = _settingsService.PositionOffset;
|
PositionOffset = _settingsService.PositionOffset;
|
||||||
IsImmersiveMode = _settingsService.IsImmersiveMode;
|
IsImmersiveMode = _settingsService.IsImmersiveMode;
|
||||||
ShowTranslationOnly = _settingsService.ShowTranslationOnly;
|
ShowTranslationOnly = _settingsService.ShowTranslationOnly;
|
||||||
LyricsFontSize = _settingsService.LyricsFontSize;
|
|
||||||
|
LyricsStandardFontSize = _settingsService.LyricsStandardFontSize;
|
||||||
|
|
||||||
LyricsFontFamily = _settingsService.LyricsFontFamily;
|
LyricsFontFamily = _settingsService.LyricsFontFamily;
|
||||||
|
|
||||||
OnIsImmersiveModeChanged(IsImmersiveMode);
|
OnIsImmersiveModeChanged(IsImmersiveMode);
|
||||||
@@ -91,7 +93,7 @@ namespace BetterLyrics.WinUI3.ViewModels
|
|||||||
public partial string LyricsFontFamily { get; set; }
|
public partial string LyricsFontFamily { get; set; }
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public partial int LyricsFontSize { get; set; }
|
public partial int LyricsStandardFontSize { get; set; }
|
||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
public partial bool IsImmersiveMode { get; set; }
|
public partial bool IsImmersiveMode { get; set; }
|
||||||
@@ -236,9 +238,9 @@ namespace BetterLyrics.WinUI3.ViewModels
|
|||||||
{
|
{
|
||||||
if (message.Sender is SettingsPageViewModel)
|
if (message.Sender is SettingsPageViewModel)
|
||||||
{
|
{
|
||||||
if (message.PropertyName == nameof(SettingsPageViewModel.LyricsFontSize))
|
if (message.PropertyName == nameof(SettingsPageViewModel.LyricsStandardFontSize))
|
||||||
{
|
{
|
||||||
LyricsFontSize = message.NewValue;
|
LyricsStandardFontSize = message.NewValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -205,7 +205,7 @@ namespace BetterLyrics.WinUI3.ViewModels
|
|||||||
_lyricsBlurAmount = message.NewValue;
|
_lyricsBlurAmount = message.NewValue;
|
||||||
_isLayoutChanged = true;
|
_isLayoutChanged = true;
|
||||||
}
|
}
|
||||||
else if (message.PropertyName == nameof(SettingsPageViewModel.LyricsFontSize))
|
else if (message.PropertyName == nameof(SettingsPageViewModel.LyricsStandardFontSize))
|
||||||
{
|
{
|
||||||
_lyricsFontSize = message.NewValue;
|
_lyricsFontSize = message.NewValue;
|
||||||
_isLayoutChanged = true;
|
_isLayoutChanged = true;
|
||||||
|
|||||||
@@ -0,0 +1,91 @@
|
|||||||
|
using BetterLyrics.WinUI3.Helper;
|
||||||
|
using BetterLyrics.WinUI3.Services;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace BetterLyrics.WinUI3.ViewModels
|
||||||
|
{
|
||||||
|
public partial class SettingsPageViewModel
|
||||||
|
{
|
||||||
|
public SettingsPageViewModel(ISettingsService settingsService, ILibWatcherService libWatcherService, IPlaybackService playbackService, ITranslateService libreTranslateService) : base(settingsService)
|
||||||
|
{
|
||||||
|
_libWatcherService = libWatcherService;
|
||||||
|
_playbackService = playbackService;
|
||||||
|
_libreTranslateService = libreTranslateService;
|
||||||
|
|
||||||
|
IsLibreTranslateEnabled = _settingsService.IsLibreTranslateEnabled;
|
||||||
|
LibreTranslateServer = _settingsService.LibreTranslateServer;
|
||||||
|
SelectedTargetLanguageIndex = _settingsService.SelectedTargetLanguageIndex;
|
||||||
|
|
||||||
|
LocalMediaFolders = [.. _settingsService.LocalMediaFolders];
|
||||||
|
LyricsSearchProvidersInfo = [.. _settingsService.LyricsSearchProvidersInfo];
|
||||||
|
AlbumArtSearchProvidersInfo = [.. _settingsService.AlbumArtSearchProvidersInfo];
|
||||||
|
|
||||||
|
Language = _settingsService.Language;
|
||||||
|
CoverImageRadius = _settingsService.CoverImageRadius;
|
||||||
|
|
||||||
|
AutoStartWindowType = _settingsService.AutoStartWindowType;
|
||||||
|
AutoLockOnDesktopMode = _settingsService.AutoLockOnDesktopMode;
|
||||||
|
|
||||||
|
IsDynamicCoverOverlayEnabled = _settingsService.IsDynamicCoverOverlayEnabled;
|
||||||
|
CoverOverlayOpacity = _settingsService.CoverOverlayOpacity;
|
||||||
|
CoverOverlayBlurAmount = _settingsService.CoverOverlayBlurAmount;
|
||||||
|
|
||||||
|
CoverAcrylicEffectAmount = _settingsService.CoverAcrylicEffectAmount;
|
||||||
|
|
||||||
|
LyricsAlignmentType = _settingsService.LyricsAlignmentType;
|
||||||
|
SongInfoAlignmentType = _settingsService.SongInfoAlignmentType;
|
||||||
|
LyricsFontWeight = _settingsService.LyricsFontWeight;
|
||||||
|
LyricsBlurAmount = _settingsService.LyricsBlurAmount;
|
||||||
|
LyricsVerticalEdgeOpacity = _settingsService.LyricsVerticalEdgeOpacity;
|
||||||
|
LyricsLineSpacingFactor = _settingsService.LyricsLineSpacingFactor;
|
||||||
|
|
||||||
|
// Font size
|
||||||
|
LyricsStandardFontSize = _settingsService.LyricsStandardFontSize;
|
||||||
|
LyricsDockFontSize = _settingsService.LyricsDockFontSize;
|
||||||
|
LyricsDesktopFontSize = _settingsService.LyricsDesktopFontSize;
|
||||||
|
|
||||||
|
IsLyricsGlowEffectEnabled = _settingsService.IsLyricsGlowEffectEnabled;
|
||||||
|
LyricsGlowEffectScope = _settingsService.LyricsGlowEffectScope;
|
||||||
|
LyricsHighlightScope = _settingsService.LyricsHighlightScope;
|
||||||
|
IsFanLyricsEnabled = _settingsService.IsFanLyricsEnabled;
|
||||||
|
|
||||||
|
LyricsBgFontColorType = _settingsService.LyricsBgFontColorType;
|
||||||
|
LyricsFgFontColorType = _settingsService.LyricsFgFontColorType;
|
||||||
|
LyricsStrokeFontColorType = _settingsService.LyricsStrokeFontColorType;
|
||||||
|
|
||||||
|
LyricsCustomBgFontColor = _settingsService.LyricsCustomBgFontColor;
|
||||||
|
LyricsCustomFgFontColor = _settingsService.LyricsCustomFgFontColor;
|
||||||
|
LyricsCustomStrokeFontColor = _settingsService.LyricsCustomStrokeFontColor;
|
||||||
|
|
||||||
|
LyricsFontStrokeWidth = _settingsService.LyricsFontStrokeWidth;
|
||||||
|
LyricsBackgroundTheme = _settingsService.LyricsBackgroundTheme;
|
||||||
|
MediaSourceProvidersInfo = [.. _settingsService.MediaSourceProvidersInfo];
|
||||||
|
IgnoreFullscreenWindow = _settingsService.IgnoreFullscreenWindow;
|
||||||
|
|
||||||
|
LyricsScrollEasingType = _settingsService.LyricsScrollEasingType;
|
||||||
|
LyricsScrollDuration = _settingsService.LyricsScrollDuration;
|
||||||
|
TimelineSyncThreshold = _settingsService.TimelineSyncThreshold;
|
||||||
|
|
||||||
|
IsLyricsFloatAnimationEnabled = _settingsService.IsLyricsFloatAnimationEnabled;
|
||||||
|
ResetPositionOffsetOnSongChanged = _settingsService.ResetPositionOffsetOnSongChanged;
|
||||||
|
LockHotKeyIndex = _settingsService.LockHotKeyIndex;
|
||||||
|
|
||||||
|
LXMusicServer = _settingsService.LXMusicServer;
|
||||||
|
DockPlacement = _settingsService.DockPlacement;
|
||||||
|
LyricsBgFontOpacity = _settingsService.LyricsBgFontOpacity;
|
||||||
|
HideWindowWhenNotPlaying = _settingsService.HideWindowWhenNotPlaying;
|
||||||
|
DockWindowHeight = _settingsService.DockWindowHeight;
|
||||||
|
|
||||||
|
SystemFontNames = [.. FontHelper.SystemFontFamilies];
|
||||||
|
SelectedFontFamilyIndex = _settingsService.SelectedFontFamilyIndex;
|
||||||
|
LyricsFontFamily = _settingsService.LyricsFontFamily;
|
||||||
|
IsDragEverywhereEnabled = _settingsService.IsDragEverywhereEnabled;
|
||||||
|
|
||||||
|
_playbackService.MediaSourceProvidersInfoChanged += PlaybackService_SessionIdsChanged;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,227 @@
|
|||||||
|
using BetterLyrics.WinUI3.Enums;
|
||||||
|
using BetterLyrics.WinUI3.Helper;
|
||||||
|
using BetterLyrics.WinUI3.Views;
|
||||||
|
using Microsoft.UI.Xaml;
|
||||||
|
using Windows.Globalization;
|
||||||
|
using Windows.UI;
|
||||||
|
|
||||||
|
namespace BetterLyrics.WinUI3.ViewModels
|
||||||
|
{
|
||||||
|
public partial class SettingsPageViewModel
|
||||||
|
{
|
||||||
|
partial void OnDockPlacementChanged(DockPlacement value)
|
||||||
|
{
|
||||||
|
_settingsService.DockPlacement = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsScrollEasingTypeChanged(EasingType value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsScrollEasingType = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsScrollDurationChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsScrollDuration = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsBackgroundThemeChanged(ElementTheme value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsBackgroundTheme = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsFontStrokeWidthChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsFontStrokeWidth = value;
|
||||||
|
}
|
||||||
|
partial void OnIgnoreFullscreenWindowChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.IgnoreFullscreenWindow = value;
|
||||||
|
}
|
||||||
|
partial void OnSelectedTargetLanguageIndexChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.SelectedTargetLanguageIndex = value;
|
||||||
|
}
|
||||||
|
partial void OnLibreTranslateServerChanged(string value)
|
||||||
|
{
|
||||||
|
_settingsService.LibreTranslateServer = value;
|
||||||
|
}
|
||||||
|
partial void OnLXMusicServerChanged(string value)
|
||||||
|
{
|
||||||
|
_settingsService.LXMusicServer = value;
|
||||||
|
}
|
||||||
|
partial void OnAutoStartWindowTypeChanged(AutoStartWindowType value)
|
||||||
|
{
|
||||||
|
_settingsService.AutoStartWindowType = value;
|
||||||
|
}
|
||||||
|
partial void OnAutoLockOnDesktopModeChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.AutoLockOnDesktopMode = value;
|
||||||
|
}
|
||||||
|
partial void OnCoverImageRadiusChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.CoverImageRadius = value;
|
||||||
|
}
|
||||||
|
partial void OnCoverOverlayBlurAmountChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.CoverOverlayBlurAmount = value;
|
||||||
|
}
|
||||||
|
partial void OnCoverAcrylicEffectAmountChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.CoverAcrylicEffectAmount = value;
|
||||||
|
}
|
||||||
|
partial void OnCoverOverlayOpacityChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.CoverOverlayOpacity = value;
|
||||||
|
}
|
||||||
|
partial void OnIsDynamicCoverOverlayEnabledChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.IsDynamicCoverOverlayEnabled = value;
|
||||||
|
}
|
||||||
|
partial void OnLanguageChanged(Enums.Language value)
|
||||||
|
{
|
||||||
|
switch (value)
|
||||||
|
{
|
||||||
|
case Enums.Language.FollowSystem:
|
||||||
|
ApplicationLanguages.PrimaryLanguageOverride = "";
|
||||||
|
break;
|
||||||
|
case Enums.Language.English:
|
||||||
|
ApplicationLanguages.PrimaryLanguageOverride = "en-US";
|
||||||
|
break;
|
||||||
|
case Enums.Language.SimplifiedChinese:
|
||||||
|
ApplicationLanguages.PrimaryLanguageOverride = "zh-CN";
|
||||||
|
break;
|
||||||
|
case Enums.Language.TraditionalChinese:
|
||||||
|
ApplicationLanguages.PrimaryLanguageOverride = "zh-TW";
|
||||||
|
break;
|
||||||
|
case Enums.Language.Japanese:
|
||||||
|
ApplicationLanguages.PrimaryLanguageOverride = "ja-JP";
|
||||||
|
break;
|
||||||
|
case Enums.Language.Korean:
|
||||||
|
ApplicationLanguages.PrimaryLanguageOverride = "ko-KR";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
_settingsService.Language = Language;
|
||||||
|
}
|
||||||
|
partial void OnIsFanLyricsEnabledChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.IsFanLyricsEnabled = value;
|
||||||
|
}
|
||||||
|
partial void OnIsLyricsGlowEffectEnabledChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.IsLyricsGlowEffectEnabled = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsAlignmentTypeChanged(TextAlignmentType value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsAlignmentType = value;
|
||||||
|
}
|
||||||
|
partial void OnSongInfoAlignmentTypeChanged(TextAlignmentType value)
|
||||||
|
{
|
||||||
|
_settingsService.SongInfoAlignmentType = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsBlurAmountChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsBlurAmount = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsCustomBgFontColorChanged(Color value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsCustomBgFontColor = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsCustomFgFontColorChanged(Color value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsCustomFgFontColor = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsCustomStrokeFontColorChanged(Color value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsCustomStrokeFontColor = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsBgFontColorTypeChanged(LyricsFontColorType value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsBgFontColorType = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsFgFontColorTypeChanged(LyricsFontColorType value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsFgFontColorType = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsStrokeFontColorTypeChanged(LyricsFontColorType value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsStrokeFontColorType = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsStandardFontSizeChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsStandardFontSize = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsDockFontSizeChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsDockFontSize = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsDesktopFontSizeChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsDesktopFontSize = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsFontWeightChanged(LyricsFontWeight value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsFontWeight = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsGlowEffectScopeChanged(LineRenderingType value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsGlowEffectScope = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsHighlightScopeChanged(LineRenderingType value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsHighlightScope = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsLineSpacingFactorChanged(float value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsLineSpacingFactor = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsVerticalEdgeOpacityChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsVerticalEdgeOpacity = value;
|
||||||
|
}
|
||||||
|
partial void OnTimelineSyncThresholdChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.TimelineSyncThreshold = value;
|
||||||
|
}
|
||||||
|
partial void OnIsLyricsFloatAnimationEnabledChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.IsLyricsFloatAnimationEnabled = value;
|
||||||
|
}
|
||||||
|
partial void OnResetPositionOffsetOnSongChangedChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.ResetPositionOffsetOnSongChanged = value;
|
||||||
|
}
|
||||||
|
partial void OnLyricsBgFontOpacityChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsBgFontOpacity = value;
|
||||||
|
}
|
||||||
|
partial void OnHideWindowWhenNotPlayingChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.HideWindowWhenNotPlaying = value;
|
||||||
|
}
|
||||||
|
partial void OnDockWindowHeightChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.DockWindowHeight = value;
|
||||||
|
}
|
||||||
|
partial void OnSelectedFontFamilyIndexChanged(int value)
|
||||||
|
{
|
||||||
|
_settingsService.SelectedFontFamilyIndex = value;
|
||||||
|
LyricsFontFamily = SystemFontNames[value];
|
||||||
|
}
|
||||||
|
partial void OnLyricsFontFamilyChanged(string value)
|
||||||
|
{
|
||||||
|
_settingsService.LyricsFontFamily = value;
|
||||||
|
}
|
||||||
|
partial void OnIsDragEverywhereEnabledChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.IsDragEverywhereEnabled = value;
|
||||||
|
|
||||||
|
LyricsWindow? lyricsWindow = WindowHelper.GetWindowByWindowType<LyricsWindow>();
|
||||||
|
if (lyricsWindow != null)
|
||||||
|
{
|
||||||
|
lyricsWindow.UpdateTitleBarArea();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
partial void OnIsLibreTranslateEnabledChanged(bool value)
|
||||||
|
{
|
||||||
|
_settingsService.IsLibreTranslateEnabled = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,237 @@
|
|||||||
|
using BetterLyrics.WinUI3.Enums;
|
||||||
|
using BetterLyrics.WinUI3.Helper;
|
||||||
|
using BetterLyrics.WinUI3.Models;
|
||||||
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
|
using Microsoft.UI.Xaml;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections.ObjectModel;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Windows.UI;
|
||||||
|
|
||||||
|
namespace BetterLyrics.WinUI3.ViewModels
|
||||||
|
{
|
||||||
|
public partial class SettingsPageViewModel
|
||||||
|
{
|
||||||
|
public string Version { get; set; } = MetadataHelper.AppVersion;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool IsLibreTranslateEnabled { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial bool IsDragEverywhereEnabled { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial string LyricsFontFamily { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial ObservableCollection<string> SystemFontNames { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int SelectedFontFamilyIndex { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial DockPlacement DockPlacement { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int LockHotKeyIndex { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial ElementTheme LyricsBackgroundTheme { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial AutoStartWindowType AutoStartWindowType { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial bool AutoLockOnDesktopMode { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int CoverImageRadius { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int CoverOverlayBlurAmount { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int CoverOverlayOpacity { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool IsDebugOverlayEnabled { get; set; } = false;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool IsLogEnabled { get; set; } = false;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool IsDynamicCoverOverlayEnabled { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int CoverAcrylicEffectAmount { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial Enums.Language Language { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial ObservableCollection<LocalMediaFolder> LocalMediaFolders { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial ObservableCollection<LyricsSearchProviderInfo> LyricsSearchProvidersInfo { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial ObservableCollection<AlbumArtSearchProviderInfo> AlbumArtSearchProvidersInfo { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial ObservableCollection<MediaSourceProviderInfo> MediaSourceProvidersInfo { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool IsFanLyricsEnabled { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool IsLyricsGlowEffectEnabled { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial TextAlignmentType LyricsAlignmentType { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial TextAlignmentType SongInfoAlignmentType { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int LyricsBlurAmount { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial Color LyricsCustomBgFontColor { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial Color LyricsCustomFgFontColor { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial Color LyricsCustomStrokeFontColor { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int LyricsBgFontOpacity { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial LyricsFontColorType LyricsBgFontColorType { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial LyricsFontColorType LyricsFgFontColorType { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial LyricsFontColorType LyricsStrokeFontColorType { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int LyricsStandardFontSize { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int LyricsDockFontSize { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int LyricsDesktopFontSize { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial LyricsFontWeight LyricsFontWeight { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial LineRenderingType LyricsGlowEffectScope { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial LineRenderingType LyricsHighlightScope { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial float LyricsLineSpacingFactor { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int LyricsVerticalEdgeOpacity { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial object NavViewSelectedItemTag { get; set; } = "App";
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool ResetPositionOffsetOnSongChanged { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool IsLyricsFloatAnimationEnabled { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial string LibreTranslateServer { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int SelectedTargetLanguageIndex { get; set; } = 0;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial bool IsLibreTranslateServerTesting { get; set; } = false;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int LyricsFontStrokeWidth { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool IgnoreFullscreenWindow { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial EasingType LyricsScrollEasingType { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int LyricsScrollDuration { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int TimelineSyncThreshold { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
public partial bool IsLXMusicServerTesting { get; set; } = false;
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial string LXMusicServer { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial bool HideWindowWhenNotPlaying { get; set; }
|
||||||
|
|
||||||
|
[ObservableProperty]
|
||||||
|
[NotifyPropertyChangedRecipients]
|
||||||
|
public partial int DockWindowHeight { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,296 +31,11 @@ namespace BetterLyrics.WinUI3.ViewModels
|
|||||||
|
|
||||||
private readonly string _autoStartupTaskId = "AutoStartup";
|
private readonly string _autoStartupTaskId = "AutoStartup";
|
||||||
|
|
||||||
public SettingsPageViewModel(ISettingsService settingsService, ILibWatcherService libWatcherService, IPlaybackService playbackService, ITranslateService libreTranslateService) : base(settingsService)
|
|
||||||
{
|
|
||||||
_libWatcherService = libWatcherService;
|
|
||||||
_playbackService = playbackService;
|
|
||||||
_libreTranslateService = libreTranslateService;
|
|
||||||
|
|
||||||
IsLibreTranslateEnabled = _settingsService.IsLibreTranslateEnabled;
|
|
||||||
LibreTranslateServer = _settingsService.LibreTranslateServer;
|
|
||||||
SelectedTargetLanguageIndex = _settingsService.SelectedTargetLanguageIndex;
|
|
||||||
|
|
||||||
LocalMediaFolders = [.. _settingsService.LocalMediaFolders];
|
|
||||||
LyricsSearchProvidersInfo = [.. _settingsService.LyricsSearchProvidersInfo];
|
|
||||||
AlbumArtSearchProvidersInfo = [.. _settingsService.AlbumArtSearchProvidersInfo];
|
|
||||||
|
|
||||||
Language = _settingsService.Language;
|
|
||||||
CoverImageRadius = _settingsService.CoverImageRadius;
|
|
||||||
|
|
||||||
AutoStartWindowType = _settingsService.AutoStartWindowType;
|
|
||||||
AutoLockOnDesktopMode = _settingsService.AutoLockOnDesktopMode;
|
|
||||||
|
|
||||||
IsDynamicCoverOverlayEnabled = _settingsService.IsDynamicCoverOverlayEnabled;
|
|
||||||
CoverOverlayOpacity = _settingsService.CoverOverlayOpacity;
|
|
||||||
CoverOverlayBlurAmount = _settingsService.CoverOverlayBlurAmount;
|
|
||||||
|
|
||||||
CoverAcrylicEffectAmount = _settingsService.CoverAcrylicEffectAmount;
|
|
||||||
|
|
||||||
LyricsAlignmentType = _settingsService.LyricsAlignmentType;
|
|
||||||
SongInfoAlignmentType = _settingsService.SongInfoAlignmentType;
|
|
||||||
LyricsFontWeight = _settingsService.LyricsFontWeight;
|
|
||||||
LyricsBlurAmount = _settingsService.LyricsBlurAmount;
|
|
||||||
LyricsVerticalEdgeOpacity = _settingsService.LyricsVerticalEdgeOpacity;
|
|
||||||
LyricsLineSpacingFactor = _settingsService.LyricsLineSpacingFactor;
|
|
||||||
LyricsFontSize = _settingsService.LyricsFontSize;
|
|
||||||
IsLyricsGlowEffectEnabled = _settingsService.IsLyricsGlowEffectEnabled;
|
|
||||||
LyricsGlowEffectScope = _settingsService.LyricsGlowEffectScope;
|
|
||||||
LyricsHighlightScope = _settingsService.LyricsHighlightScope;
|
|
||||||
IsFanLyricsEnabled = _settingsService.IsFanLyricsEnabled;
|
|
||||||
|
|
||||||
LyricsBgFontColorType = _settingsService.LyricsBgFontColorType;
|
|
||||||
LyricsFgFontColorType = _settingsService.LyricsFgFontColorType;
|
|
||||||
LyricsStrokeFontColorType = _settingsService.LyricsStrokeFontColorType;
|
|
||||||
|
|
||||||
LyricsCustomBgFontColor = _settingsService.LyricsCustomBgFontColor;
|
|
||||||
LyricsCustomFgFontColor = _settingsService.LyricsCustomFgFontColor;
|
|
||||||
LyricsCustomStrokeFontColor = _settingsService.LyricsCustomStrokeFontColor;
|
|
||||||
|
|
||||||
LyricsFontStrokeWidth = _settingsService.LyricsFontStrokeWidth;
|
|
||||||
LyricsBackgroundTheme = _settingsService.LyricsBackgroundTheme;
|
|
||||||
MediaSourceProvidersInfo = [.. _settingsService.MediaSourceProvidersInfo];
|
|
||||||
IgnoreFullscreenWindow = _settingsService.IgnoreFullscreenWindow;
|
|
||||||
|
|
||||||
LyricsScrollEasingType = _settingsService.LyricsScrollEasingType;
|
|
||||||
LyricsScrollDuration = _settingsService.LyricsScrollDuration;
|
|
||||||
TimelineSyncThreshold = _settingsService.TimelineSyncThreshold;
|
|
||||||
|
|
||||||
IsLyricsFloatAnimationEnabled = _settingsService.IsLyricsFloatAnimationEnabled;
|
|
||||||
ResetPositionOffsetOnSongChanged = _settingsService.ResetPositionOffsetOnSongChanged;
|
|
||||||
LockHotKeyIndex = _settingsService.LockHotKeyIndex;
|
|
||||||
|
|
||||||
LXMusicServer = _settingsService.LXMusicServer;
|
|
||||||
DockPlacement = _settingsService.DockPlacement;
|
|
||||||
LyricsBgFontOpacity = _settingsService.LyricsBgFontOpacity;
|
|
||||||
HideWindowWhenNotPlaying = _settingsService.HideWindowWhenNotPlaying;
|
|
||||||
DockWindowHeight = _settingsService.DockWindowHeight;
|
|
||||||
|
|
||||||
SystemFontNames = [.. FontHelper.SystemFontFamilies];
|
|
||||||
SelectedFontFamilyIndex = _settingsService.SelectedFontFamilyIndex;
|
|
||||||
LyricsFontFamily = _settingsService.LyricsFontFamily;
|
|
||||||
IsDragEverywhereEnabled = _settingsService.IsDragEverywhereEnabled;
|
|
||||||
|
|
||||||
_playbackService.MediaSourceProvidersInfoChanged += PlaybackService_SessionIdsChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PlaybackService_SessionIdsChanged(object? sender, Events.MediaSourceProvidersInfoEventArgs e)
|
private void PlaybackService_SessionIdsChanged(object? sender, Events.MediaSourceProvidersInfoEventArgs e)
|
||||||
{
|
{
|
||||||
MediaSourceProvidersInfo = [.. e.MediaSourceProviersInfo];
|
MediaSourceProvidersInfo = [.. e.MediaSourceProviersInfo];
|
||||||
}
|
}
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool IsLibreTranslateEnabled { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial bool IsDragEverywhereEnabled { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial string LyricsFontFamily { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial ObservableCollection<string> SystemFontNames { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int SelectedFontFamilyIndex { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial DockPlacement DockPlacement { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int LockHotKeyIndex { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial ElementTheme LyricsBackgroundTheme { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial AutoStartWindowType AutoStartWindowType { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial bool AutoLockOnDesktopMode { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int CoverImageRadius { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int CoverOverlayBlurAmount { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int CoverOverlayOpacity { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool IsDebugOverlayEnabled { get; set; } = false;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool IsLogEnabled { get; set; } = false;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool IsDynamicCoverOverlayEnabled { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int CoverAcrylicEffectAmount { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial Enums.Language Language { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial ObservableCollection<LocalMediaFolder> LocalMediaFolders { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial ObservableCollection<LyricsSearchProviderInfo> LyricsSearchProvidersInfo { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial ObservableCollection<AlbumArtSearchProviderInfo> AlbumArtSearchProvidersInfo { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial ObservableCollection<MediaSourceProviderInfo> MediaSourceProvidersInfo { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool IsFanLyricsEnabled { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool IsLyricsGlowEffectEnabled { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial TextAlignmentType LyricsAlignmentType { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial TextAlignmentType SongInfoAlignmentType { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int LyricsBlurAmount { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial Color LyricsCustomBgFontColor { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial Color LyricsCustomFgFontColor { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial Color LyricsCustomStrokeFontColor { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int LyricsBgFontOpacity { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial LyricsFontColorType LyricsBgFontColorType { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial LyricsFontColorType LyricsFgFontColorType { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial LyricsFontColorType LyricsStrokeFontColorType { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int LyricsFontSize { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial LyricsFontWeight LyricsFontWeight { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial LineRenderingType LyricsGlowEffectScope { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial LineRenderingType LyricsHighlightScope { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial float LyricsLineSpacingFactor { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int LyricsVerticalEdgeOpacity { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial object NavViewSelectedItemTag { get; set; } = "App";
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool ResetPositionOffsetOnSongChanged { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool IsLyricsFloatAnimationEnabled { get; set; }
|
|
||||||
|
|
||||||
public string Version { get; set; } = MetadataHelper.AppVersion;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial string LibreTranslateServer { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int SelectedTargetLanguageIndex { get; set; } = 0;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial bool IsLibreTranslateServerTesting { get; set; } = false;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int LyricsFontStrokeWidth { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool IgnoreFullscreenWindow { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial EasingType LyricsScrollEasingType { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int LyricsScrollDuration { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int TimelineSyncThreshold { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
public partial bool IsLXMusicServerTesting { get; set; } = false;
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial string LXMusicServer { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial bool HideWindowWhenNotPlaying { get; set; }
|
|
||||||
|
|
||||||
[ObservableProperty]
|
|
||||||
[NotifyPropertyChangedRecipients]
|
|
||||||
public partial int DockWindowHeight { get; set; }
|
|
||||||
|
|
||||||
public void OnLyricsSearchProvidersReordered()
|
public void OnLyricsSearchProvidersReordered()
|
||||||
{
|
{
|
||||||
_settingsService.LyricsSearchProvidersInfo = [.. LyricsSearchProvidersInfo];
|
_settingsService.LyricsSearchProvidersInfo = [.. LyricsSearchProvidersInfo];
|
||||||
@@ -525,212 +240,5 @@ namespace BetterLyrics.WinUI3.ViewModels
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
partial void OnDockPlacementChanged(DockPlacement value)
|
|
||||||
{
|
|
||||||
_settingsService.DockPlacement = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsScrollEasingTypeChanged(EasingType value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsScrollEasingType = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsScrollDurationChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsScrollDuration = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsBackgroundThemeChanged(ElementTheme value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsBackgroundTheme = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsFontStrokeWidthChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsFontStrokeWidth = value;
|
|
||||||
}
|
|
||||||
partial void OnIgnoreFullscreenWindowChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.IgnoreFullscreenWindow = value;
|
|
||||||
}
|
|
||||||
partial void OnSelectedTargetLanguageIndexChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.SelectedTargetLanguageIndex = value;
|
|
||||||
}
|
|
||||||
partial void OnLibreTranslateServerChanged(string value)
|
|
||||||
{
|
|
||||||
_settingsService.LibreTranslateServer = value;
|
|
||||||
}
|
|
||||||
partial void OnLXMusicServerChanged(string value)
|
|
||||||
{
|
|
||||||
_settingsService.LXMusicServer = value;
|
|
||||||
}
|
|
||||||
partial void OnAutoStartWindowTypeChanged(AutoStartWindowType value)
|
|
||||||
{
|
|
||||||
_settingsService.AutoStartWindowType = value;
|
|
||||||
}
|
|
||||||
partial void OnAutoLockOnDesktopModeChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.AutoLockOnDesktopMode = value;
|
|
||||||
}
|
|
||||||
partial void OnCoverImageRadiusChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.CoverImageRadius = value;
|
|
||||||
}
|
|
||||||
partial void OnCoverOverlayBlurAmountChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.CoverOverlayBlurAmount = value;
|
|
||||||
}
|
|
||||||
partial void OnCoverAcrylicEffectAmountChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.CoverAcrylicEffectAmount = value;
|
|
||||||
}
|
|
||||||
partial void OnCoverOverlayOpacityChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.CoverOverlayOpacity = value;
|
|
||||||
}
|
|
||||||
partial void OnIsDynamicCoverOverlayEnabledChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.IsDynamicCoverOverlayEnabled = value;
|
|
||||||
}
|
|
||||||
partial void OnLanguageChanged(Enums.Language value)
|
|
||||||
{
|
|
||||||
switch (value)
|
|
||||||
{
|
|
||||||
case Enums.Language.FollowSystem:
|
|
||||||
ApplicationLanguages.PrimaryLanguageOverride = "";
|
|
||||||
break;
|
|
||||||
case Enums.Language.English:
|
|
||||||
ApplicationLanguages.PrimaryLanguageOverride = "en-US";
|
|
||||||
break;
|
|
||||||
case Enums.Language.SimplifiedChinese:
|
|
||||||
ApplicationLanguages.PrimaryLanguageOverride = "zh-CN";
|
|
||||||
break;
|
|
||||||
case Enums.Language.TraditionalChinese:
|
|
||||||
ApplicationLanguages.PrimaryLanguageOverride = "zh-TW";
|
|
||||||
break;
|
|
||||||
case Enums.Language.Japanese:
|
|
||||||
ApplicationLanguages.PrimaryLanguageOverride = "ja-JP";
|
|
||||||
break;
|
|
||||||
case Enums.Language.Korean:
|
|
||||||
ApplicationLanguages.PrimaryLanguageOverride = "ko-KR";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
_settingsService.Language = Language;
|
|
||||||
}
|
|
||||||
partial void OnIsFanLyricsEnabledChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.IsFanLyricsEnabled = value;
|
|
||||||
}
|
|
||||||
partial void OnIsLyricsGlowEffectEnabledChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.IsLyricsGlowEffectEnabled = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsAlignmentTypeChanged(TextAlignmentType value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsAlignmentType = value;
|
|
||||||
}
|
|
||||||
partial void OnSongInfoAlignmentTypeChanged(TextAlignmentType value)
|
|
||||||
{
|
|
||||||
_settingsService.SongInfoAlignmentType = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsBlurAmountChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsBlurAmount = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsCustomBgFontColorChanged(Color value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsCustomBgFontColor = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsCustomFgFontColorChanged(Color value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsCustomFgFontColor = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsCustomStrokeFontColorChanged(Color value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsCustomStrokeFontColor = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsBgFontColorTypeChanged(LyricsFontColorType value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsBgFontColorType = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsFgFontColorTypeChanged(LyricsFontColorType value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsFgFontColorType = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsStrokeFontColorTypeChanged(LyricsFontColorType value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsStrokeFontColorType = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsFontSizeChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsFontSize = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsFontWeightChanged(LyricsFontWeight value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsFontWeight = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsGlowEffectScopeChanged(LineRenderingType value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsGlowEffectScope = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsHighlightScopeChanged(LineRenderingType value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsHighlightScope = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsLineSpacingFactorChanged(float value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsLineSpacingFactor = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsVerticalEdgeOpacityChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsVerticalEdgeOpacity = value;
|
|
||||||
}
|
|
||||||
partial void OnTimelineSyncThresholdChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.TimelineSyncThreshold = value;
|
|
||||||
}
|
|
||||||
partial void OnIsLyricsFloatAnimationEnabledChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.IsLyricsFloatAnimationEnabled = value;
|
|
||||||
}
|
|
||||||
partial void OnResetPositionOffsetOnSongChangedChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.ResetPositionOffsetOnSongChanged = value;
|
|
||||||
}
|
|
||||||
partial void OnLyricsBgFontOpacityChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsBgFontOpacity = value;
|
|
||||||
}
|
|
||||||
partial void OnHideWindowWhenNotPlayingChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.HideWindowWhenNotPlaying = value;
|
|
||||||
}
|
|
||||||
partial void OnDockWindowHeightChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.DockWindowHeight = value;
|
|
||||||
}
|
|
||||||
partial void OnSelectedFontFamilyIndexChanged(int value)
|
|
||||||
{
|
|
||||||
_settingsService.SelectedFontFamilyIndex = value;
|
|
||||||
LyricsFontFamily = SystemFontNames[value];
|
|
||||||
}
|
|
||||||
partial void OnLyricsFontFamilyChanged(string value)
|
|
||||||
{
|
|
||||||
_settingsService.LyricsFontFamily = value;
|
|
||||||
}
|
|
||||||
partial void OnIsDragEverywhereEnabledChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.IsDragEverywhereEnabled = value;
|
|
||||||
|
|
||||||
LyricsWindow? lyricsWindow = WindowHelper.GetWindowByWindowType<LyricsWindow>();
|
|
||||||
if (lyricsWindow != null)
|
|
||||||
{
|
|
||||||
lyricsWindow.UpdateTitleBarArea();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
partial void OnIsLibreTranslateEnabledChanged(bool value)
|
|
||||||
{
|
|
||||||
_settingsService.IsLibreTranslateEnabled = value;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -694,16 +694,16 @@
|
|||||||
<TextBlock
|
<TextBlock
|
||||||
Margin="0,0,14,0"
|
Margin="0,0,14,0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
Text="{Binding ElementName=LyricsFontSizeSlider, Path=Value, Mode=OneWay}" />
|
Text="{Binding ElementName=LyricsStandardFontSizeSlider, Path=Value, Mode=OneWay}" />
|
||||||
<Slider
|
<Slider
|
||||||
x:Name="LyricsFontSizeSlider"
|
x:Name="LyricsStandardFontSizeSlider"
|
||||||
Maximum="96"
|
Maximum="96"
|
||||||
Minimum="12"
|
Minimum="12"
|
||||||
SnapsTo="Ticks"
|
SnapsTo="Ticks"
|
||||||
StepFrequency="2"
|
StepFrequency="2"
|
||||||
TickFrequency="2"
|
TickFrequency="2"
|
||||||
TickPlacement="Outside"
|
TickPlacement="Outside"
|
||||||
Value="{x:Bind ViewModel.LyricsFontSize, Mode=TwoWay}" />
|
Value="{x:Bind ViewModel.LyricsStandardFontSize, Mode=TwoWay}" />
|
||||||
</StackPanel>
|
</StackPanel>
|
||||||
</controls:SettingsCard>
|
</controls:SettingsCard>
|
||||||
|
|
||||||
|
|||||||
225
README.CN.md
225
README.CN.md
@@ -2,59 +2,118 @@
|
|||||||
|
|
||||||
<a href="https://github.com/jayfunc/BetterLyrics/blob/dev/README.md">_**🌐 Click here to see the English version**_</a>
|
<a href="https://github.com/jayfunc/BetterLyrics/blob/dev/README.md">_**🌐 Click here to see the English version**_</a>
|
||||||
|
|
||||||
<a href="https://github.com/jayfunc/BetterLyrics/blob/dev/FAQ/FAQ.md">_**❓ 点击查看常见问题(FAQ)**_</a>
|
<a href="https://github.com/jayfunc/BetterLyrics/blob/dev/FAQ/FAQ.md">_**❓ 点此查看常见问题(FAQ)**_</a>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="BetterLyrics.WinUI3/BetterLyrics.WinUI3/Assets/Logo.png" alt="" width="64"/>
|
<img src="BetterLyrics.WinUI3/BetterLyrics.WinUI3/Assets/Logo.png" alt="" width="96">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2 align="center">
|
<h2 align="center">
|
||||||
BetterLyrics
|
BetterLyrics
|
||||||
</h2>
|
</h2>
|
||||||
<h4 align="center">
|
<h4 align="center">
|
||||||
基于 WinUI 3 构建的流畅动态歌词显示工具
|
一个基于 WinUI 3 和 Win2D 构建的动态歌词显示工具 —— 支持本地播放,并可监听多种播放器
|
||||||
</h3>
|
</h4>
|
||||||
|
|
||||||
## 🎉 本项目已获得少数派推荐!
|
## 🎉 本项目已被少数派推荐!
|
||||||
|
|
||||||
查看文章:[BetterLyrics – 专为 Windows 设计的沉浸式流畅歌词显示工具](https://sspai.com/post/101028)
|
查看文章:[BetterLyrics - 一款专为 Windows 打造的沉浸式流畅歌词显示软件](https://sspai.com/post/101028)
|
||||||
|
|
||||||
## 🔈 反馈交流群
|
## 🔈 反馈与交流群
|
||||||
|
|
||||||
- [QQ](https://qun.qq.com/universal-share/share?ac=1&authKey=4Q%2BYTq3wZldYpF5SbS5c19ECFsiYoLZFAIcBNNzYpBUtiEjaZ8sZ%2F%2BnFN0qw3lad&busi_data=eyJncm91cENvZGUiOiIxMDU0NzAwMzg4IiwidG9rZW4iOiJiVnhqemVYN0N5QVc3b1ZkR24wWmZOTUtvUkJoWm1JRWlaWW5iZnlBcXJtZUtGc2FFTHNlUlFZMi9iRm03cWF5IiwidWluIjoiMTM5NTczOTY2MCJ9&data=39UmAihyH_o6CZaOs7nk2mO_lz2ruODoDou6pxxh7utcxP4WF5sbDBDOPvZ_Wqfzeey4441anegsLYQJxkrBAA&svctype=4&tempid=h5_group_info) (1054700388) | [Discord](https://discord.gg/5yAQPnyCKv) | [Telegram](https://t.me/+svhSLZ7awPsxNGY1)
|
- [<img src="BetterLyrics.WinUI3\BetterLyrics.WinUI3\Assets\QQ.png" height="20"> QQ 群](https://qun.qq.com/universal-share/share?ac=1&authKey=4Q%2BYTq3wZldYpF5SbS5c19ECFsiYoLZFAIcBNNzYpBUtiEjaZ8sZ%2F%2BnFN0qw3lad&busi_data=eyJncm91cENvZGUiOiIxMDU0NzAwMzg4IiwidG9rZW4iOiJiVnhqemVYN0N5QVc3b1ZkR24wWmZOTUtvUkJoWm1JRWlaWW5iZnlBcXJtZUtGc2FFTHNlUlFZMi9iRm03cWF5IiwidWluIjoiMTM5NTczOTY2MCJ9&data=39UmAihyH_o6CZaOs7nk2mO_lz2ruODoDou6pxxh7utcxP4WF5sbDBDOPvZ_Wqfzeey4441anegsLYQJxkrBAA&svctype=4&tempid=h5_group_info)(群号:1054700388)
|
||||||
|
- [<img src="BetterLyrics.WinUI3\BetterLyrics.WinUI3\Assets\Discord.png" height="12"> Discord](https://discord.gg/5yAQPnyCKv)
|
||||||
|
- [<img src="BetterLyrics.WinUI3\BetterLyrics.WinUI3\Assets\Telegram.png" height="16"> Telegram](https://t.me/+svhSLZ7awPsxNGY1)
|
||||||
|
|
||||||
## 🌟 核心亮点功能
|
## 🌟 核心特色
|
||||||
|
|
||||||
- 🌠 美观的用户界面
|
- 🌠 **优雅的用户界面**
|
||||||
- 流畅的动画与视觉特效,打造赏心悦目的歌词体验
|
- 丰富流畅的动画与特效
|
||||||
- ↔️ 强大的歌词翻译功能
|
- ↔️ **强大的歌词翻译功能**
|
||||||
- 支持离线机器翻译,涵盖 30 种语言
|
- 支持离线翻译(支持 30 种语言)
|
||||||
- 自动读取本地歌词文件中的嵌入翻译
|
- 自动读取本地歌词文件中的双语翻译内容
|
||||||
- 🧩 多种歌词来源
|
- 🧩 **多种歌词来源支持**
|
||||||
- 本地存储
|
- 本地存储
|
||||||
- 音乐文件(支持嵌入歌词)
|
- 音乐文件(嵌入式歌词)
|
||||||
- [.lrc](<https://en.wikipedia.org/wiki/LRC_(file_format)>) 歌词文件(兼容标准格式和增强格式)
|
- [.lrc](https://zh.wikipedia.org/wiki/LRC) 文件(支持标准与增强格式)
|
||||||
- [.eslrc](https://github.com/ESLyric/release) 格式
|
- [.eslrc](https://github.com/ESLyric/release) 文件
|
||||||
- [.ttml](https://en.wikipedia.org/wiki/Timed_Text_Markup_Language) 格式
|
- [.ttml](https://zh.wikipedia.org/wiki/Timed_Text_Markup_Language) 文件
|
||||||
- 在线歌词服务
|
- 在线歌词源
|
||||||
- QQ 音乐
|
- QQ 音乐
|
||||||
- 网易云音乐
|
- 网易云音乐
|
||||||
- 酷狗音乐
|
- 酷狗音乐
|
||||||
- [amll-ttml-db](https://github.com/Steve-xmh/amll-ttml-db)
|
- [amll-ttml-db](https://github.com/Steve-xmh/amll-ttml-db)
|
||||||
- [LRCLIB](https://lrclib.net/)
|
- [LRCLIB](https://lrclib.net/)
|
||||||
- 🪟 多种歌词显示模式
|
|
||||||
- 标准模式
|
|
||||||
- 沉浸式歌词体验,搭配丰富动画与动态背景,听歌更享受
|
|
||||||
- 停靠模式
|
|
||||||
- 智能歌词栏固定在屏幕边缘,简洁美观、互不打扰
|
|
||||||
- 桌面模式
|
|
||||||
- 歌词悬浮于其他窗口之上,边听歌边工作两不误
|
|
||||||
- 🧠 智能行为支持
|
|
||||||
- 音乐播放器关闭后自动隐藏歌词窗口,干净整洁不打扰
|
|
||||||
|
|
||||||
> 本项目仍在开发中,最新版本可能存在 bug 和意外行为。
|
- 🎶 **支持多种播放器**
|
||||||
|
|
||||||
## 应用截图
|
- <details><summary>网易云音乐</summary>
|
||||||
|
|
||||||
|
- 请先安装 [BetterNCM 插件](https://microblock.cc/betterncm)。若安装后出现降级提示,请按提示将网易云降级至 2.10.13;
|
||||||
|
- 然后在插件市场安装 InfLink 插件,安装完成后重启网易云即可!
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- <details><summary>酷狗音乐</summary>
|
||||||
|
|
||||||
|
- 请确保酷狗设置中已开启“支持系统播放控制,如锁屏界面控制”
|
||||||
|
- 当前版本无法获取时间轴信息,意味着无法检测进度条的跳转
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- <details><summary>Apple Music</summary>
|
||||||
|
|
||||||
|
- 建议在设置中将“时间轴同步容差”调至 600ms 左右(设置 → 高级选项),否则歌词会前后晃动
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- <details><summary>foobar2000</summary>
|
||||||
|
|
||||||
|
- 请安装插件:https://github.com/dumbie/foo_mediacontrol
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- Spotify
|
||||||
|
- QQ 音乐
|
||||||
|
- PotPlayer
|
||||||
|
- Windows 自带媒体播放器
|
||||||
|
|
||||||
|
- <details><summary>LX Music</summary>
|
||||||
|
|
||||||
|
- 请在 LX Music 设置中开启“开放 API”
|
||||||
|
- 然后在 BetterLyrics 设置中填写 LX 服务器地址(通常是 http://127.0.0.1:23330)
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- <details><summary>MusicBee</summary>
|
||||||
|
|
||||||
|
- 请安装插件:https://github.com/HenryPDT/mb_MediaControl
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- <details><summary>iTunes</summary>
|
||||||
|
|
||||||
|
- 请安装插件:https://github.com/thewizrd/iTunes-SMTC
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- <details><summary>AIMP</summary>
|
||||||
|
|
||||||
|
- 请安装插件:https://www.aimp.ru/?do=catalog&rec_id=1097
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- 🪟 **多种展示模式**
|
||||||
|
- **标准模式**:沉浸式动画歌词 + 动态背景
|
||||||
|
- **吸附模式**:屏幕边缘浮动歌词条
|
||||||
|
- **桌面模式**:歌词悬浮在所有窗口之上
|
||||||
|
|
||||||
|
- 🧠 **智能行为**
|
||||||
|
- 检测播放器关闭自动隐藏歌词
|
||||||
|
|
||||||
|
> 本项目仍在开发中,开发分支可能存在 bug 或异常行为。
|
||||||
|
|
||||||
|
## 软件截图
|
||||||
|
|
||||||
### 标准模式
|
### 标准模式
|
||||||
|
|
||||||
@@ -68,7 +127,7 @@ BetterLyrics
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 悬浮模式
|
### 吸附模式
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@@ -80,95 +139,69 @@ BetterLyrics
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
## 演示视频
|
## 使用演示
|
||||||
|
|
||||||
观看我们的介绍视频(2025 年 7 月 7 日上传):[B 站链接](https://www.bilibili.com/video/BV1zjGjzfEXh)
|
观看我们于 2025 年 7 月 7 日上传的哔哩哔哩介绍视频:[点击这里](https://www.bilibili.com/video/BV1zjGjzfEXh)
|
||||||
|
|
||||||
## 已测试的音乐播放器
|
## 立即下载试用
|
||||||
|
|
||||||
- 网易云音乐
|
### Microsoft Store 推荐安装方式
|
||||||
- 请先安装 [BetterNCM 插件](https://microblock.cc/betterncm) 安装完成后如若弹出降级指引,请根据指引完成网易云音乐的降级操作(降级至 2.10.13);
|
|
||||||
- 之后请在 PluginMarket 内安装 InfLink 插件,安装完成后请重启网易云音乐。至此,所有预备操作均已完成,尽情享用吧!
|
|
||||||
- 酷狗音乐
|
|
||||||
- 请确保酷狗音乐设置项 “支持系统播放控件,如锁屏界面” 已开启
|
|
||||||
- 不会广播时间线信息,这意味着当您在酷狗音乐中更改播放进度时,BetterLyrics 无法检测到此更改。
|
|
||||||
- Apple Music
|
|
||||||
- 确保您在设置中将时间线阈值设置为约 600 毫秒(进入"设置"-"高级选项"进行更改),否则歌词会不断前后跳动。
|
|
||||||
- foobar2000
|
|
||||||
- 确保您安装了 https://github.com/dumbie/foo_mediacontrol 插件
|
|
||||||
- Spotify
|
|
||||||
- QQ 音乐
|
|
||||||
- PotPlayer
|
|
||||||
- 媒体播放器(系统自带)
|
|
||||||
- LX 音乐
|
|
||||||
- 请确保您已在 LX 音乐设置页面启用“开放 API”
|
|
||||||
- 然后打开 BetterLyrics,进入设置,点击“高级选项”,输入您的 LX 音乐服务器地址(例如 http://127.0.0.1:23330)即可
|
|
||||||
- MusicBee
|
|
||||||
- 请先安装 https://github.com/HenryPDT/mb_MediaControl
|
|
||||||
- iTunes
|
|
||||||
- 请先安装 https://github.com/thewizrd/iTunes-SMTC
|
|
||||||
- AIMP
|
|
||||||
- 请先安装 https://www.aimp.ru/?do=catalog&rec_id=1097
|
|
||||||
|
|
||||||
## 立即下载体验
|
|
||||||
|
|
||||||
### Microsoft Store
|
|
||||||
|
|
||||||
<a href="https://apps.microsoft.com/detail/9P1WCD1P597R?referrer=appbadge&mode=direct">
|
<a href="https://apps.microsoft.com/detail/9P1WCD1P597R?referrer=appbadge&mode=direct">
|
||||||
<img src="https://get.microsoft.com/images/en-us%20dark.svg" width="200"/>
|
<img src="https://get.microsoft.com/images/en-us%20dark.svg" width="200"/>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
**最简单**的获取方式,**无限制**免费试用或购买(免费版与付费版**功能完全相同**)
|
**最方便**的获取方式,支持**永久免费试用**与购买(免费版与付费版**无功能差异**)
|
||||||
|
|
||||||
☕ 如果您觉得本软件好用,请考虑在 **Microsoft Store** 中购买支持开发者 🧧,非常感谢您的支持!🥰
|
☕ 如果你觉得本软件对你有帮助,欢迎在 Microsoft Store **支持我一杯奶茶** 🧧🥰
|
||||||
|
|
||||||
> 稳定版本发布时,Microsoft Store 将永远是第一个收到更新的渠道。
|
> 一旦有稳定版发布,Microsoft Store 将是第一更新渠道。
|
||||||
|
|
||||||
### Google Drive
|
### 备用下载方式:Google Drive
|
||||||
|
|
||||||
或从 Google Drive 获取(请查看[发布页面](https://github.com/jayfunc/BetterLyrics/releases)获取链接)
|
你也可以在 [发布页](https://github.com/jayfunc/BetterLyrics/releases) 找到 Google Drive 下载链接
|
||||||
|
|
||||||
> 请注意您下载的是".zip"文件,安装指南请参考[此文档](How2Install/How2Install.md)。
|
> 下载为 `.zip` 压缩包,安装方法请参阅:[安装指南](How2Install/How2Install.md)
|
||||||
|
|
||||||
## 特别感谢
|
## 致谢
|
||||||
|
|
||||||
- [Lyricify-Lyrics-Helper](https://github.com/WXRIW/Lyricify-Lyrics-Helper)
|
- [Lyricify-Lyrics-Helper](https://github.com/WXRIW/Lyricify-Lyrics-Helper)
|
||||||
- 提供 QQ、网易、酷狗音源的歌词获取、解密和解析
|
- 提供 QQ、网易、酷狗歌词解析与解密支持
|
||||||
- [LRCLIB](https://lrclib.net/)
|
- [LRCLIB](https://lrclib.net/)
|
||||||
- LRCLIB 歌词 API 提供商
|
- 歌词 API 提供方
|
||||||
- [Audio Tools Library (ATL) for .NET](https://github.com/Zeugma440/atldotnet)
|
- [Audio Tools Library (ATL) for .NET](https://github.com/Zeugma440/atldotnet)
|
||||||
- 用于提取音乐文件中的图片
|
- 用于提取音乐封面图像
|
||||||
- [WinUIEx](https://github.com/dotMorten/WinUIEx)
|
- [WinUIEx](https://github.com/dotMorten/WinUIEx)
|
||||||
- 提供便捷的 Win32 API 窗口操作方式
|
- 提供窗口相关 Win32 API 简化访问方式
|
||||||
- [TagLib#](https://github.com/mono/taglib-sharp)
|
- [TagLib#](https://github.com/mono/taglib-sharp)
|
||||||
- 用于读取原始歌词内容
|
- 用于读取音频文件中的歌词内容
|
||||||
- [Vanara](https://github.com/dahall/Vanara)
|
- [Vanara](https://github.com/dahall/Vanara)
|
||||||
- Win32 API 包装器
|
- Win32 API 封装库
|
||||||
- [Stackoverflow - How to animate Margin property in WPF](https://stackoverflow.com/a/21542882/11048731)
|
- [StackOverflow - 如何为 WPF 动画 Margin 属性](https://stackoverflow.com/a/21542882/11048731)
|
||||||
- [DevWinUI](https://github.com/ghost1372/DevWinUI)
|
- [DevWinUI](https://github.com/ghost1372/DevWinUI)
|
||||||
- [Bilibili -【WinUI3】SystemBackdropController:定义云母、亚克力效果](https://www.bilibili.com/video/BV1PY4FevEkS)
|
- [Bilibili -【WinUI3】SystemBackdropController 讲解](https://www.bilibili.com/video/BV1PY4FevEkS)
|
||||||
- [cnblogs - .NET App 与 Windows 系统媒体控制(SMTC)交互](https://www.cnblogs.com/TwilightLemon/p/18279496)
|
- [博客园 - .NET App 与 SMTC 控制](https://www.cnblogs.com/TwilightLemon/p/18279496)
|
||||||
- [Win2D 中的游戏循环:CanvasAnimatedControl](https://www.cnblogs.com/walterlv/p/10236395.html)
|
- [Win2D 中的游戏循环介绍](https://www.cnblogs.com/walterlv/p/10236395.html)
|
||||||
- [r2d2rigo/Win2D-Samples](https://github.com/r2d2rigo/Win2D-Samples/blob/master/IrisBlurWin2D/IrisBlurWin2D/MainPage.xaml.cs)
|
- [Win2D 示例 - Iris Blur](https://github.com/r2d2rigo/Win2D-Samples/blob/master/IrisBlurWin2D/IrisBlurWin2D/MainPage.xaml.cs)
|
||||||
- [CommunityToolkit - 从入门到精通](https://mvvm.coldwind.top/)
|
- [CommunityToolkit 教程](https://mvvm.coldwind.top/)
|
||||||
|
|
||||||
## 设计灵感来源
|
## 灵感来源
|
||||||
|
|
||||||
- [refined-now-playing-netease](https://github.com/solstice23/refined-now-playing-netease)
|
- [refined-now-playing-netease](https://github.com/solstice23/refined-now-playing-netease)
|
||||||
- [Lyricify-App](https://github.com/WXRIW/Lyricify-App)
|
- [Lyricify-App](https://github.com/WXRIW/Lyricify-App)
|
||||||
- [椒盐音乐 Salt Player](https://moriafly.com/program/salt-player)
|
- [椒盐音乐 Salt Player](https://moriafly.com/program/salt-player)
|
||||||
- [MyToolBar](https://github.com/TwilightLemon/MyToolBar)
|
- [MyToolBar](https://github.com/TwilightLemon/MyToolBar)
|
||||||
|
|
||||||
## ✍️ 帮助我们翻译成您的语言
|
## ✍️ 欢迎协助翻译!
|
||||||
|
|
||||||
找不到您的语言?
|
找不到你的语言?
|
||||||
别担心!立即开始翻译,成为贡献者!😆
|
没关系!快来成为贡献者的一员吧!😆
|
||||||
点击[链接](https://crowdin.com/project/betterlyrics/invite?h=d767e4f2dbd832d8fcdb6f7e5a198b402502866),立即通过 Crowdin 将这款应用翻译成您的语言!
|
点击此 [链接](https://crowdin.com/project/betterlyrics/invite?h=d767e4f2dbd832d8fcdb6f7e5a198b402502866) 使用 Crowdin 在线翻译!
|
||||||
|
|
||||||
## Star 历史
|
## Star 增长趋势
|
||||||
|
|
||||||
[](https://www.star-history.com/#jayfunc/BetterLyrics&Date)
|
[](https://www.star-history.com/#jayfunc/BetterLyrics&Date)
|
||||||
|
|
||||||
## 欢迎提交问题和拉取请求
|
## 欢迎反馈和 PR!
|
||||||
|
|
||||||
如果您发现 bug,请在 issues 中提交;如果您有任何想法,也欢迎在这里分享。
|
发现 bug 请提交到 Issues,如有想法欢迎一起参与开发!
|
||||||
|
|||||||
97
README.md
97
README.md
@@ -3,22 +3,25 @@
|
|||||||
<a href="https://github.com/jayfunc/BetterLyrics/blob/dev/FAQ/FAQ.md">_**❓ Click here to view frequently asked questions (FAQ)**_</a>
|
<a href="https://github.com/jayfunc/BetterLyrics/blob/dev/FAQ/FAQ.md">_**❓ Click here to view frequently asked questions (FAQ)**_</a>
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="BetterLyrics.WinUI3/BetterLyrics.WinUI3/Assets/Logo.png" alt="" width="64"/>
|
<img src="BetterLyrics.WinUI3/BetterLyrics.WinUI3/Assets/Logo.png" alt="" width="64">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2 align="center">
|
<h2 align="center">
|
||||||
BetterLyrics
|
BetterLyrics
|
||||||
</h2>
|
</h2>
|
||||||
<h4 align="center">
|
<h4 align="center">
|
||||||
Your smooth dynamic lyrics display tool built with WinUI 3
|
Your dynamic lyrics display tool built with WinUI 3 and Win2D — works with local playback and other players
|
||||||
</h3>
|
</h3>
|
||||||
|
|
||||||
## 🎉 This project was featured by SSPAI!
|
## 🎉 This project was featured by SSPAI!
|
||||||
|
|
||||||
Check out the article: [BetterLyrics – An immersive and smooth lyrics display tool designed for Windows](https://sspai.com/post/101028)
|
Check out the article: [BetterLyrics – An immersive and smooth lyrics display tool designed for Windows](https://sspai.com/post/101028)
|
||||||
|
|
||||||
## 🔈 Feedback and chat group
|
## 🔈 Feedback and chat group
|
||||||
|
|
||||||
- [QQ](https://qun.qq.com/universal-share/share?ac=1&authKey=4Q%2BYTq3wZldYpF5SbS5c19ECFsiYoLZFAIcBNNzYpBUtiEjaZ8sZ%2F%2BnFN0qw3lad&busi_data=eyJncm91cENvZGUiOiIxMDU0NzAwMzg4IiwidG9rZW4iOiJiVnhqemVYN0N5QVc3b1ZkR24wWmZOTUtvUkJoWm1JRWlaWW5iZnlBcXJtZUtGc2FFTHNlUlFZMi9iRm03cWF5IiwidWluIjoiMTM5NTczOTY2MCJ9&data=39UmAihyH_o6CZaOs7nk2mO_lz2ruODoDou6pxxh7utcxP4WF5sbDBDOPvZ_Wqfzeey4441anegsLYQJxkrBAA&svctype=4&tempid=h5_group_info) (1054700388) | [Discord](https://discord.gg/5yAQPnyCKv) | [Telegram](https://t.me/+svhSLZ7awPsxNGY1)
|
- [<img src="BetterLyrics.WinUI3\BetterLyrics.WinUI3\Assets\QQ.png" height="20"> QQ](https://qun.qq.com/universal-share/share?ac=1&authKey=4Q%2BYTq3wZldYpF5SbS5c19ECFsiYoLZFAIcBNNzYpBUtiEjaZ8sZ%2F%2BnFN0qw3lad&busi_data=eyJncm91cENvZGUiOiIxMDU0NzAwMzg4IiwidG9rZW4iOiJiVnhqemVYN0N5QVc3b1ZkR24wWmZOTUtvUkJoWm1JRWlaWW5iZnlBcXJtZUtGc2FFTHNlUlFZMi9iRm03cWF5IiwidWluIjoiMTM5NTczOTY2MCJ9&data=39UmAihyH_o6CZaOs7nk2mO_lz2ruODoDou6pxxh7utcxP4WF5sbDBDOPvZ_Wqfzeey4441anegsLYQJxkrBAA&svctype=4&tempid=h5_group_info) (1054700388)
|
||||||
|
- [<img src="BetterLyrics.WinUI3\BetterLyrics.WinUI3\Assets\Discord.png" height="12"> Discord](https://discord.gg/5yAQPnyCKv)
|
||||||
|
- [<img src="BetterLyrics.WinUI3\BetterLyrics.WinUI3\Assets\Telegram.png" height="16"> Telegram](https://t.me/+svhSLZ7awPsxNGY1)
|
||||||
|
|
||||||
## 🌟 Highlighted features
|
## 🌟 Highlighted features
|
||||||
|
|
||||||
@@ -39,9 +42,67 @@ Check out the article: [BetterLyrics – An immersive and smooth lyrics display
|
|||||||
- 酷狗音乐 Kugou Music
|
- 酷狗音乐 Kugou Music
|
||||||
- [amll-ttml-db](https://github.com/Steve-xmh/amll-ttml-db)
|
- [amll-ttml-db](https://github.com/Steve-xmh/amll-ttml-db)
|
||||||
- [LRCLIB](https://lrclib.net/)
|
- [LRCLIB](https://lrclib.net/)
|
||||||
|
- 🎶 **Multiple Music Players Supported**
|
||||||
|
|
||||||
|
- <details><summary>NetEase Cloud Music</summary>
|
||||||
|
|
||||||
|
- Please install the [BetterNCM plugin](https://microblock.cc/betterncm) first. If a downgrade guide pops up after the installation, please follow the guide to complete the downgrade of NetEase Cloud Music (downgrade to 2.10.13);
|
||||||
|
- After that, please install the InfLink plugin in PluginMarket. After the installation is complete, please restart NetEase Cloud Music. At this point, all preparatory operations have been completed, enjoy it!
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
- <details><summary>Kugou Music</summary>
|
||||||
|
|
||||||
|
- Please make sure that the Kugou Music setting "Support system playback controls, such as lock screen interface" is turned on
|
||||||
|
- No timeline information broadcasted, which means when you change timeline position in Kugou Music, BetterLyrics has no way to detect this change.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
- <details><summary>Apple Music</summary>
|
||||||
|
|
||||||
|
- Make sure you have set timeline threshold to around 600 ms in settings (Go to "Settings" - "Advanced option" to change), otherwise, the lyrics will be moving forward and afterward constantly.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
- <details><summary>foobar2000</summary>
|
||||||
|
|
||||||
|
- Make sure you have https://github.com/dumbie/foo_mediacontrol installed with it
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
- Spotify
|
||||||
|
- QQ Music
|
||||||
|
- PotPlayer
|
||||||
|
- Media Player (System)
|
||||||
|
|
||||||
|
- <details><summary>LX Music</summary>
|
||||||
|
|
||||||
|
- Please make sure you have enabled "Open API" in LX Music settings page
|
||||||
|
- Then open BetterLyrics, go to settings, go to "Advanced options", input your LX Music server address (mostly like http://127.0.0.1:23330) and there you go!
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
- <details><summary>MusicBee</summary>
|
||||||
|
|
||||||
|
- Please install https://github.com/HenryPDT/mb_MediaControl before using
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
- <details><summary>iTunes</summary>
|
||||||
|
|
||||||
|
- Please install https://github.com/thewizrd/iTunes-SMTC before using
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
- <details><summary>AIMP</summary>
|
||||||
|
|
||||||
|
- Please install https://www.aimp.ru/?do=catalog&rec_id=1097 before using
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
- 🪟 **Multiple Display Modes**
|
- 🪟 **Multiple Display Modes**
|
||||||
- **Standard Mode**
|
- **Standard Mode**
|
||||||
- Enjoy an immersive listening journey with rich lyrics animations and beautifully dynamic backgrounds
|
- Enjoy an immersive listening journey with rich lyrics animations and beautifully dynamic backgrounds
|
||||||
- **Dock Mode**
|
- **Dock Mode**
|
||||||
- A smart animated lyrics bar docked to your screen edge
|
- A smart animated lyrics bar docked to your screen edge
|
||||||
- **Desktop Mode**
|
- **Desktop Mode**
|
||||||
@@ -81,32 +142,6 @@ Check out the article: [BetterLyrics – An immersive and smooth lyrics display
|
|||||||
|
|
||||||
Watch our introduction video (uploaded on 7 July 2025) on Bilibili [here](https://www.bilibili.com/video/BV1zjGjzfEXh).
|
Watch our introduction video (uploaded on 7 July 2025) on Bilibili [here](https://www.bilibili.com/video/BV1zjGjzfEXh).
|
||||||
|
|
||||||
## Tested music player
|
|
||||||
|
|
||||||
- NetEase Cloud Music
|
|
||||||
- Please install the [BetterNCM plugin](https://microblock.cc/betterncm) first. If a downgrade guide pops up after the installation, please follow the guide to complete the downgrade of NetEase Cloud Music (downgrade to 2.10.13);
|
|
||||||
- After that, please install the InfLink plugin in PluginMarket. After the installation is complete, please restart NetEase Cloud Music. At this point, all preparatory operations have been completed, enjoy it!
|
|
||||||
- Kugou Music
|
|
||||||
- Please make sure that the Kugou Music setting "Support system playback controls, such as lock screen interface" is turned on
|
|
||||||
- No timeline information broadcasted, which means when you change timeline position in Kugou Music, BetterLyrics has no way to detect this change.
|
|
||||||
- Apple Music
|
|
||||||
- Make sure you have set timeline threshold to around 600 ms in settings (Go to "Settings" - "Advanced option" to change), otherwise, the lyrics will be moving forward and afterward constantly.
|
|
||||||
- foobar2000
|
|
||||||
- Make sure you have https://github.com/dumbie/foo_mediacontrol installed with it
|
|
||||||
- Spotify
|
|
||||||
- QQ Music
|
|
||||||
- PotPlayer
|
|
||||||
- Media Player (System)
|
|
||||||
- LX Music
|
|
||||||
- Please make sure you have enabled "Open API" in LX Music settings page
|
|
||||||
- Then open BetterLyrics, go to settings, go to "Advanced options", input your LX Music server address (mostly like http://127.0.0.1:23330) and there you go!
|
|
||||||
- MusicBee
|
|
||||||
- Please install https://github.com/HenryPDT/mb_MediaControl before using
|
|
||||||
- iTunes
|
|
||||||
- Please install https://github.com/thewizrd/iTunes-SMTC before using
|
|
||||||
- AIMP
|
|
||||||
- Please install https://www.aimp.ru/?do=catalog&rec_id=1097 before using
|
|
||||||
|
|
||||||
## Try it now
|
## Try it now
|
||||||
|
|
||||||
### Microsoft Store
|
### Microsoft Store
|
||||||
@@ -168,4 +203,4 @@ Click the [link](https://crowdin.com/project/betterlyrics/invite?h=d767e4f2dbd83
|
|||||||
|
|
||||||
## Any issues and PRs are welcomed
|
## Any issues and PRs are welcomed
|
||||||
|
|
||||||
If you find a bug please file it in issues or if you have any ideas feel free to share it here.
|
If you find a bug please file it in issues or if you have any ideas feel free to share it here.
|
||||||
|
|||||||
Reference in New Issue
Block a user