pulseaudioがBTデバイスへの音質接続を処理するのはなぜですか?

pulseaudioがBTデバイスへの音質接続を処理するのはなぜですか?

私はLinuxに初めてアクセスし、Bluetoothスクリプトに初めてアクセスしました。これまでに私が見つけたものは次のとおりです。

  1. BluezはデフォルトのBTスタックです。
  2. BluezToolsは、Bluezとより簡単に相互作用するために使用できるユーティリティのセットです。
  3. DBusは、Bluezがハードウェアと直接対話するときに接続するインターフェースです。
  4. PulseAudio は、システムでオーディオの生成を担当するサブシステムです。

これは意味があります。 Bluetoothヘッドフォンセットがあるとしましょう。私が期待するのは、(ペアリングと信頼の後)BTヘッドフォンの特定のプロファイルに直接接続できるコマンドを実行できることです。

私が念頭に置いている技術的経路は次のとおりです。

  1. ヘッドホンの電源を入れます。
  2. BluezToolsコマンドの実行 - 例:BT Audio-C
  3. デバイスが私が望むサービスに接続するのを待ちます。
  4. PulseAudioは新しい出力デバイスを選択する必要があります。
  5. オーディオを元のオーディオから新しい出力オーディオ(BTヘッドフォン)に変更するには、別のコマンドを実行します。
  6. シームレスなリスニング体験をお楽しみください。

これらはすべて論理的に見えますが、実際の実装はそうではなく、問題をよりよく理解して解決しようとする理由を探しています。

実際に起こっていることは次のとおりです。

  1. ヘッドホンの電源を入れます。
  2. BluezToolsコマンドの実行 - 例:BT Audio-C
  3. デバイスが私が望むサービスに接続するのを待ちます。
  4. PulseAudioは新しい出力デバイスを選択する必要があります。
  5. PulseAudio コマンドを実行して、音声プロファイルを電話品質から高品質に変更します。

これについてもう少し拡張してみましょう。 Bluetoothヘッドセットは、2つの音質モード(電話とHi-Fi)を提供します。たった1つだけ音楽を聴くのに本当に適しています。

BTヘッドフォンが各品質モードをサービスとして公開してほしいですか?この仮定は間違っているかもしれませんが、次のようなものを期待しました。

bt-audio-c高音質プロファイル

または

bt-audio-changeProfile高音質プロファイル

代わりに、BluezはデバイスへのRAW接続のみを処理しているように見えます。ここで次のことを実行する必要があります。pacmd セットカード構成ファイル $INDEX a2dp

これは基本的に間違っているようです。したがって、オーディオサブシステムの品質管理のためにパルスやalsa、または他のサウンドサブシステムに対して他の実装が必要なのはなぜですか?

私は何を見逃していますか? Bluez/BluezToolsなどを使用してプロフィールに直接接続できないのはなぜですか?

ベストアンサー1

Bluetooth接続は、単純な有線ヘッドフォンやスピーカーに比べて待ち時間がかなり長くなります。さらに、接続遅延時間は、Bluetooth受信機の特性に依存し、ユーザが動くときに無線信号強度に依存し得る。

アプリケーションとPulseAudioの間のインターフェースは、「ここにPCMオーディオデータがあります。再生してみてください」のように簡単にすることができます。ただし、より複雑になる可能性があります。 「ここにPCMオーディオデータがあります。このデータを再生して50ミリ秒ごとにどのくらい行ったかを教えてください。ビデオストリームと同期していないと思われる場合はお知らせします。次にスキップしてください。直接サポートできないサンプリングレートなので、再サンプリングも必要です。

したがって、PulseAudioがBluetoothオーディオ処理にかなり深く関与していることは理解できます。中間層が多いほど、正確なフィードバックを維持せずにデータがバッファリングされ、リップシンクが失われる可能性が高くなります。

実際、PulseAudio以前はBluetoothオーディオ用のALSAバックエンドがありましたが、廃止されました。問題は、当時、ALSAのインターフェースが主に既存のサウンドカード用に設計されており、Bluetoothの潜在的に可変的なオーディオレイテンシを処理するのが難しかったということです。

PulseAudioのインターフェースは、最初からさまざまなサウンドデバイスを処理し、ストリームの再生中にオーディオストリームを切り替えることができるように設計されているため、私の考えには非常に高度なオーディオ遅延の概念も組み込まれています。

はい、PulseAudioモジュールではなくBlueZで実装できます。ただし、BlueZはアプリケーションにオーディオインターフェースを提供する必要があります。 PulseAudioはシステムの「すべての」オーディオを処理しようとしているため(現在再生中のオーディオをスピーカーからBluetoothに、またはその逆に転送できるように)、とにかくPulseAudioとインターフェースする必要があります。

おすすめ記事