Non-stable audio normalization
Is there an existing issue for this? (Please read the description)
- [X] I have searched the existing issues
Current Behavior
When audio normalization is enabled, it lowers the volume at different amounts at different parts of songs. I don't know the implementation but my prediction is that it caps the volume at a specific volume by lowering the volume at that moment.
Expected Behavior
I think the better would be to select a reference "highest" volume and lower the overall volume of the whole song according to that. The reference volume doesn't necessarily have to be the highest peak at a frame, it can be highest average of 1 second intervals.
Steps to reproduce
I noticed this in "Blackout - Colin Root" it is the most apparent one that I can find
Logs
Logs
[2024-12-25 20:10:11.969035]---------------------
org.freedesktop.DBus.Error.NameHasNoOwner: Could not activate remote peer 'org.freedesktop.Avahi': activation request failed: unknown unit
#0 DBusClient._callMethod (package:dbus/src/dbus_client.dart:1146)
<asynchronous suspension>
#1 DBusClient.callMethod (package:dbus/src/dbus_client.dart:621)
<asynchronous suspension>
#2 AvahiServer.callGetVersionString (package:bonsoir_linux/src/avahi/server.dart:95)
<asynchronous suspension>
#3 AvahiBonsoirDiscovery._isModernAvahi (package:bonsoir_linux/src/actions/discovery/discovery.dart:323)
<asynchronous suspension>
#4 AvahiBonsoirDiscovery.ready (package:bonsoir_linux/src/actions/discovery/discovery.dart:49)
<asynchronous suspension>
#5 ConnectClientsNotifier.build (package:spotube/provider/connect/clients.dart:37)
<asynchronous suspension>
#6 FutureHandlerProviderElementMixin.handleFuture.<anonymous closure>.<anonymous closure> (package:riverpod/src/async_notifier/base.dart:355)
<asynchronous suspension>
----------------------------------------
[2024-12-25 20:10:11.993944]---------------------
org.freedesktop.DBus.Error.NameHasNoOwner: Could not activate remote peer 'org.freedesktop.Avahi': activation request failed: unknown unit
#0 DBusClient._callMethod (package:dbus/src/dbus_client.dart:1146)
<asynchronous suspension>
#1 DBusClient.callMethod (package:dbus/src/dbus_client.dart:621)
<asynchronous suspension>
#2 AvahiServer.callGetVersionString (package:bonsoir_linux/src/avahi/server.dart:95)
<asynchronous suspension>
#3 AvahiBonsoirDiscovery._isModernAvahi (package:bonsoir_linux/src/actions/discovery/discovery.dart:323)
<asynchronous suspension>
#4 AvahiBonsoirDiscovery.ready (package:bonsoir_linux/src/actions/discovery/discovery.dart:49)
<asynchronous suspension>
#5 ConnectClientsNotifier.build (package:spotube/provider/connect/clients.dart:37)
<asynchronous suspension>
#6 FutureHandlerProviderElementMixin.handleFuture.<anonymous closure>.<anonymous closure> (package:riverpod/src/async_notifier/base.dart:355)
<asynchronous suspension>
----------------------------------------
[2024-12-25 20:10:12.697790]---------------------
NoSuchMethodError: The method '[]' was called on null.
Receiver: null
Tried calling: []("__typename")
#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:38)
#1 _objectNoSuchMethod (dart:core-patch/object_patch.dart:85)
#2 transformSectionItemTypeJsonMap (package:spotube/models/spotify/home_feed.dart:174)
#3 transformSectionItemJsonMap.<anonymous closure> (package:spotube/models/spotify/home_feed.dart:220)
#4 MappedIterable.elementAt (dart:_internal/iterable.dart:385)
#5 ListIterator.moveNext (dart:_internal/iterable.dart:354)
#6 WhereIterator.moveNext (dart:_internal/iterable.dart:450)
#7 new _GrowableList._ofOther (dart:core-patch/growable_array.dart:202)
#8 new _GrowableList.of (dart:core-patch/growable_array.dart:152)
#9 new List.of (dart:core-patch/array_patch.dart:39)
#10 Iterable.toList (dart:core/iterable.dart:498)
#11 transformSectionItemJsonMap (package:spotube/models/spotify/home_feed.dart:229)
#12 transformHomeFeedJsonMap.<anonymous closure> (package:spotube/models/spotify/home_feed.dart:241)
#13 MappedIterable.elementAt (dart:_internal/iterable.dart:385)
#14 ListIterator.moveNext (dart:_internal/iterable.dart:354)
#15 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189)
#16 new _GrowableList.of (dart:core-patch/growable_array.dart:150)
#17 new List.of (dart:core-patch/array_patch.dart:39)
#18 ListIterable.toList (dart:_internal/iterable.dart:224)
#19 transformHomeFeedJsonMap (package:spotube/models/spotify/home_feed.dart:244)
#20 CustomSpotifyEndpoints.getHomeFeed (package:spotube/services/custom_spotify_endpoints/spotify_endpoints.dart:164)
<asynchronous suspension>
#21 FutureHandlerProviderElementMixin.handleFuture.<anonymous closure>.<anonymous closure> (package:riverpod/src/async_notifier/base.dart:355)
<asynchronous suspension>
----------------------------------------
Operating System
Linux
Spotube version
v3.9.0
Installation source
Arch User Repository (AUR)
Additional information
I don't actually know how it's implemented in different apps. So I would appreciate if you can tell whether this is possible to implement or not.
Self grab
- [ ] I'm ready to work on this issue!