LibrePods: 解放されたAirPods
(github.com/librepods-org)- LibrePods は、AirPods と Apple デバイス間の独自プロトコルを実装し、Apple デバイス専用の AirPods 機能を Linux や Android のような非 Apple プラットフォームでも使えるようにするプロジェクト
- 対応機能はプラットフォームごとに異なり、リスニングモードの変更、装着検知、バッテリー状態、会話感知、自動接続は Linux と Android で実装され、良好に動作する
- 一部機能は VendorID spoofing が必要、またはまだ計画段階であり、Head Gestures は Android のみ対応し、Linux では実装予定がない
- Find My、空間オーディオ、心拍数モニタリング、高品質な双方向オーディオは、まだ未完成または検証中で、Android では一部機能に root が必要になる可能性がある
- Android アプリと Linux の一部再実装には AI 生成コード が含まれており、プロジェクトは GPLv3 以降で配布されるが、LibrePods の名前・ロゴ・ブランディングの使用権は別途制限される
LibrePods ができること
- LibrePods は、AirPods と Apple デバイスの間でデータをやり取りする独自プロトコルを実装している
- この実装により、非 Apple プラットフォームでも次のような AirPods 機能を利用できる
- ノイズコントロールモードの変更
- 高速な装着検知
- 正確なバッテリー状態
- Head Gestures
- Conversational Awareness
- その他の AirPods 設定機能
- インストール文書はプラットフォームごとに分かれている
プラットフォーム別の機能対応
-
Linux と Android の両方で実装され、良好に動作する機能
- リスニングモードの変更
- 装着検知
- バッテリー状態
- AirPods 名の変更
- Android では、名前変更後に再ペアリングが必要になる場合がある
- Conversational Awareness
- AirPods の自動接続
-
Android のみ対応する機能
- Head Gestures
- その他のアクセシビリティ設定
- Press speed
- Press and Hold duration
- Noise Cancellation with single AirPod
- Volume control on swipe
- Volume swipe speed
- その他の一般設定
- Press and Hold でリスニングモードを順に切り替える、またはデジタルアシスタントを呼び出す
- 通話制御設定
- Personalized volume
- Microphone side
- 就寝時にメディアを一時停止
Off listening modeを有効化
- VendorID spoofing が必要な機能
- Loud Sound Reduction
- Hearing Aid
- Transparency Mode customization
- Multi-device connectivity
- 状態表記の基準は次のとおり
- ✅: 実装済みで良好に動作
- ⚪: VendorID spoofing が必要で、リスクは利用者負担
- 🔴: まだ未実装、計画あり
- ⛔: 実装予定なし
- ❓: 不明
VendorID spoofing と追加機能
- VendorID spoofing は、DID Profile の VendorID を Apple の値に変更し、複数の特殊機能にアクセスする方式
- Linux では
/etc/bluetooth/main.confの DeviceID を変更して利用できる- 設定行:
DeviceID = bluetooth:004C:0000:0000
- 設定行:
- Android では、Xposed が利用可能で LibrePods モジュールが有効な場合、アプリ設定で
act as Apple deviceを有効にできる - Multi-device Connectivity は、最大 2 台のデバイスを同時に AirPods に接続し、音声と制御の両方を利用可能にする
- Android が AirPods を引き継ぐと、Apple デバイスには Apple デバイス同様に
"Move to iPhone"通知が表示される - 別のデバイスが引き継ぐと、Android にもポップアップが表示される
- Android が AirPods を引き継ぐと、Apple デバイスには Apple デバイス同様に
- アクセシビリティおよび補聴器関連の設定も構成できる
- Transparency Mode の amplification、balance、tone、conversation boost、ambient noise reduction
- Loud Sound Reduction
- Hearing Aid のカスタマイズと audiogram 結果の設定
- アプリは、より高い精度が必要という理由から聴力テスト機能は提供しない
まだ未完成の機能と範囲の制限
- Find My 関連機能は計画されているが、追加のリバースエンジニアリングが必要で、Android では root が必要になる可能性がある
- AirPods を Find My ネットワークに追加
- 充電ケースから音を再生
- 置き忘れ時の通知
- ケース充電音の切り替え
- Spatial Audio は現時点で Android に head tracking 情報を提供し、OS 側で HRTF を実行させる仕組みを備えていない
- まだ完全には調査されておらず、root が必要になる可能性がある
- ステレオ音声を空間化する機能はプロジェクトの範囲外であり、提供予定はない
- 多くの OEM は独自実装を持っている
- Heart Rate Monitoring は AirPods Pro 3 以降のモデル向けに作業中
- 実装されたとしても、Android では root が必要になる可能性が高い
- High quality two-way audio は、iOS/iPadOS で AirPods がマイク音声ストリームを AACP で送信している間も A2DP を継続利用できる機能に関連する
- Android ではオーディオとのより深い統合が必要で、root が必要になる可能性が高い
プロトコル、リバースエンジニアリング、AI の利用
- プロトコル情報は、Nojus の Wireshark dissector プラグイン pabloaul/apple-wireshark を参照できる
- LibrePods の実装の大部分ではこの dissector は使われておらず、プロジェクト作者は dissector 作成前にプロトコルを直接リバースエンジニアリングしていた
- ただし、高品質な双方向オーディオや空間オーディオのような今後の機能には、そのリバースエンジニアリング作業が必要だったと述べている
- Android アプリで 完全に AI 生成された部分
- Head Gestures の全ロジックと UI
- r2 と Xposed モジュールを使った offset setup の両バージョン
- Troubleshooter と LogCollector
- Android アプリのそれ以外の主要部分は手作業で書かれている
- background service
- AACP と ATT の Bluetooth manager クラス
- UI 全体と小さなコンポーネント群
- Linux の再実装では
aacp.rsとatt.rsが Kotlin から Rust へ AI 翻訳されているmedia_controller.rsの一部、主に Pulse 統合も AI 生成
- 一部の UI コンポーネントは Apache License 2.0 の Kyant0's demo app から取得している
代替アプリ、ライセンス、商標に関する告知
- 他のプラットフォームや条件で利用できる代替アプリが提示されている
- CAPod: Android 向けの AirPods companion アプリ。Android 16 QPR3 以下で root がない場合に推奨
- MagicPods for Steam Deck: website
- MagicPods: Windows 向けの LibrePods を探している場合の代替
- LibrePods は GPLv3 以降 の条件で自由ソフトウェアとして配布される
- GPL は LibrePods の名前、ロゴ、ブランディングの使用権を付与しない
- LibrePods の名前とロゴは、公式プロジェクトとの提携、保証、関連性を示唆する形で、許可なく使用してはならない
- Android アプリで使われている SF Pro フォントは Apple Inc. の資産であり、今後のバージョンでオープンな代替に置き換えられる予定
- AirPods、AirPods Pro、AirPods Max、AirPods ロゴは Apple Inc. の商標であり、LibrePods プロジェクトは Apple Inc. と提携しておらず、保証も受けていない
librepods.orgは LibrePods プロジェクトの公式ウェブサイトではなく、フッターでの著作権主張と LibrePods ロゴの使用によって、公式ウェブサイトであるかのように不正確に主張していると警告している
1件のコメント
Hacker News の意見
混乱するかもしれないので補足すると、AirPods はすでに他のデバイスでも通常の Bluetooth イヤホンとして動作する。
このプロジェクトは、Apple 製品に統合されている一部の追加機能とインターフェースを実装したもの。
“LibrePods allows you to use AirPods features that are exclusive to Apple devices. It implements the proprietary protocol used to exchange data between AirPods and Apple devices” と書かれていて、その後に機能表もある。
もっと安くて音の良い製品もあるが、音質はこの製品の話の中では最も小さい部分に近い。
通常の Bluetooth オーディオ出力/入力デバイスとして接続される以外の必須機能についても同様だった。
このプロジェクトは素晴らしい。いつか AirDrop も解放されるといい。
https://github.com/seemoo-lab/opendrop は有望に見えたが止まっているようで、いつか実現してほしい。
https://www.android.com/quick-share/
Apple が今後、これが動作し得るあらゆる経路をできる限り塞ごうとするに違いないと思わなければ、AirPods を買う動機になったかもしれない。
これは、Apple の OS にすでに統合されている追加機能向けのインターフェースを誰かが実装したものに近い。
バージョン固定をするには、Apple 製品には絶対に接続されないようにする必要がある。
それでも、すでに Apple のコンピュータやスマートフォンのユーザーでないなら、Sony WF-1000XM6 を勧めたい。ユーザー体験はより悪く、少しバグがあると言われているが、音はより良い可能性が高い。
ただし、自分が買ったハードウェアを使うためにこうした回避策まで要求しないメーカーに報いるほうがよいかもしれない。
以前の議論: https://news.ycombinator.com/item?id=45941596
ここに注ぎ込まれた作業とハッキングには敬意を払う。
だが、これほど敵対的な会社を AirPods の購入でなぜ支援すべきなのかは分からない。これを塞ぐパッチが出ても驚かない。
回避してハックできるとしても、ユーザーを統制し、面倒を見るべき対象と見なす文化が気に障る。
非 Apple プラットフォームでできないのは、設定、つまむ操作の変更、ファームウェア更新の読み込みといった部分。
標準 Bluetooth だけではこうしたことを行う方法がないため、専用アプリが必要になる。Apple が他プラットフォーム向けの専用アプリを作らなかっただけで、誰かがリソースを投じてアプリを作ることを Apple が気にする理由もない。いずれにせよ AirPods は売れ、アプリ制作費は他人が払ったのだから、Apple の勝ちだ。
通常の Bluetooth 接続の上に機能を追加しつつ、完全に管理でき品質保証できるプラットフォームでだけ提供する、と選択してはいけないのか?
機能を独占提供するだけで本当に敵対的なのか? 1 社が自社製品を複数一緒に使うときの利点を提供してはいけないのか?
それとも、Apple がこれをパッチで塞ぐだろうと仮定しているから敵対的という意味なのか?
何年も AirPods を何組も使ってきたが、一部の機能は今回初めて知った。
Apple 対応の有無を示す 3 列目もあればいいのに、とまで思った。もちろん冗談だ。
今 AirPods を持っておらず、Apple 方面をあまり追っていない人にとっては、AirPods を非 Apple デバイスにペアリングするとどんな機能を失うのか説明してもらえると役に立つ。
Linux で AirPods をスピーカーとヘッドセットとして同時に使えるようにしてくれるのかと思って期待した。
自分で使ってみたところ、うまく動作しているようだ。特許で妨げられないといいのだが。
ただし Bluetooth プロファイルを HFP(Hands-Free Profile)または HSP(Headset Profile)に切り替える必要がある。
より良い品質のためにこれがデフォルトである点にも注意すべき。これは Linux ではなく Bluetooth 仕様によるもの。
自分が求める肝心な便利機能は、他のデバイスでも無制限のマルチポイントを使うこと。
ほとんどの他のデバイスが提供する 2 台接続はあまりにも微妙だ。たまに会社の VoIP 卓上電話に素早く接続できるといい。