feat: native M4A ReplayGain tag writing and SAF picker error handling

This commit is contained in:
zarzet
2026-04-13 23:35:03 +07:00
parent 378742e37a
commit ed020c9303
6 changed files with 367 additions and 17 deletions
+18 -1
View File
@@ -3910,11 +3910,14 @@ class DownloadQueueNotifier extends Notifier<DownloadQueueState> {
}
}
// ── ReplayGain (MP3/Opus: scan before FFmpeg, add to metadata) ─
ReplayGainResult? scannedReplayGain;
// ── ReplayGain (MP3/Opus/M4A: scan before FFmpeg, add to metadata) ─
if (settings.embedReplayGain && !isFlac) {
try {
final rgResult = await FFmpegService.scanReplayGain(filePath);
if (rgResult != null) {
scannedReplayGain = rgResult;
metadata['REPLAYGAIN_TRACK_GAIN'] = rgResult.trackGain;
metadata['REPLAYGAIN_TRACK_PEAK'] = rgResult.trackPeak;
_log.d(
@@ -3967,6 +3970,20 @@ class DownloadQueueNotifier extends Notifier<DownloadQueueState> {
_log.w('FFmpeg $format metadata embed failed');
}
if (isM4a && settings.embedReplayGain && scannedReplayGain != null) {
try {
await PlatformBridge.editFileMetadata(filePath, {
'replaygain_track_gain': scannedReplayGain.trackGain,
'replaygain_track_peak': scannedReplayGain.trackPeak,
});
_log.d(
'ReplayGain compatibility tags written for $format: gain=${scannedReplayGain.trackGain}, peak=${scannedReplayGain.trackPeak}',
);
} catch (e) {
_log.w('Failed to write native ReplayGain tags for $format: $e');
}
}
// ── FLAC post-processing ────────────────────────────────────────
if (isFlac) {
if (settings.artistTagMode == artistTagModeSplitVorbis) {