mirror of
https://github.com/jayfunc/BetterLyrics.git
synced 2026-01-13 03:34:55 +08:00
update version to 1.0.40.0 and refactor image drawing methods for better opacity handling
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
<Identity
|
||||
Name="37412.BetterLyrics"
|
||||
Publisher="CN=E1428B0E-DC1D-4EA4-ACB1-4556569D5BA9"
|
||||
Version="1.0.39.0" />
|
||||
Version="1.0.40.0" />
|
||||
|
||||
<mp:PhoneIdentity PhoneProductId="ca4a4830-fc19-40d9-b823-53e2bff3d816" PhonePublisherId="00000000-0000-0000-0000-000000000000"/>
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ namespace BetterLyrics.WinUI3.ViewModels
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawBackgroundImgae(ICanvasAnimatedControl control, CanvasDrawingSession ds, CanvasBitmap canvasBitmap, float opacity)
|
||||
private void DrawBackgroundImgae(OpacityEffect effect, CanvasDrawingSession ds, CanvasBitmap canvasBitmap)
|
||||
{
|
||||
float imageWidth = (float)canvasBitmap.Size.Width;
|
||||
float imageHeight = (float)canvasBitmap.Size.Height;
|
||||
@@ -107,62 +107,12 @@ namespace BetterLyrics.WinUI3.ViewModels
|
||||
float x = _canvasWidth / 2 - imageWidth * scaleFactor / 2;
|
||||
float y = _canvasHeight / 2 - imageHeight * scaleFactor / 2;
|
||||
|
||||
// Original source: https://zhuanlan.zhihu.com/p/37178216
|
||||
float gain = _lyricsBgBrightnessTransition.Value;
|
||||
|
||||
float whiteX = 1 - 0.5f * gain;
|
||||
float whiteY = 0.5f + 0.5f * gain;
|
||||
float blackX = 0.5f - 0.5f * gain;
|
||||
float blackY = 0 + 0.5f * gain;
|
||||
|
||||
ds.DrawImage(new OpacityEffect
|
||||
{
|
||||
Source = new BrightnessEffect
|
||||
{
|
||||
Source = new ScaleEffect
|
||||
{
|
||||
Scale = new Vector2(scaleFactor),
|
||||
Source = canvasBitmap,
|
||||
},
|
||||
WhitePoint = new Vector2(whiteX, whiteY),
|
||||
BlackPoint = new Vector2(blackX, blackY),
|
||||
},
|
||||
Opacity = opacity,
|
||||
}, new Vector2(x, y));
|
||||
ds.DrawImage(effect, new Vector2(x, y));
|
||||
}
|
||||
|
||||
private void DrawForegroundImgae(ICanvasAnimatedControl control, CanvasDrawingSession ds, CanvasBitmap canvasBitmap, float opacity)
|
||||
private void DrawForegroundImgae(OpacityEffect effect, CanvasDrawingSession ds)
|
||||
{
|
||||
if (opacity == 0) return;
|
||||
|
||||
float imageWidth = (float)canvasBitmap.Size.Width;
|
||||
float imageHeight = (float)canvasBitmap.Size.Height;
|
||||
|
||||
float scaleFactor = _albumArtSize / Math.Min(imageWidth, imageHeight);
|
||||
if (scaleFactor < 0.01f) return;
|
||||
|
||||
float cornerRadius = _albumArtCornerRadius / 100f * _albumArtSize / 2;
|
||||
|
||||
using var cornerRadiusMask = new CanvasCommandList(control.Device);
|
||||
using var cornerRadiusMaskDs = cornerRadiusMask.CreateDrawingSession();
|
||||
cornerRadiusMaskDs.FillRoundedRectangle(
|
||||
new Rect(0, 0, imageWidth * scaleFactor, imageHeight * scaleFactor),
|
||||
cornerRadius, cornerRadius, Colors.White
|
||||
);
|
||||
|
||||
ds.DrawImage(new OpacityEffect
|
||||
{
|
||||
Source = new AlphaMaskEffect
|
||||
{
|
||||
Source = new ScaleEffect
|
||||
{
|
||||
Scale = new Vector2(scaleFactor),
|
||||
Source = canvasBitmap,
|
||||
},
|
||||
AlphaMask = cornerRadiusMask,
|
||||
},
|
||||
Opacity = opacity,
|
||||
}, new Vector2(_albumArtXTransition.Value, _albumArtYTransition.Value));
|
||||
ds.DrawImage(effect, new Vector2(_albumArtXTransition.Value, _albumArtYTransition.Value));
|
||||
}
|
||||
|
||||
private void DrawAlbumArtBackground(ICanvasAnimatedControl control, CanvasDrawingSession ds)
|
||||
@@ -173,13 +123,13 @@ namespace BetterLyrics.WinUI3.ViewModels
|
||||
using var overlappedCoversDs = overlappedCovers.CreateDrawingSession();
|
||||
overlappedCoversDs.Transform = Matrix3x2.CreateRotation(_rotateAngle, control.Size.ToVector2() * 0.5f);
|
||||
|
||||
if (_lastAlbumArtCanvasBitmap != null)
|
||||
if (_lastBgImageEffect != null && !_lastBgImageEffect.IsDisposed() && _lastAlbumArtCanvasBitmap != null)
|
||||
{
|
||||
DrawBackgroundImgae(control, overlappedCoversDs, _lastAlbumArtCanvasBitmap, 1 - _albumArtBgTransition.Value);
|
||||
DrawBackgroundImgae(_lastBgImageEffect, overlappedCoversDs, _lastAlbumArtCanvasBitmap);
|
||||
}
|
||||
if (_albumArtCanvasBitmap != null)
|
||||
if (_bgImageEffect != null && !_bgImageEffect.IsDisposed() && _albumArtCanvasBitmap != null)
|
||||
{
|
||||
DrawBackgroundImgae(control, overlappedCoversDs, _albumArtCanvasBitmap, _albumArtBgTransition.Value);
|
||||
DrawBackgroundImgae(_bgImageEffect, overlappedCoversDs, _albumArtCanvasBitmap);
|
||||
}
|
||||
|
||||
overlappedCoversDs.Transform = Matrix3x2.Identity;
|
||||
@@ -222,13 +172,14 @@ namespace BetterLyrics.WinUI3.ViewModels
|
||||
{
|
||||
using var albumArt = new CanvasCommandList(control.Device);
|
||||
using var albumArtDs = albumArt.CreateDrawingSession();
|
||||
if (_albumArtCanvasBitmap != null)
|
||||
|
||||
if (_lastFgImageEffect != null && !_lastFgImageEffect.IsDisposed() && _lastAlbumArtCanvasBitmap != null)
|
||||
{
|
||||
DrawForegroundImgae(control, albumArtDs, _albumArtCanvasBitmap, _albumArtBgTransition.Value);
|
||||
DrawForegroundImgae(_lastFgImageEffect, albumArtDs);
|
||||
}
|
||||
if (_lastAlbumArtCanvasBitmap != null)
|
||||
if (_fgImageEffect != null && !_fgImageEffect.IsDisposed() && _albumArtCanvasBitmap != null)
|
||||
{
|
||||
DrawForegroundImgae(control, albumArtDs, _lastAlbumArtCanvasBitmap, 1 - _albumArtBgTransition.Value);
|
||||
DrawForegroundImgae(_fgImageEffect, albumArtDs);
|
||||
}
|
||||
|
||||
using var opacity = new CanvasCommandList(control.Device);
|
||||
@@ -367,12 +318,16 @@ namespace BetterLyrics.WinUI3.ViewModels
|
||||
// 先铺一层带默认透明度的已经加了模糊效果的歌词作为最底层(背景歌词层次)
|
||||
// Current line will not be blurred
|
||||
combinedDs.DrawImage(
|
||||
new GaussianBlurEffect
|
||||
new OpacityEffect
|
||||
{
|
||||
Source = new OpacityEffect { Source = bgLyrics, Opacity = line.OpacityTransition.Value * _lyricsOpacityTransition.Value },
|
||||
BlurAmount = line.BlurAmountTransition.Value,
|
||||
BorderMode = EffectBorderMode.Soft,
|
||||
Optimization = EffectOptimization.Speed,
|
||||
Source = new GaussianBlurEffect
|
||||
{
|
||||
Source = bgLyrics,
|
||||
BlurAmount = line.BlurAmountTransition.Value,
|
||||
BorderMode = EffectBorderMode.Soft,
|
||||
Optimization = EffectOptimization.Speed,
|
||||
},
|
||||
Opacity = line.OpacityTransition.Value * _lyricsOpacityTransition.Value,
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
using Microsoft.Graphics.Canvas;
|
||||
using Microsoft.Graphics.Canvas.Effects;
|
||||
using Microsoft.Graphics.Canvas.UI.Xaml;
|
||||
using Microsoft.UI;
|
||||
using Microsoft.UI.Xaml.Controls;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Numerics;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Windows.Foundation;
|
||||
using Windows.Graphics.Effects;
|
||||
|
||||
namespace BetterLyrics.WinUI3.ViewModels
|
||||
{
|
||||
public partial class LyricsRendererViewModel
|
||||
{
|
||||
private OpacityEffect? _lastBgImageEffect;
|
||||
private OpacityEffect? _bgImageEffect;
|
||||
|
||||
private OpacityEffect? _lastFgImageEffect;
|
||||
private OpacityEffect? _fgImageEffect;
|
||||
|
||||
private OpacityEffect CreateBgImageEffect(CanvasBitmap canvasBitmap, float opacity)
|
||||
{
|
||||
float imageWidth = (float)canvasBitmap.Size.Width;
|
||||
float imageHeight = (float)canvasBitmap.Size.Height;
|
||||
|
||||
float targetSize = MathF.Sqrt(MathF.Pow(_canvasWidth, 2) + MathF.Pow(_canvasHeight, 2));
|
||||
float scaleFactor = targetSize / MathF.Min(imageWidth, imageHeight);
|
||||
|
||||
// Original source: https://zhuanlan.zhihu.com/p/37178216
|
||||
float gain = _lyricsBgBrightnessTransition.Value;
|
||||
|
||||
float whiteX = 1 - 0.5f * gain;
|
||||
float whiteY = 0.5f + 0.5f * gain;
|
||||
float blackX = 0.5f - 0.5f * gain;
|
||||
float blackY = 0 + 0.5f * gain;
|
||||
|
||||
return new OpacityEffect
|
||||
{
|
||||
Source = new BrightnessEffect
|
||||
{
|
||||
Source = new ScaleEffect
|
||||
{
|
||||
Scale = new Vector2(scaleFactor),
|
||||
Source = canvasBitmap,
|
||||
},
|
||||
WhitePoint = new Vector2(whiteX, whiteY),
|
||||
BlackPoint = new Vector2(blackX, blackY),
|
||||
},
|
||||
Opacity = opacity,
|
||||
};
|
||||
}
|
||||
|
||||
private OpacityEffect? CreateFgImageEffect(ICanvasAnimatedControl control, CanvasBitmap canvasBitmap, float opacity)
|
||||
{
|
||||
// TODO 最大化/还原时图片大小未跟随改变
|
||||
if (opacity == 0) return null;
|
||||
|
||||
float imageWidth = (float)canvasBitmap.Size.Width;
|
||||
float imageHeight = (float)canvasBitmap.Size.Height;
|
||||
|
||||
float scaleFactor = _albumArtSize / Math.Min(imageWidth, imageHeight);
|
||||
if (scaleFactor < 0.01f) return null;
|
||||
|
||||
float cornerRadius = _albumArtCornerRadius / 100f * _albumArtSize / 2;
|
||||
|
||||
// TODO 当前未监听专辑封面圆角变化
|
||||
var cornerRadiusMask = new CanvasCommandList(control);
|
||||
var cornerRadiusMaskDs = cornerRadiusMask.CreateDrawingSession();
|
||||
cornerRadiusMaskDs.FillRoundedRectangle(
|
||||
new Rect(0, 0, imageWidth * scaleFactor, imageHeight * scaleFactor),
|
||||
cornerRadius, cornerRadius, Colors.White
|
||||
);
|
||||
|
||||
return new OpacityEffect
|
||||
{
|
||||
Source = new AlphaMaskEffect
|
||||
{
|
||||
Source = new ScaleEffect
|
||||
{
|
||||
Scale = new Vector2(scaleFactor),
|
||||
Source = canvasBitmap,
|
||||
},
|
||||
AlphaMask = cornerRadiusMask,
|
||||
},
|
||||
Opacity = opacity,
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,21 +49,58 @@ namespace BetterLyrics.WinUI3.ViewModels
|
||||
_displayType = _displayTypeReceived;
|
||||
_playingLineIndex = playingLineIndex;
|
||||
|
||||
if (_albumArtChanged)
|
||||
// 背景图切换计算
|
||||
// 将当前背景图放到 _lastAlbumArtSwBitmap 中 并设置不透明度为 1
|
||||
// 将新的背景图放到 _albumArtSwBitmap 中 并设置不透明度为 0
|
||||
// 这样可以实现背景图的连贯渐变效果
|
||||
if (_albumArtChanged || _isCanvasHeightChanged || _isCanvasWidthChanged ||
|
||||
_lyricsBgBrightnessTransition.IsTransitioning ||
|
||||
_albumArtBgTransition.IsTransitioning)
|
||||
{
|
||||
if (_lastAlbumArtSwBitmap != null)
|
||||
// 必须先在此处重置动画
|
||||
if (_albumArtChanged)
|
||||
{
|
||||
_lastAlbumArtCanvasBitmap = CanvasBitmap.CreateFromSoftwareBitmap(control, _lastAlbumArtSwBitmap);
|
||||
_albumArtBgTransition.Reset(0f);
|
||||
_albumArtBgTransition.StartTransition(1f);
|
||||
}
|
||||
_albumArtBgTransition.Reset(0f);
|
||||
_albumArtBgTransition.StartTransition(1f);
|
||||
if (_albumArtSwBitmap != null)
|
||||
// 更新 last
|
||||
if (_albumArtChanged)
|
||||
{
|
||||
_albumArtCanvasBitmap = CanvasBitmap.CreateFromSoftwareBitmap(control, _albumArtSwBitmap);
|
||||
if (_lastAlbumArtSwBitmap != null)
|
||||
{
|
||||
_lastAlbumArtCanvasBitmap = CanvasBitmap.CreateFromSoftwareBitmap(control, _lastAlbumArtSwBitmap);
|
||||
}
|
||||
}
|
||||
_lastBgImageEffect?.Dispose();
|
||||
_lastBgImageEffect = null;
|
||||
_lastFgImageEffect?.Dispose();
|
||||
_lastFgImageEffect = null;
|
||||
if (_lastAlbumArtCanvasBitmap != null)
|
||||
{
|
||||
_lastFgImageEffect = CreateFgImageEffect(control, _lastAlbumArtCanvasBitmap, 1 - _albumArtBgTransition.Value);
|
||||
_lastBgImageEffect = CreateBgImageEffect(_lastAlbumArtCanvasBitmap, 1 - _albumArtBgTransition.Value);
|
||||
}
|
||||
// 更新 current
|
||||
if (_albumArtChanged)
|
||||
{
|
||||
if (_albumArtSwBitmap != null)
|
||||
{
|
||||
_albumArtCanvasBitmap = CanvasBitmap.CreateFromSoftwareBitmap(control, _albumArtSwBitmap);
|
||||
}
|
||||
}
|
||||
_bgImageEffect?.Dispose();
|
||||
_bgImageEffect = null;
|
||||
_fgImageEffect?.Dispose();
|
||||
_fgImageEffect = null;
|
||||
if (_albumArtCanvasBitmap != null)
|
||||
{
|
||||
_fgImageEffect = CreateFgImageEffect(control, _albumArtCanvasBitmap, _albumArtBgTransition.Value);
|
||||
_bgImageEffect = CreateBgImageEffect(_albumArtCanvasBitmap, _albumArtBgTransition.Value);
|
||||
}
|
||||
_albumArtChanged = false;
|
||||
}
|
||||
|
||||
_albumArtChanged = false;
|
||||
|
||||
if (_isDynamicCoverOverlayEnabled)
|
||||
{
|
||||
_rotateAngle += _coverRotateSpeed;
|
||||
|
||||
44
Promotion/en.txt
Normal file
44
Promotion/en.txt
Normal file
@@ -0,0 +1,44 @@
|
||||
* The free trial version is identical to the paid version — no feature limitations.
|
||||
|
||||
🎵 BetterLyrics — Lyrics that move you, visuals that delight. A stunning lyrics display tool for Windows.
|
||||
|
||||
Looking for a smooth, dynamic, and immersive way to view lyrics on Windows?
|
||||
BetterLyrics delivers a whole new visual experience — making every song truly sing on screen.
|
||||
|
||||
✨ Key Features
|
||||
|
||||
- Beautiful UI with smooth animations
|
||||
Built with WinUI 3, featuring multiple themes and dynamic backgrounds. Enjoy seamless lyric scrolling, fade effects, and rich visuals.
|
||||
|
||||
- Offline translation with support for 30 languages
|
||||
Automatically reads translation lines embedded in local lyrics files. Multi-language support helps you understand every lyric, no internet needed.
|
||||
|
||||
- Supports multiple lyric sources and formats
|
||||
Reads local lyrics in LRC, ESLRC, TTML, and other formats. Also fetches lyrics online from major sources like QQ Music, NetEase Cloud Music, Kugou, and LrcLib.
|
||||
|
||||
- Real-time sync with various music players
|
||||
Compatible with NetEase Cloud, Kugou, Apple Music, Spotify, PotPlayer, MusicBee, AIMP, and even the default Windows player. Lyrics sync automatically—no setup required.
|
||||
|
||||
- Multiple display modes to suit your workflow
|
||||
Switch easily between immersive full-screen mode, floating desktop lyrics, and smart window docking to fit any listening scenario.
|
||||
|
||||
- Auto-hide when playback is paused
|
||||
The interface stays out of your way — lyrics automatically hide when music stops, keeping your screen clean and distraction-free.
|
||||
|
||||
🔧 Extra Features You’ll Love
|
||||
|
||||
- Fine-tune lyric timing with offset adjustment — perfect for mismatched audio versions
|
||||
|
||||
- Toggle translation, customize layout, pin or lock windows — your lyrics, your way
|
||||
|
||||
- Active community, frequent updates, and responsive support for user feedback
|
||||
|
||||
✅ Perfect For:
|
||||
|
||||
- Users who want floating desktop lyrics to elevate their listening experience
|
||||
|
||||
- Listeners who use multiple players or need support for various lyric formats
|
||||
|
||||
- Fans of beautiful, customizable visuals in their music tools
|
||||
|
||||
🎧 Whether you're immersed in music through headphones or want lyrics to stay visible on your screen, BetterLyrics gives you a personalized, immersive way to experience every song.
|
||||
44
Promotion/ja.txt
Normal file
44
Promotion/ja.txt
Normal file
@@ -0,0 +1,44 @@
|
||||
* 無料体験版と有料版は機能に違いはありません。
|
||||
|
||||
🎵 BetterLyrics — 歌詞が心を動かし、目を楽しませる。高品質なWindows用歌詞表示ツール
|
||||
|
||||
Windowsで滑らかでダイナミック、没入感のある歌詞表示を体験しませんか?
|
||||
BetterLyricsは全く新しいビジュアル体験を提供し、すべての曲が画面上でまるで「歌っている」ように感じられます。
|
||||
|
||||
✨ 主な機能
|
||||
|
||||
- 美しいインターフェースと滑らかなアニメーション
|
||||
WinUI 3をベースに開発され、複数のテーマや動的な背景をサポート。歌詞のスクロールやフェード効果など、視覚的に洗練された演出を楽しめます。
|
||||
|
||||
- オフライン翻訳対応、30言語サポート
|
||||
ローカルの歌詞ファイルに含まれる翻訳を自動で読み込み表示。インターネット接続なしで多言語の歌詞理解をサポートします。
|
||||
|
||||
- 多様な歌詞フォーマットとソースに対応
|
||||
LRC、ESLRC、TTMLなどのローカル歌詞ファイルを読み込み、さらにQQミュージック、NetEaseクラウドミュージック、Kugou、LrcLibなどの主要オンラインソースから歌詞を取得可能です。
|
||||
|
||||
- 多くの音楽プレイヤーとリアルタイム同期
|
||||
NetEaseクラウドミュージック、Kugou、Apple Music、Spotify、PotPlayer、MusicBee、AIMP、そしてWindows標準プレイヤーまで幅広く対応。歌詞は自動的に同期され、手動設定は不要です。
|
||||
|
||||
- 多彩な表示モードを自由に切り替え
|
||||
没入型の全画面モード、デスクトップに浮かぶ歌詞、スマートウィンドウドッキングなど、用途に合わせて切り替え可能。
|
||||
|
||||
- 再生停止時には自動で非表示
|
||||
音楽が一時停止すると歌詞画面が自動的に隠れ、画面を邪魔せずスッキリ使えます。
|
||||
|
||||
🔧 便利な追加機能
|
||||
|
||||
- 微調整可能な歌詞タイムラインオフセットで、音源のズレをぴったり補正
|
||||
|
||||
- 翻訳表示のオンオフ、レイアウトのカスタマイズ、ウィンドウの固定・ロックなどの高度な設定
|
||||
|
||||
- 活発なユーザーコミュニティによる継続的なアップデートと迅速なフィードバック対応
|
||||
|
||||
✅ こんな方におすすめ
|
||||
|
||||
- デスクトップに歌詞を浮かべて、より豊かな音楽体験を求める方
|
||||
|
||||
- 複数のプレイヤーや多様な歌詞フォーマットを使いたい方
|
||||
|
||||
- 美しくカスタマイズ可能なUIを好む方
|
||||
|
||||
🎧 ヘッドホンで没入して聴くときも、デスクトップに歌詞を表示して楽しむときも、BetterLyricsがあなたの音楽体験をより特別なものにします。
|
||||
45
Promotion/ko.txt
Normal file
45
Promotion/ko.txt
Normal file
@@ -0,0 +1,45 @@
|
||||
* 무료 체험판과 유료 버전은 기능 차이가 전혀 없습니다.
|
||||
|
||||
🎵 BetterLyrics — 가사는 눈으로, 감동은 마음으로. 고품질 Windows용 가사 디스플레이 도구
|
||||
|
||||
Windows에서 부드럽고 역동적이며 몰입감 있는 가사 표시를 경험해보세요.
|
||||
BetterLyrics는 완전히 새로운 시각적 음악 경험을 선사합니다. 이제 모든 곡이 화면 위에서 살아 숨쉽니다.
|
||||
|
||||
✨ 주요 기능
|
||||
|
||||
- 세련된 인터페이스와 부드러운 애니메이션
|
||||
WinUI 3 기반으로 개발되었으며 다양한 테마와 동적 배경을 지원합니다. 가사 스크롤, 페이드 효과 등 시각적 효과가 매끄럽고 아름답습니다.
|
||||
|
||||
- 30개 언어를 지원하는 오프라인 번역 기능
|
||||
로컬 가사 파일 내에 포함된 번역 내용을 자동으로 읽어와 표시합니다. 인터넷 연결 없이도 다양한 언어의 가사를 이해할 수 있습니다.
|
||||
|
||||
- 다양한 가사 형식 및 소스 지원
|
||||
LRC, ESLRC, TTML 등 로컬 파일 형식을 지원하며, QQ 음악, 넷이즈 클라우드, 쿠거우, LrcLib 등 주요 온라인 소스에서 가사를 자동으로 가져올 수 있습니다.
|
||||
|
||||
- 다양한 음악 플레이어와 실시간 동기화
|
||||
넷이즈, 쿠거우, Apple Music, Spotify, PotPlayer, MusicBee, AIMP, 그리고 Windows 기본 플레이어까지 폭넓게 호환됩니다. 가사는 자동으로 동기화되어 별도 설정 없이도 편리하게 사용 가능합니다.
|
||||
|
||||
- 다양한 디스플레이 모드 제공
|
||||
몰입형 전체 화면, 바탕화면 가사 띄우기, 스마트 윈도우 도킹 등 다양한 사용 환경에 맞춰 자유롭게 전환할 수 있습니다.
|
||||
|
||||
- 자동 숨김 기능으로 깔끔한 화면 유지
|
||||
음악이 일시정지되면 가사 창이 자동으로 숨겨져 화면을 방해하지 않고 깔끔함을 유지합니다.
|
||||
|
||||
🔧 세심한 부가기능
|
||||
|
||||
- 가사 싱크를 미세하게 조정할 수 있는 타임라인 오프셋 기능 제공
|
||||
|
||||
- 번역 표시 여부, 레이아웃 설정, 창 고정 및 잠금 등 고급 옵션 지원
|
||||
|
||||
- 활발한 사용자 커뮤니티 운영 중이며, 지속적인 업데이트와 피드백 반영
|
||||
|
||||
✅ 이런 분께 추천합니다
|
||||
|
||||
- 바탕화면에 가사를 띄워 감성적인 음악 감상을 원하는 분
|
||||
|
||||
- 다양한 플레이어나 가사 형식을 사용하는 분
|
||||
|
||||
- 세련되고 사용자 맞춤형 UI를 선호하는 분
|
||||
|
||||
🎧 헤드폰을 쓰고 몰입해서 듣든, 바탕화면에 가사를 띄워 놓고 감상하든 BetterLyrics는 여러분만의 음악 감상 경험을 완성해드립니다.
|
||||
|
||||
44
Promotion/zh-CN.txt
Normal file
44
Promotion/zh-CN.txt
Normal file
@@ -0,0 +1,44 @@
|
||||
* 免费试用版与付费版无任何区别
|
||||
|
||||
🎵 BetterLyrics —— 曲中人心、词悦双眼,高颜值 Windows 歌词展示工具
|
||||
|
||||
想在 Windows 上体验流畅、动态、沉浸的歌词显示效果?
|
||||
BetterLyrics 打造全新视觉体验,让每一首歌都真正“唱”给你看!
|
||||
|
||||
✨ 核心功能亮点
|
||||
|
||||
- 界面美观,动画丝滑
|
||||
基于 WinUI 3 框架开发,支持多种主题风格与动态背景,歌词滚动、淡入淡出等特效令人眼前一亮。
|
||||
|
||||
- 可配置接入离线翻译,支持 30 种语言
|
||||
自动读取本地歌词中的翻译内容,支持多语言自动识别与显示,助你听懂每一句歌词。
|
||||
|
||||
- 支持多种歌词来源与格式
|
||||
可读取本地的 LRC、ESLRC、TTML 等格式歌词文件,同时支持从在线源获取歌词,包括 QQ 音乐、网易云、酷狗音乐与 LrcLib 等主流平台。
|
||||
|
||||
- 多播放器实时同步
|
||||
支持网易云音乐、酷狗音乐、Apple Music、Spotify、PotPlayer、MusicBee、AIMP 等,系统自带播放器也能用,歌词自动同步无需手动干预。
|
||||
|
||||
- 多种显示模式随心切换
|
||||
沉浸式全屏、桌面悬浮歌词、窗口智能停靠,满足你不同场景的需求。
|
||||
|
||||
- 自动隐藏,安静陪伴
|
||||
播放器暂停时自动隐藏歌词界面,不打扰、不占屏,清爽使用体验。
|
||||
|
||||
🔧 更多贴心功能
|
||||
|
||||
- 歌词时间轴支持偏移微调,解决不同版本音频对不上的问题
|
||||
|
||||
- 支持歌词翻译开关、界面布局自由设置、窗口置顶/锁定等高级功能
|
||||
|
||||
- 拥有活跃的用户社区,持续更新优化,问题反馈及时响应
|
||||
|
||||
✅ 推荐使用场景
|
||||
|
||||
- 想要桌面歌词悬浮,提升听歌氛围
|
||||
|
||||
- 需要跨平台、多格式的歌词显示支持
|
||||
|
||||
- 喜欢细节丰富、界面可自定义的听歌工具
|
||||
|
||||
🎧 无论你是用耳机沉浸式聆听,还是想让歌词在桌面随时可见,BetterLyrics 都能为你打造专属的听歌体验!
|
||||
44
Promotion/zh-TW.txt
Normal file
44
Promotion/zh-TW.txt
Normal file
@@ -0,0 +1,44 @@
|
||||
* 免費試用版與付費版功能完全一致
|
||||
|
||||
🎵 BetterLyrics —— 曲動人心、詞悅雙眼,高顏值 Windows 歌詞顯示工具
|
||||
|
||||
想在 Windows 上體驗流暢、動態、沉浸感十足的歌詞顯示效果?
|
||||
BetterLyrics 為你打造全新視覺享受,讓每一首歌都真正「唱」給你看!
|
||||
|
||||
✨ 核心功能亮點
|
||||
|
||||
- 介面美觀,動畫流暢
|
||||
採用 WinUI 3 框架打造,支援多種主題風格與動態背景,歌詞滾動、淡入淡出等特效精緻細膩。
|
||||
|
||||
- 可設定離線翻譯,支援 30 種語言
|
||||
自動讀取本地歌詞中的翻譯內容,支援多語系辨識與顯示,幫你聽懂每一句歌詞。
|
||||
|
||||
- 支援多種歌詞來源與格式
|
||||
可讀取本地的 LRC、ESLRC、TTML 等格式歌詞檔,同時支援從線上來源獲取歌詞,包括 QQ 音樂、網易雲、酷狗音樂與 LrcLib 等主流平台。
|
||||
|
||||
- 多播放器即時同步
|
||||
相容網易雲音樂、酷狗音樂、Apple Music、Spotify、PotPlayer、MusicBee、AIMP 等播放器,甚至支援系統內建播放器,歌詞自動同步無須手動調整。
|
||||
|
||||
- 多種顯示模式自由切換
|
||||
沉浸式全螢幕、桌面浮動歌詞、智慧貼齊窗口等模式,靈活搭配不同使用場景。
|
||||
|
||||
- 自動隱藏,安靜陪伴
|
||||
音樂暫停時自動隱藏歌詞介面,不打擾、不佔螢幕,帶來更清爽的使用體驗。
|
||||
|
||||
🔧 更多貼心功能
|
||||
|
||||
- 歌詞時間軸支援細微調整,完美對齊不同版本的音訊
|
||||
|
||||
- 支援翻譯開關、介面版面自定義、窗口鎖定與置頂等進階選項
|
||||
|
||||
- 活躍用戶社群持續參與、版本持續優化、問題回饋即時處理
|
||||
|
||||
✅ 適用場景推薦
|
||||
|
||||
- 想要桌面浮動歌詞,增強聽歌氛圍
|
||||
|
||||
- 需要跨平台、多格式的歌詞支援
|
||||
|
||||
- 喜愛細節豐富、介面可自訂的聽歌工具
|
||||
|
||||
🎧 無論你是戴上耳機沉浸聆聽,還是想讓歌詞隨時浮現在桌面,BetterLyrics 都能為你打造專屬的聽歌體驗!
|
||||
2
README.CN.md
Normal file
2
README.CN.md
Normal file
@@ -0,0 +1,2 @@
|
||||
## 简体中文文档现已迁移
|
||||
[点此访问](https://github.com/jayfunc/BetterLyrics/blob/dev/README.zh-CN.md)
|
||||
Reference in New Issue
Block a user