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


11

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

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

意味あり。それで、BTヘッドフォンの特定のプロファイルに直接接続できるコマンドを発行できるようにするために(すべてペアリングして信頼した後)、BlueToothヘッドフォンのセットがあるとしましょう。

私が考えている技術的なパスは次のようなものです:

  1. ヘッドフォンをオンにします。
  2. BluezToolsコマンドを発行します-bt -audio -cなど
  3. デバイスが後のサービスに接続するのを待ちます
  4. PulseAudioは新しい出力デバイスを取得するはずです
  5. 別のコマンドを発行して、オーディオを元の状態から新しい出力オーディオ(BTヘッドフォン)に変更します。
  6. シームレスなリスニング体験をお楽しみください。

これはすべて論理的に思えますが、実際の実装はこのようなものではなく、なぜWHYを探しているので、問題をよりよく理解して、修正して試すことができます。

これが実際に起こることです:

  1. ヘッドフォンをオンにします。
  2. BluezToolsコマンドを発行します-bt -audio -cなど
  3. デバイスが後のサービスに接続するのを待ちます
  4. PulseAudioは新しい出力デバイスを取得するはずです
  5. PulseAudioコマンドを発行して、オーディオプロファイルを電話品質から高音質に変更します。

これについて少し詳しく説明します。Bluetoothヘッドセットは、2つの品質モード(電話と高忠実度)を提供します。音楽を聴くのに本当に適しているのは1つだけです。

BTヘッドフォンは各品質モードをサービスとして公開すると思いますが、これは正しいですか?この仮定は間違っている可能性がありますが、私は次のようなものを期待します

bt-audio -c highFidelityProfile

または

bt-audio -changeProfile highFidelityProfile

代わりに、BluezがデバイスへのRAW接続を処理するだけのようで、そこから次のコマンドを発行する必要があります:pacmd set-card-profile $ INDEX a2dp

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

私は何が欠けていますか?Bluez / BluezToolsなどを使用して特定のプロファイルに直接接続できないのはなぜですか?

回答:


2

Bluetooth接続は、単純な有線のヘッドフォンやスピーカーに比べて大幅な遅延があります。さらに、Bluetoothレシーバーの特性や、ユーザーが移動するときの無線信号の強度によっては、接続の遅延が変化する可能性があります。

アプリケーションとPulseAudioの間のインターフェースは、「ここにPCMオーディオデータがあります。これを再生する」のと同じくらい簡単です。しかし、さらに複雑になることもあります。「これはいくつかのPCMオーディオデータです。これを再生し、50ミリ秒ごとにどれだけ到達したかを教えてください。これにより、ビデオストリームとのリップシンクから外れているように見える場合は、スキップするように指示できます。私は遊んでいます。ああ、ハードウェアが直接サポートしないサンプルレートのデータがあるので、それもリサンプリングする必要があります。」後者の場合、PulseAudioは、オーディオデバイスからのフィードバックをアプリケーションに提供して、オーディオデータが実際にどこまで再生されるかを正確に判断できる必要があります。

その結果、PulseAudioがBluetoothオーディオ処理にかなり深く関与することは理にかなっています。介在するレイヤーが多いほど、正確なフィードバックを維持せずにデータがバッファリングされ、リップシンクが失われる可能性が高くなります。

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

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

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


2

私は最終的に解決策を見つけたと思います(2つのLinux Mintシステムでテストされました)なぜこれらの正確な手順に従う必要があるのか​​わかりません:

最初のステップ:

  1. bluemanのインストール:sudo apt-get install blueman
  2. Bluetoothファイルを編集します:sudo nano /etc/bluetooth/main.confそして最後にこの行を追加します:Disable = Headset

各実行について:

  1. Bluetoothサービスを再起動します:sudo service bluetooth restart
  2. オープンデバイスシステムトレイのbluemanからまたは入力bluemanマネージャを端末に
  3. Bluetoothオーディオデバイスを検索する
  4. デバイスを右クリックして、ヘッドセットとして接続します
  5. システム設定からサウンドに移動
  6. デバイスを1回クリックして選択します
  7. 再びブルーマンマネージャーに行きます
  8. Bluetoothデバイスを右クリックし、オーディオプロファイルをハイファイ再生(A2DPシンク)に設定します。

手順のいずれかを逃した場合は、手順1に進み、再試行してください。これが機能するかどうか教えてください。

編集:Linux Mint 19では、デフォルトのBluetoothマネージャーはハイファイ再生で完全に機能し、設定はまったく必要ありません!!


0

構成によって異なる可能性がありますが、よくテストされたコマンドをいくつか紹介します。

デバイスを信頼できるものとして設定する必要があります。それはGUIを介して行うことができます。

sdptool browseは、ターゲットデバイスで利用可能なプロトコルとチャネルに関する多くの詳細を提供します。

同時オーディオ出力を使用する場合は、Bluetooth a2pオーディオシンクを設定する方が簡単です。設定するには、ツールpaprefsを参照してください。

sudo apt install bluetooth 
sudo apt install bluez bluez-tools
sudo apt install rfkill rfcomm

デバイスを起動します。とにかくhci0である必要があります。

sudo hciconfig hci0 up

リモートデバイスのリスト:

sudo rfkill list

Bluetoothネットワークのリスト:

hcitool scan

利用可能なプロトコルを閲覧:

sdptool browse 43:23:00:02:23:A7

デバイスを接続します。

sudo rfcomm connect hci0 43:23:00:02:23:A7

ファイルを送信します。

sudo bt-obex -p 43:23:00:02:23:A7 ~/images/tof.png

ファイルを受け取る:

sudo bt-obex -s /

チャネル(ここではチャネル19)のデータをスキャン/待機し、ホームフォルダーのdumpというファイルにデータを書き込みます。

sudo apt install bluez-hcidump

hcidump -i hci0 -O 19 -w ~/dump

代替:ペアリングに役立つ場合があります:

sudo apt install bluetoothctl

bluetoothctl
power on
connect 43:23:00:02:23:A7
trust 43:23:00:02:23:A7
info 43:23:00:02:23:A7

[bluetooth]# agent on
[bluetooth]# default-agent
[bluetooth]# discoverable on
[bluetooth]# pairable on
[bluetooth]# scan on
[bluetooth]# pair 43:23:00:02:23:A7
[agent]PIN code: ####
[bluetooth]# trust 43:23:00:02:23:A7
[bluetooth]# connect 43:23:00:02:23:A7
[bluetooth]# info 43:23:00:02:23:A7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.