
Apple 생태계로부터 해방된 AirPods
[!WARNING] librepods.org는 LibrePods 프로젝트의 공식 웹사이트가 아닙니다. 이 사이트는 저작권을 주장하고 푸터에 LibrePods 로고를 사용함으로써 프로젝트의 공식 웹사이트라고 부정확하게 주장하고 있습니다. 동시에 이들은 해당 프로젝트가 LibrePods 프로젝트나 그 개발자들과 제휴 관계가 없다고 밝히고 있습니다.
다른 그러한 웹사이트를 발견하면 [email protected]로 신고해 주세요.
LibrePods를 사용하면 Apple 기기 전용인 AirPods 기능을 사용할 수 있습니다. AirPods와 Apple 기기 간의 데이터 교환에 사용되는 독점 프로토콜을 구현하여, 비 Apple 플랫폼에서도 노이즈 컨트롤 모드 변경, 빠른 착용 감지, 정확한 배터리 상태, 머리 제스처, 대화 인식 등의 기능을 사용할 수 있게 해줍니다.
| 기능 | Linux | Android |
|---|---|---|
| 청취 모드 변경 | ✅ | ✅ |
| 착용 감지 | ✅ | ✅ |
| 배터리 상태 | ✅ | ✅ |
AirPods 이름 변경 Android 관련 참고 사항Android에서는 이름을 변경한 후 AirPods를 다시 페어링해야 합니다. Android가 최신 이름을 사용하지 않을 수 있기 때문입니다. | ✅ | ✅ |
| 큰 소리 감소 | 🔴 | ⚪ |
| 머리 제스처 | ⛔ | ✅ |
| 대화 인식 | ✅ | ✅ |
| AirPods에 자동 연결 | ✅ | ✅ |
| 보청기 | 🔴 | ⚪ |
| 투명도 모드 사용자 지정 | 🔴 | ⚪ |
| 다중 기기 연결 (Bluetooth 멀티포인트, 2대의 기기만 지원) | ⚪ | ⚪ |
기타 접근성 설정 (클릭하여 펼치기)
| 🔴 | ✅ |
기타 일반 설정
| 🔴 | ✅ |
| 머리 추적 공간 음향 | ❓ | ❓ |
| 심박수 모니터링 | 🔴 | 🟡 |
| 나의 찾기 | ❓ | ❓ |
| 고품질 양방향 오디오 | 🟡 | 🟡 |
| 기호 | 의미 |
|---|---|
| ✅ | 구현되었으며 잘 작동함 |
| ⚪ | VendorID 스푸핑 필요; 사용에 따른 책임은 본인에게 있음 |
| 🟡 | 실험적/작업 진행 중 |
| 🔴 | 아직 구현되지 않음; 계획됨 |
| ⛔ | 구현되지 않을 예정 |
| ❓ | 알 수 없음 |
나의 찾기와 관련된 다음 기능들은 계획되어 있으나 추가적인 RE가 필요하며 Android에서는 루트 권한이 필요할 수 있습니다:
현재 앱은 OS가 HRTF를 수행할 수 있도록 Android에 머리 추적 정보를 제공하지 않습니다. 이는 완전히 탐구되지 않았으며 루트 권한이 필요할 수 있습니다.
스테레오 사운드의 공간화는 이 프로젝트의 범위를 벗어나며 절대 제공되지 않을 것입니다. 많은 OEM이 자체적인 구현을 가지고 있습니다.
android/rewrite 브랜치에서 사용 가능합니다. 빌드
아직 사용할 수 없습니다 (어차피 컴퓨터에서는 유용하지 않을 것 같습니다. 제안 사항이 있으면 토론을 생성해 주세요.)
iOS/iPadOS에서는 AirPods가 마이크에서 고해상도(AAC-ELD 모노 64kHz?) 오디오 스트림을 AACP를 통해 전송하는 동안에도 A2DP를 계속 사용할 수 있습니다.
Headset/Handsfree 프로필로 전환하여 재생 품질을 저하시키지 않고 AirPods의 마이크를 사용하여 앱 내에서 오디오를 녹음합니다. 하지만 이를 다른 앱/전화 통신에서 사용할 수 있게 하려면 루트 권한이 필요할 수 있으며, 가능하다고 해도 그럴 것입니다.
Recorder는 작업 진행 중이며, android/rewrite 브랜치에서 사용할 수 있습니다. 빌드
PR #655를 확인하세요.
알고 보니, 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로 생성되었습니다:
나머지 모든 것 - 백그라운드 서비스, Bluetooth 관리자 클래스(AACP 및 ATT), 전체 UI, 심지어 가장 작은 컴포넌트까지 - 은 수동으로 작성되었습니다.
UI 컴포넌트의 일부는 Apache License 2.0에 따라 라이선스가 부여된 Kyant0의 데모 앱에서 차용했습니다.
aacp.rs 및 att.rs 파일은 AI를 사용하여 Kotlin에서 Rust로 변환되었습니다. media_controller.rs 파일의 일부, 주로 pulse 통합도 AI로 생성되었습니다.
프로젝트를 지원해 주시는 모든 분들께 큰 감사를 드립니다!