mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-08-14 07:00:19 +02:00
feat: add AAC lossy target and toggle for Apple Music eLRC word sync
The HIGH-quality lossy format picker can now produce an AAC/M4A 320 kbps output alongside MP3 and Opus. FFmpegService.convertM4aToLossy/convertAudioFormat, the Dart queue pipeline, the Kotlin finalizer, and the library database format helper all route .m4a through a unified aac codec path and tag the resulting file with the M4A metadata writer. The Lossy Format setting gains a new option, and the track metadata convert dialog lists AAC next to the other targets. Apple Music lyrics gain a 'eLRC word sync' switch (default off). When disabled the pax-to-LRC formatter strips inline word timestamps, producing line-synced LRC that is safer for players that choke on eLRC; enabling it restores the previous word-by-word behaviour. The change propagates through SetLyricsFetchOptions and invalidates the global lyrics cache on toggle. Broad l10n migration: roughly 400 previously hardcoded English strings across queue, settings, track metadata, repo, audio analysis, setup and extension screens now live in the ARB catalog, with matching plural/placeholder forms. No behaviour change beyond localisation. Existing and new unit tests (lyrics eLRC toggle and Dart settings round-trip) pass.
This commit is contained in:
@@ -188,6 +188,7 @@ void main() {
|
||||
expect(settings.artistTagMode, artistTagModeJoined);
|
||||
expect(settings.autoFallback, isTrue);
|
||||
expect(settings.lyricsProviders, ['lrclib', 'apple_music']);
|
||||
expect(settings.lyricsAppleElrcWordSync, isFalse);
|
||||
expect(settings.deduplicateDownloads, isTrue);
|
||||
});
|
||||
|
||||
@@ -203,6 +204,7 @@ void main() {
|
||||
concurrentDownloads: 4,
|
||||
embedReplayGain: true,
|
||||
lyricsProviders: ['apple_music'],
|
||||
lyricsAppleElrcWordSync: true,
|
||||
deduplicateDownloads: false,
|
||||
clearDownloadFallbackExtensionIds: true,
|
||||
clearSearchProvider: true,
|
||||
@@ -213,6 +215,7 @@ void main() {
|
||||
expect(updated.concurrentDownloads, 4);
|
||||
expect(updated.embedReplayGain, isTrue);
|
||||
expect(updated.lyricsProviders, ['apple_music']);
|
||||
expect(updated.lyricsAppleElrcWordSync, isTrue);
|
||||
expect(updated.deduplicateDownloads, isFalse);
|
||||
expect(updated.downloadFallbackExtensionIds, isNull);
|
||||
expect(updated.searchProvider, isNull);
|
||||
@@ -235,6 +238,7 @@ void main() {
|
||||
localLibraryPath: '/music',
|
||||
hasCompletedTutorial: true,
|
||||
musixmatchLanguage: 'id',
|
||||
lyricsAppleElrcWordSync: true,
|
||||
lastSeenVersion: '4.5.0',
|
||||
deduplicateDownloads: false,
|
||||
nativeDownloadWorkerEnabled: true,
|
||||
@@ -255,6 +259,7 @@ void main() {
|
||||
expect(decoded.localLibraryPath, '/music');
|
||||
expect(decoded.hasCompletedTutorial, isTrue);
|
||||
expect(decoded.musixmatchLanguage, 'id');
|
||||
expect(decoded.lyricsAppleElrcWordSync, isTrue);
|
||||
expect(decoded.lastSeenVersion, '4.5.0');
|
||||
expect(decoded.deduplicateDownloads, isFalse);
|
||||
expect(decoded.nativeDownloadWorkerEnabled, isTrue);
|
||||
|
||||
Reference in New Issue
Block a user