
librepods nightly-53679cc
Apple 생태계로부터 해방된 AirPods
[!WARNING] librepods.org는 LibrePods 프로젝트의 공식 웹사이트가 아닙니다. 이 사이트는 저작권을 주장하고 푸터에 LibrePods 로고를 사용함으로써 프로젝트의 공식 웹사이트라고 부정확하게 주장하고 있습니다. 동시에 이들은 해당 프로젝트가 LibrePods 프로젝트나 그 개발자들과 제휴 관계가 없다고 밝히고 있습니다.
다른 그러한 웹사이트를 발견하면 [email protected]로 신고해 주세요.
LibrePods란 무엇인가요?
LibrePods를 사용하면 Apple 기기 전용인 AirPods 기능을 사용할 수 있습니다. AirPods와 Apple 기기 간의 데이터 교환에 사용되는 독점 프로토콜을 구현하여, 비 Apple 플랫폼에서도 노이즈 컨트롤 모드 변경, 빠른 착용 감지, 정확한 배터리 상태, 머리 제스처, 대화 인식 등의 기능을 사용할 수 있게 해줍니다.
기능 지원 여부
| 기능 | Linux | Android |
|---|---|---|
| 청취 모드 변경 | ✅ | ✅ |
| 착용 감지 | ✅ | ✅ |
| 배터리 상태 | ✅ | ✅ |
AirPods 이름 변경 Android 관련 참고 사항Android에서는 이름을 변경한 후 AirPods를 다시 페어링해야 합니다. Android가 최신 이름을 사용하지 않을 수 있기 때문입니다. | ✅ | ✅ |
| 큰 소리 감소 | 🔴 | ⚪ |
| 머리 제스처 | ⛔ | ✅ |
| 대화 인식 | ✅ | ✅ |
| AirPods에 자동 연결 | ✅ | ✅ |
| 보청기 | 🔴 | ⚪ |
| 투명도 모드 사용자 지정 | 🔴 | ⚪ |
| 다중 기기 연결 (Bluetooth 멀티포인트, 2대의 기기만 지원) | ⚪ | ⚪ |
기타 접근성 설정 (클릭하여 펼치기)
| 🔴 | ✅ |
기타 일반 설정
| 🔴 | ✅ |
| 머리 추적 공간 음향 | ❓ | ❓ |
| 심박수 모니터링 | 🔴 | 🟡 |
| 나의 찾기 | ❓ | ❓ |
| 고품질 양방향 오디오 | 🟡 | 🟡 |
| 기호 | 의미 |
|---|---|
| ✅ | 구현되었으며 잘 작동함 |
| ⚪ | VendorID 스푸핑 필요; 사용에 따른 책임은 본인에게 있음 |
| 🟡 | 실험적/작업 진행 중 |
| 🔴 | 아직 구현되지 않음; 계획됨 |
| ⛔ | 구현되지 않을 예정 |
| ❓ | 알 수 없음 |
나의 찾기
나의 찾기와 관련된 다음 기능들은 계획되어 있으나 추가적인 RE가 필요하며 Android에서는 루트 권한이 필요할 수 있습니다:
- AirPods를 나의 찾기 네트워크에 추가
- 충전 케이스를 찾기 위해 케이스에서 소리 재생
- 두고 갈 때 알림
- 케이스 충전 소리 전환
공간 음향
현재 앱은 OS가 HRTF를 수행할 수 있도록 Android에 머리 추적 정보를 제공하지 않습니다. 이는 완전히 탐구되지 않았으며 루트 권한이 필요할 수 있습니다.
스테레오 사운드의 공간화는 이 프로젝트의 범위를 벗어나며 절대 제공되지 않을 것입니다. 많은 OEM이 자체적인 구현을 가지고 있습니다.
심박수 모니터링
Android
android/rewrite 브랜치에서 사용 가능합니다. 빌드
Linux
아직 사용할 수 없습니다 (어차피 컴퓨터에서는 유용하지 않을 것 같습니다. 제안 사항이 있으면 토론을 생성해 주세요.)
고품질 양방향 오디오
iOS/iPadOS에서는 AirPods가 마이크에서 고해상도(AAC-ELD 모노 64kHz?) 오디오 스트림을 AACP를 통해 전송하는 동안에도 A2DP를 계속 사용할 수 있습니다.
Android
Headset/Handsfree 프로필로 전환하여 재생 품질을 저하시키지 않고 AirPods의 마이크를 사용하여 앱 내에서 오디오를 녹음합니다. 하지만 이를 다른 앱/전화 통신에서 사용할 수 있게 하려면 루트 권한이 필요할 수 있으며, 가능하다고 해도 그럴 것입니다.
Recorder는 작업 진행 중이며, android/rewrite 브랜치에서 사용할 수 있습니다. 빌드
Linux
PR #655를 확인하세요.
설치
VendorID 스푸핑
알고 보니, DID 프로필의 VendorID를 Apple의 것으로 변경하면 여러 특수 기능에 접근할 수 있습니다!
Linux에서는 /etc/bluetooth/main.conf의 DeviceID를 편집하여 이를 수행할 수 있습니다. 설정 파일에 DeviceID = bluetooth:004C:0000:0000 줄을 추가하세요. Android의 경우 앱 설정에서 act as Apple device 설정을 활성화할 수 있습니다(Xposed가 사용 가능하고 LibrePods 모듈이 활성화된 경우에만 표시됨).
다중 기기 연결
최대 두 대의 기기를 AirPods에 동시에 연결할 수 있으며, 오디오와 제어 모두 가능합니다. 끊김 없는 연결 전환. Android가 마치 Apple 기기인 것처럼 AirPods를 넘겨받을 때 Apple 기기에 동일한 알림이 표시됩니다("Move to iPhone"). 다른 기기가 넘겨받을 때 Android에서도 팝업이 표시됩니다.
접근성 설정 및 보청기
투명도 모드 사용자화(증폭, 밸런스, 톤, 대화 부스트, 주변 소음 감소) 및 큰 소리 감소와 같은 접근성 설정을 구성할 수 있습니다.
오디오그램 결과 설정을 포함한 모든 보청기 사용자화를 Android(곧 Linux)에서 수행할 수 있습니다. 이 앱은 훨씬 더 많은 정밀도를 요구하기 때문에 청력 검사를 수행하는 방법을 제공하지 않습니다. 이미 사용 가능한 오디오그램 결과를 사용하는 것이 훨씬 좋습니다.
프로토콜 및 리버스 엔지니어링
사용된 프로토콜에 대한 자세한 내용은 Nojus(@pabloaul)의 Wireshark 디섹터 플러그인을 참조하세요: pabloaul/apple-wireshark
이 디섹터는 LibrePods의 대부분의 구현에서 사용되지 않았습니다. 이 디섹터가 만들어지기 전에 제가 직접 프로토콜을 리버스 엔지니어링했기 때문입니다. 하지만 양방향 고품질 오디오와 공간 오디오를 포함한 많은 (향후) 기능은 그들의 RE 노력 없이는 불가능했을 것입니다!
AI 사용
Android 앱
앱의 다음 부분은 완전히 AI로 생성되었습니다:
- Head Gestures - 로직과 UI를 포함한 전부
- r2 + xposed 모듈(두 버전 모두)을 사용한 오프셋 설정
- Troubleshooter 및 LogCollector
나머지 모든 것 - 백그라운드 서비스, Bluetooth 관리자 클래스(AACP 및 ATT), 전체 UI, 심지어 가장 작은 컴포넌트까지 - 은 수동으로 작성되었습니다.
UI 컴포넌트의 일부는 Apache License 2.0에 따라 라이선스가 부여된 Kyant0의 데모 앱에서 차용했습니다.
Linux (rewrite)
aacp.rs 및 att.rs 파일은 AI를 사용하여 Kotlin에서 Rust로 변환되었습니다. media_controller.rs 파일의 일부, 주로 pulse 통합도 AI로 생성되었습니다.
후원자
프로젝트를 지원해 주시는 모든 분들께 큰 감사를 드립니다!