2024-09-29 02:49:06 +05:30
2024-09-29 02:49:06 +05:30
2024-09-29 02:49:06 +05:30
2024-09-27 01:01:11 +05:30
2024-09-29 02:49:06 +05:30
2024-09-27 01:01:11 +05:30
2024-09-27 02:44:40 +05:30
2024-09-29 02:49:06 +05:30
2024-09-29 02:49:06 +05:30

ALN - AirPods like Normal (Linux Only)

Get Started!

1. Install the required packages

sudo apt install python3 python3-pip
pip3 install pybluez

If you want to run it as a daemon (Refer to the Daemon Version section), you will need to install the python-daemon package.

pip3 install python-daemon

2. Clone the repository

git clone https://github.com/kavishdevar/aln.git
cd aln

3. Preprare

Pair your AirPods with your machine before running this script! ⚠️ Note: DO NOT FORGET TO EDIT THE AIRPODS_MAC VARIABLE IN main.py/standalone.py WITH YOUR AIRPODS MAC ADDRESS!

Versions

Non-Daemon based

This version is the most polished version of the script. It can do the following:

  • fetch the battery percentage,
  • fetch in-ear status (but not actually controlling the media with that information).
  • control ANC modes
python3 examples/logger-and-anc.py

As a daemon (using a UNIX socket)

![Daemon Log Screenshot](imgs/daemon-log.png | width=300) If you want to run a deamon for multiple programs to read/write airpods data, you can use the airpods_daemon.py script.

  • This creates a standard UNIX socket at /tmp/airpods_daemon.sock and listens for commands
  • and sends battery/in-ear info You can run it as follows:
python3 airpods_daemon.py

Interacting with the daemon

![Set ANC Screenshot](imgs/set-anc.png | width=300)

  • Sending data to the daemon You can send data to the daemon using the set-anc.py script. Since it's a standard UNIX socket, you can send data to it using any programming language that supports UNIX sockets.

This package includes a demo script that sends a command to turn off the ANC. You can run it as follows:

python3 examples/daemon/set-anc.py
  • Reading data from the daemon ![Read Data Screenshot](imgs/read-data.png | width=300) You can listen to the daemon's output by running the read-data.py script. This script listens to the UNIX socket and prints the data it receives. Currenty, it recognizes the battery percentage and the in-ear status and dumps the rest of the data to the terminal.
python3 examples/daemon/read-data.py
  • Controlling the media with the in-ear status (and get battery status) ![Ear Detection Screenshot](imgs/ear-detection.png | width=300) This script is basically the standalone script, but interacts with the UNIX socket created by the daemon instead. It can control the media with the in-ear status and remove the device as an audio sink when the AirPods are not in your ears.
python3 examples/daemon/ear-detection.py
  • App Indicator/Tray Icon Tray Icon Hover Screenshot Tray Icon Menu Screenshot This script is a simple tray icon that shows the battery percentage and set ANC modes.

Note: This script uses QT.

python3 examples/daemon/tray.py

Standalone version (without module dependency, mainly for testing, and reverse engineering purposes)

  • Controlling the media with the in-ear status.
  • Remove the device as an audio sink when the AirPods are not in your ears.
  • Try to connect with the AirPods if media is playing and the AirPods are not connected.
  • Control ANC modes.
python3 examples/standalone.py
Languages
Kotlin 79.1%
C++ 11.7%
Python 6.7%
QML 1.7%
Shell 0.6%
Other 0.2%