When a Custom EQ profile is configured using the Samsung Galaxy Wearable app on Android, connecting the Galaxy Buds to GalaxyBudsClient (on macOS, Windows, or Linux) silently resets the EQ to a fixed preset (Dynamic by default). The custom per-band EQ values set on the phone are lost.
This happens because GalaxyBudsClient does not implement the CUSTOM_EQUALIZE_RECV (msg ID 105) and CUSTOM_EQUALIZE_SEND (msg ID 137) SPP messages. When the device reports EqualizerMode = 0 (which is what it reports when a custom EQ is active), the app interprets this as "EQ disabled" and falls back to the Dynamic preset.
Using Galaxy Buds3 Fe
To Reproduce
- Connect Galaxy Buds to an Android phone using the Samsung Galaxy Wearable app
- Open Sound → Equalizer → set a Custom EQ (manually adjust the per-band sliders)
- Disconnect from the phone and connect the Galaxy Buds to a Mac/Windows/Linux machine running GalaxyBudsClient
- Open the Equalizer page in GalaxyBudsClient
- Observe: the EQ is set to Dynamic (or another preset) — the custom band values are gone
Expected behavior
GalaxyBudsClient should read the custom EQ band values from the device using the CUSTOM_EQUALIZE_RECV message and display them in the Equalizer page without overwriting them. Ideally, the app should also allow the user to adjust individual frequency bands (like the Samsung app does) and send those values back to the device using CUSTOM_EQUALIZE_SEND.
Screenshots
N/A — the issue is that the Equalizer page shows a preset slider instead of per-band controls when custom EQ is active.
Desktop:
- OS: macOS 15.7.2 (24G325)
- Application version: 5.2.1.0
Additional context
The relevant SPP message IDs are already defined in the codebase (SppMessageEnums.cs) but are not handled:
CUSTOM_EQUALIZE_RECV = 105 — sent from the device to report current custom band values
CUSTOM_EQUALIZE_SEND = 137 — sent to the device to set custom band values
The root cause in code is in EqualizerPageViewModel.cs line 84:
// If EQ disabled, set to Dynamic (2) by default
EqPreset = e.EqualizerMode == 0 ? 2 : e.EqualizerMode - 1;
When custom EQ is active, EqualizerMode is 0, so the app treats it as "disabled" and defaults to Dynamic. I am working on a PR to fix this.
Log files
Not applicable for this issue — the behaviour is by design (missing feature), not a crash or connection error.
When a Custom EQ profile is configured using the Samsung Galaxy Wearable app on Android, connecting the Galaxy Buds to GalaxyBudsClient (on macOS, Windows, or Linux) silently resets the EQ to a fixed preset (Dynamic by default). The custom per-band EQ values set on the phone are lost.
This happens because GalaxyBudsClient does not implement the
CUSTOM_EQUALIZE_RECV(msg ID 105) andCUSTOM_EQUALIZE_SEND(msg ID 137) SPP messages. When the device reportsEqualizerMode = 0(which is what it reports when a custom EQ is active), the app interprets this as "EQ disabled" and falls back to the Dynamic preset.Using Galaxy Buds3 Fe
To Reproduce
Expected behavior
GalaxyBudsClient should read the custom EQ band values from the device using the
CUSTOM_EQUALIZE_RECVmessage and display them in the Equalizer page without overwriting them. Ideally, the app should also allow the user to adjust individual frequency bands (like the Samsung app does) and send those values back to the device usingCUSTOM_EQUALIZE_SEND.Screenshots
N/A — the issue is that the Equalizer page shows a preset slider instead of per-band controls when custom EQ is active.
Desktop:
Additional context
The relevant SPP message IDs are already defined in the codebase (
SppMessageEnums.cs) but are not handled:CUSTOM_EQUALIZE_RECV = 105— sent from the device to report current custom band valuesCUSTOM_EQUALIZE_SEND = 137— sent to the device to set custom band valuesThe root cause in code is in
EqualizerPageViewModel.csline 84:When custom EQ is active,
EqualizerModeis0, so the app treats it as "disabled" and defaults to Dynamic. I am working on a PR to fix this.Log files
Not applicable for this issue — the behaviour is by design (missing feature), not a crash or connection error.