feat: configurable audio normalization switch

This commit is contained in:
Kingkor Roy Tirtho 2023-09-17 00:39:00 +06:00
parent 126d6017f2
commit c325911c0d
7 changed files with 60 additions and 16 deletions

View File

@ -264,5 +264,6 @@
"use_system_title_bar": "Use system title bar",
"crunching_results": "Crunching results...",
"search_to_get_results": "Search to get results",
"use_amoled_dark_theme": "Use AMOLED (Pitch Black) dark theme"
"use_amoled_dark_theme": "Use AMOLED (Pitch Black) dark theme",
"normalize_audio": "Normalize audio"
}

View File

@ -448,6 +448,13 @@ class SettingsPage extends HookConsumerWidget {
},
trailing: const Icon(SpotubeIcons.angleRight),
),
SwitchListTile(
secondary: const Icon(SpotubeIcons.playlistRemove),
title: Text(context.l10n.normalize_audio),
subtitle: Text(context.l10n.blacklist_description),
value: preferences.normalizeAudio,
onChanged: preferences.setNormalizeAudio,
),
],
),
SectionCardWithHeading(

View File

@ -10,6 +10,7 @@ import 'package:spotube/components/settings/color_scheme_picker_dialog.dart';
import 'package:spotube/models/matched_track.dart';
import 'package:spotube/provider/palette_provider.dart';
import 'package:spotube/provider/proxy_playlist/proxy_playlist_provider.dart';
import 'package:spotube/services/audio_player/audio_player.dart';
import 'package:spotube/utils/persisted_change_notifier.dart';
import 'package:spotube/utils/platform.dart';
@ -70,6 +71,8 @@ class UserPreferences extends PersistedChangeNotifier {
bool amoledDarkTheme;
bool normalizeAudio;
final Ref ref;
UserPreferences(
@ -92,6 +95,7 @@ class UserPreferences extends PersistedChangeNotifier {
this.youtubeApiType = YoutubeApiType.youtube,
this.systemTitleBar = false,
this.amoledDarkTheme = false,
this.normalizeAudio = true,
}) : super() {
if (downloadLocation.isEmpty && !kIsWeb) {
_getDefaultDownloadDirectory().then(
@ -219,6 +223,13 @@ class UserPreferences extends PersistedChangeNotifier {
updatePersistence();
}
void setNormalizeAudio(bool normalize) {
normalizeAudio = normalize;
audioPlayer.setAudioNormalization(normalize);
notifyListeners();
updatePersistence();
}
Future<String> _getDefaultDownloadDirectory() async {
if (kIsAndroid) return "/storage/emulated/0/Download/Spotube";
@ -285,6 +296,9 @@ class UserPreferences extends PersistedChangeNotifier {
setSystemTitleBar(systemTitleBar);
amoledDarkTheme = map["amoledDarkTheme"] ?? amoledDarkTheme;
normalizeAudio = map["normalizeAudio"] ?? normalizeAudio;
audioPlayer.setAudioNormalization(normalizeAudio);
}
@override
@ -309,6 +323,7 @@ class UserPreferences extends PersistedChangeNotifier {
"youtubeApiType": youtubeApiType.name,
'systemTitleBar': systemTitleBar,
"amoledDarkTheme": amoledDarkTheme,
"normalizeAudio": normalizeAudio,
};
}

View File

@ -24,10 +24,6 @@ abstract class AudioPlayerInterface {
)
// _justAudio = !_mkSupportedPlatform ? ja.AudioPlayer() : null
{
//? Normalizing the audio
(_mkPlayer.platform as mk.NativePlayer)
.setProperty('af', 'dynaudnorm=g=5:f=250:r=0.9:p=0.5');
_mkPlayer.stream.error.listen((event) {
Catcher.reportCheckedError(event, StackTrace.current);
});

View File

@ -312,4 +312,8 @@ class SpotubeAudioPlayer extends AudioPlayerInterface
// await _justAudio!.setLoopMode(loop.toLoopMode());
// }
}
Future<void> setAudioNormalization(bool normalize) async {
await _mkPlayer.setAudioNormalization(normalize);
}
}

View File

@ -318,4 +318,14 @@ class MkPlayerWithState extends Player {
index: newMedias.indexOf(_playlist!.medias[_playlist!.index]),
);
}
NativePlayer get nativePlayer => platform as NativePlayer;
Future<void> setAudioNormalization(bool normalize) async {
if (normalize) {
await nativePlayer.setProperty('af', 'dynaudnorm=g=5:f=250:r=0.9:p=0.5');
} else {
await nativePlayer.setProperty('af', '');
}
}
}

View File

@ -1,45 +1,56 @@
{
"bn": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"ca": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"de": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"es": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"fr": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"hi": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"ja": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"pl": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"pt": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"ru": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
],
"zh": [
"use_amoled_dark_theme"
"use_amoled_dark_theme",
"normalize_audio"
]
}