[GH-ISSUE #27] App causes max volume #15

Closed
opened 2026-03-02 12:02:38 +03:00 by kerem · 12 comments
Owner

Originally created by @Rayrsn on GitHub (Jan 10, 2025).
Original GitHub issue: https://github.com/kavishdevar/librepods/issues/27

Hi I have a problem with my AirPods Pro 2, whenever the app is running the volume of the airpods is set to max (the system volume doesn't change) and lowering or increasing the volume slider doesn't change anything but as soon as i kill the app and change the volume it goes back to normal behavior. I'll be very happy to provide any logs or anything else if needed.
My phone is rooted, and the magisk module is enabled and configured exactly the way the readme was describing it.

Originally created by @Rayrsn on GitHub (Jan 10, 2025). Original GitHub issue: https://github.com/kavishdevar/librepods/issues/27 Hi I have a problem with my AirPods Pro 2, whenever the app is running the volume of the airpods is set to max (the system volume doesn't change) and lowering or increasing the volume slider doesn't change anything but as soon as i kill the app and change the volume it goes back to normal behavior. I'll be very happy to provide any logs or anything else if needed. My phone is rooted, and the magisk module is enabled and configured exactly the way the readme was describing it.
kerem 2026-03-02 12:02:38 +03:00
  • closed this issue
  • added the
    android
    label
Author
Owner

@kavishdevar commented on GitHub (Jan 11, 2025):

Could you try disabling Personalized Volume? That sometimes causes volume levels to jump randomly.

<!-- gh-comment-id:2585030776 --> @kavishdevar commented on GitHub (Jan 11, 2025): Could you try disabling `Personalized Volume`? That sometimes causes volume levels to jump randomly.
Author
Owner

@Rayrsn commented on GitHub (Jan 11, 2025):

Already tried that, but nothing changed. I’ve also tried turning off all the settings, but I’m still experiencing the same issue

<!-- gh-comment-id:2585130404 --> @Rayrsn commented on GitHub (Jan 11, 2025): Already tried that, but nothing changed. I’ve also tried turning off all the settings, but I’m still experiencing the same issue
Author
Owner

@kavishdevar commented on GitHub (Jan 11, 2025):

Could you share a screen recording? This seems very unlikely that the app doesn't allow you the change the volume.

<!-- gh-comment-id:2585211098 --> @kavishdevar commented on GitHub (Jan 11, 2025): Could you share a screen recording? This seems very unlikely that the app doesn't allow you the change the volume.
Author
Owner

@Rayrsn commented on GitHub (Jan 14, 2025):

in the screen recording the volume changes depending on the volume slider but on the AirPods itself the volume is stuck at max, this happens as soon as i open the app

<!-- gh-comment-id:2589500325 --> @Rayrsn commented on GitHub (Jan 14, 2025): in the screen recording the volume changes depending on the volume slider but on the AirPods itself the volume is stuck at max, this happens as soon as i open the app
Author
Owner

@kavishdevar commented on GitHub (Jan 24, 2025):

Sorry, I'm a bit confused. If I understand you correctly, you are unable to swipe across the stem and control the volume? If that's the case there is an option in the app for Volume Control, try toggling that.

<!-- gh-comment-id:2611464917 --> @kavishdevar commented on GitHub (Jan 24, 2025): Sorry, I'm a bit confused. If I understand you correctly, you are unable to swipe across the stem and control the volume? If that's the case there is an option in the app for `Volume Control`, try toggling that.
Author
Owner

@Rayrsn commented on GitHub (Jan 30, 2025):

No, no, that's not what I'm having a problem with. The volume buttons on my phone and the swipe function work perfectly—they both change the volume slider of my phone. The issue is that changing the volume slider has no effect; the actual volume (the decibels I'm hearing) remains at the maximum. This issue is fixed by force-closing the application

<!-- gh-comment-id:2624566746 --> @Rayrsn commented on GitHub (Jan 30, 2025): No, no, that's not what I'm having a problem with. The volume buttons on my phone and the swipe function work perfectly—they both change the volume slider of my phone. The issue is that changing the volume slider has no effect; the actual volume (the decibels I'm hearing) remains at the maximum. This issue is fixed by force-closing the application
Author
Owner

@kavishdevar commented on GitHub (Apr 23, 2025):

Hey! Sorry for the very late response — but, I was unable to reproduce this. Is it still happening?

<!-- gh-comment-id:2824817490 --> @kavishdevar commented on GitHub (Apr 23, 2025): Hey! Sorry for the very late response — but, I was unable to reproduce this. Is it still happening?
Author
Owner

@Rayrsn commented on GitHub (Apr 25, 2025):

No worries, Yes it's still a problem with my Pro 2s

<!-- gh-comment-id:2831451678 --> @Rayrsn commented on GitHub (Apr 25, 2025): No worries, Yes it's still a problem with my Pro 2s
Author
Owner

@NL-TCH commented on GitHub (Aug 18, 2025):

Same on my pro 2, if you need any info please let me know

<!-- gh-comment-id:3197838328 --> @NL-TCH commented on GitHub (Aug 18, 2025): Same on my pro 2, if you need any info please let me know
Author
Owner

@gheinzer commented on GitHub (Aug 24, 2025):

Hi, I'm currently experiencing the same problem, also with the AirPods Pro 2. As I currently don't have a rooted phone and am also not really planning to root my phone, I tested the Linux app on Debian 13. Works great, apart from this problem.

The problem occurred approximately every 2nd time using the AirPods.

These are the two firmware versions which my AirPods report after sending the handshake packet:

74.2256100190000002.303
74.2256100190000002.303

In an attempt to diagnose the issue, I started playing around with some Python scripts and found one possible solution. In my testing, the packet which sets the AirPods Pro 2-specific features seemed to cause the problem. When sending the following packet, which is also used by LibrePods, the problem occurs occasionally:

04 00 04 00 4d 00 ff 00 00 00 00 00 00 00

However, when I set both bit 3 and 5 of byte 7 to 0, the problem seems to be fixed (I tested it about 20 times):

04 00 04 00 4d 00 d7 00 00 00 00 00 00 00

This works with my Python script as well as with the Linux version of LibrePods. For reference, this is my Python script:

import socket
import time

sock = socket.socket(
    socket.AF_BLUETOOTH, # type: ignore
    socket.SOCK_STREAM,
    socket.BTPROTO_L2CAP # type: ignore
)
sock.connect(("20:15:82:F1:EF:73", 0x1001))

time.sleep(0.25) # All these sleeps are necessary for some reason
# Handshake
sock.send(b"\x00\x00\x04\x00\x01\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00")
time.sleep(0.1)

# Request notifications
sock.send(b"\x04\x00\x04\x00\x0F\x00\xff\xff\xff\xff")
time.sleep(0.1)

# Enables some features on the AirPods Pro 2
sock.send(b"\x04\x00\x04\x00\x4d\x00\xD7\x00\x00\x00\x00\x00\x00\x00")
# OR sock.send(b"\x04\x00\x04\x00\x4d\x00\xFF\x00\x00\x00\x00\x00\x00\x00")
time.sleep(0.1)

... and this is my diff for LibrePods:

diff --git a/linux/airpods_packets.h b/linux/airpods_packets.h
index cbef37b..2593345 100644
--- a/linux/airpods_packets.h
+++ b/linux/airpods_packets.h
@@ -121,7 +121,7 @@ namespace AirPodsPackets
     namespace Connection
     {
         static const QByteArray HANDSHAKE = QByteArray::fromHex("00000400010002000000000000000000");
-        static const QByteArray SET_SPECIFIC_FEATURES = QByteArray::fromHex("040004004d00ff00000000000000");
+        static const QByteArray SET_SPECIFIC_FEATURES = QByteArray::fromHex("040004004d00d700000000000000");
         static const QByteArray REQUEST_NOTIFICATIONS = QByteArray::fromHex("040004000f00ffffffffff");
         static const QByteArray AIRPODS_DISCONNECTED = QByteArray::fromHex("00010000");
     }
@@ -221,4 +221,4 @@ namespace AirPodsPackets
     }
 }
 
-#endif // AIRPODS_PACKETS_H
\ No newline at end of file
+#endif // AIRPODS_PACKETS_H

Another thing I seem to have found out by accident that I didn't already find in the documenation were some of the meanings of the bits:

Offset Functionality
0 ?
1 Conversation awareness
2 Adaptive transparency
3 Something to do with this problem
4 ?
5 Something to do with this problem
6 ?
7 ?

I hope this is helpful. Please let me know if you need any further testing or information.

<!-- gh-comment-id:3218001544 --> @gheinzer commented on GitHub (Aug 24, 2025): Hi, I'm currently experiencing the same problem, also with the AirPods Pro 2. As I currently don't have a rooted phone and am also not really planning to root my phone, I tested the Linux app on Debian 13. Works great, apart from this problem. The problem occurred approximately every 2nd time using the AirPods. These are the two firmware versions which my AirPods report after sending the handshake packet: ``` 74.2256100190000002.303 74.2256100190000002.303 ``` In an attempt to diagnose the issue, I started playing around with some Python scripts and found one possible solution. In my testing, the packet which sets the AirPods Pro 2-specific features seemed to cause the problem. When sending the following packet, which is also used by LibrePods, the problem occurs occasionally: ``` 04 00 04 00 4d 00 ff 00 00 00 00 00 00 00 ``` However, when I set **both** bit 3 and 5 of byte 7 to 0, the problem seems to be fixed (I tested it about 20 times): ``` 04 00 04 00 4d 00 d7 00 00 00 00 00 00 00 ``` This works with my Python script as well as with the Linux version of LibrePods. For reference, this is my Python script: ```python import socket import time sock = socket.socket( socket.AF_BLUETOOTH, # type: ignore socket.SOCK_STREAM, socket.BTPROTO_L2CAP # type: ignore ) sock.connect(("20:15:82:F1:EF:73", 0x1001)) time.sleep(0.25) # All these sleeps are necessary for some reason # Handshake sock.send(b"\x00\x00\x04\x00\x01\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00") time.sleep(0.1) # Request notifications sock.send(b"\x04\x00\x04\x00\x0F\x00\xff\xff\xff\xff") time.sleep(0.1) # Enables some features on the AirPods Pro 2 sock.send(b"\x04\x00\x04\x00\x4d\x00\xD7\x00\x00\x00\x00\x00\x00\x00") # OR sock.send(b"\x04\x00\x04\x00\x4d\x00\xFF\x00\x00\x00\x00\x00\x00\x00") time.sleep(0.1) ``` ... and this is my diff for LibrePods: ```diff diff --git a/linux/airpods_packets.h b/linux/airpods_packets.h index cbef37b..2593345 100644 --- a/linux/airpods_packets.h +++ b/linux/airpods_packets.h @@ -121,7 +121,7 @@ namespace AirPodsPackets namespace Connection { static const QByteArray HANDSHAKE = QByteArray::fromHex("00000400010002000000000000000000"); - static const QByteArray SET_SPECIFIC_FEATURES = QByteArray::fromHex("040004004d00ff00000000000000"); + static const QByteArray SET_SPECIFIC_FEATURES = QByteArray::fromHex("040004004d00d700000000000000"); static const QByteArray REQUEST_NOTIFICATIONS = QByteArray::fromHex("040004000f00ffffffffff"); static const QByteArray AIRPODS_DISCONNECTED = QByteArray::fromHex("00010000"); } @@ -221,4 +221,4 @@ namespace AirPodsPackets } } -#endif // AIRPODS_PACKETS_H \ No newline at end of file +#endif // AIRPODS_PACKETS_H ``` Another thing I seem to have found out by accident that I didn't already find in the documenation were some of the meanings of the bits: | Offset | Functionality | | --------: | :--------------------------- | | 0 | ? | | 1 | Conversation awareness | | 2 | Adaptive transparency | | 3 | Something to do with this problem | | 4 | ? | | 5 | Something to do with this problem | | 6 | ? | | 7 | ? | I hope this is helpful. Please let me know if you need any further testing or information.
Author
Owner

@kavishdevar commented on GitHub (Aug 24, 2025):

thank you very much, @gheinzer! this probably is "adaptive volume"/"personalized volume" config. this seems to popup when an recent apple device has not been paired and the actual configurations for volume based on environment haven't been written to the airpods. After I had paired it with an apple device, the volume started jumping to some reasonable volume. this happens even when I have the "personalized volume" control command set to off.

<!-- gh-comment-id:3218031111 --> @kavishdevar commented on GitHub (Aug 24, 2025): thank you very much, @gheinzer! this probably is "adaptive volume"/"personalized volume" config. this seems to popup when an recent apple device has not been paired and the actual configurations for volume based on environment haven't been written to the airpods. After I had paired it with an apple device, the volume started jumping to some reasonable volume. this happens even when I have the "personalized volume" control command set to off.
Author
Owner

@kavishdevar commented on GitHub (Oct 15, 2025):

fixed with #192

<!-- gh-comment-id:3404582102 --> @kavishdevar commented on GitHub (Oct 15, 2025): fixed with #192
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/librepods#15
No description provided.