Android の音を Bluetooth でPCへ転送

Androidデバイスは普段はこんな風にデスクトップ付近にアームで固定して、ニュースを見たり動画を見たりして活用しています。desktop with android device

気兼ねなく音を出せる状況ならば、各デバイス単体で音を出したり、Bluetoothのスピーカーを使用したりしてデバイスの音声を再生しています。

しかし、深夜のような周りに配慮する必要のある状況だと、写真の様に各デバイスにイヤホンを付けて必要に応じて付け替えるなんて面倒な事をしていました。

それを打破すべくこんな物を購入してみました。

LBT-UAN04C2

Logitec Bluetooth USB Adapter

Elecom Logitec LBT-UAN04C2、USBに接続するBluetoothのホストアダプターです。Windows 8 対応なんてエンブレムも付いていたため、コストパフォーマンスがよさそうだと買ったわけですが、実は久々に引き当てた地雷製品です。

内部には CSR社 の CSR8510 A10 が使用されています。オーディオコーデックのatpXでも知られるメーカーなので外れは無いだろうと安心をしていました。

csr8510 a10

ところが、ソフトウェアの出来が今一つで、新旧のドライバがインストール時にコンフリクトする等のトラブルがあり、ややハードルが高い製品となっています。

そんな訳で、実際に使えるようになるまでの過程を綴っていきましょう。

Bluetoothアダプタのセットアップ

Logitec製という事で、 Windows Update 経由でセットアップが完了し、挿すだけで使えます。ベンダードライバで使用したい方は前もってインストールしておくといいでしょう。

標準ドライバの場合

bluetooth usb adapter installed

デバイスの認識が終わったら、コントロールパネルのデバイスとプリンターに Bluetooth アダプタが表示されるので、「□Bluetooth デバイスによる、コンピューターの検出を許可する」のオプションにチェックを入れます。

setting option bluetooth

これで外部デバイスからこのホストアダプタを発見することが出来、ペアリングを行うことが出来ます。

ペアリングが終わったらチェックを外しておきましょう。

Android デバイスとのペアリング

Android デバイスの Bluetoothを有効にするとWindowsのタスクトレイに通知が入ります。

check device connect bluetooth

Android の設定→Bluetoothを確認すると現在接続可能なデバイスが列挙されているのでタップしてペアを設定します。この時、Windowsの方にペアコードの確認、又はペアコードの入力ダイアログが開くので指示に従います。

android bluetooth monitor android set bluetooth device

check pairing code windows pairing successful

撮影の都合上、ペアリングコードが変わっていますがご了承ください。

ペアリングが終わり接続が確立するとデバイスドライバがインストールされていきますが、Nexus 7 (2013) は標準ドライバだとリモコンデバイス以外が周辺デバイスとして認識されドライバがインストールされませんでした。

general bruetooth driver install

CSR社のドライバ(CSR Harmony stack) の場合

付属CDからインストールしてもいいのですが、より新しいバージョンが使える事を期待してWebからドライバソフトをダウンロードする事にします。今回のトラブルもあって、同チップの他社製品のドライバをダウンロードしてみましたが中身は同じもののようです。

csr harmony stack install

インストール過程でエクスプローラーを強制的に再起動させられるので、作業をしている方は気を付けてください。ドライバのインストールは特に問題なく終了し、ペアリングも問題なく行える感じです。

ですが、やはりBluetoothで接続した Nexus 7に関しては2つのデバイスのドライバがインストールされず使用不可能なままです。

logitec bluetooth driver set installed logtech bluetooth driver user interface

今回使用した Elecom Logitec LBT-UAN04C2 ですが、コアチップがCSR Harmony製でインストールによるトラブルが多いそうで、漏れることなく遭遇してしまいました。

デバイスマネージャで確認すると、周辺デバイスはEnumratorが各デバイスに振り分けてくれましたがドライバはインストールされていません。

nexus7 2013 other device driver not installed

個別に手動インストールを試みるも、「その名前は、サービス名またはサービス表示名として既に使われています。」なんてメッセージが出てエラーIDすら表示されません。

bluetooth device driver install error

仕方がないのでセットアップAPIのログを見てみます。

     dvi:                     {Writing Device Properties - Complete}
     inf:                     {Install Inf Section [AVFilter.NT.Services]}
     inf:                          AddService=csr_bthav,0x00000002,csr_bthav_Service_Inst  (csrbthav.inf line 108)
     inf:                          ServiceType=1  (csrbthav.inf line 112)
     inf:                          StartType=3  (csrbthav.inf line 113)
     inf:                          ErrorControl=1  (csrbthav.inf line 114)
     inf:                          ServiceBinary=C:\Windows\system32\drivers\csrbthav.sys  (csrbthav.inf line 115)
     inf:                          DisplayName="Bluetooth AVプロファイル"  (csrbthav.inf line 111)
!!!  dvi:                          Add Service: Failed to create service 'csr_bthav'.
!!!  dvi:                          Error 1078: The name is already in use as either a service name or a service display name.
!!!  inf:                     {Install Inf Section [AVFilter.NT.Services] exit(0x00000436)}
!!!  inf:                     Error 1078: The name is already in use as either a service name or a service display name.
!!!  dvi:                     Error while installing services.
!!!  dvi:                     Error 1078: The name is already in use as either a service name or a service display name.
!!!  dvi:                     Cleaning up failed installation
!!!  dvi:                     Error 1078: The name is already in use as either a service name or a service display name.
     dvi:                {Install DEVICE exit (0x00000436)}
!!!  dvi:                Cleaning up failed installation (00000436)
!!!  dvi:           Class installer: failed(0x00000436)!
!!!  dvi:           Error 1078: The name is already in use as either a service name or a service display name.
     dvi:           CoInstaller 1: Enter (Post Processing) 12:21:08.483
     dvi:           CoInstaller 1: Exit (Post Processing)
     dvi:      {DIF_INSTALLDEVICE - exit(0x00000436)} 12:21:08.484
!!!  ndv:      Error(00000436) installing device!
     ndv:      Device install status=0x00000436
     ndv:      Performing device install final cleanup...
!    ndv:      Queueing up error report since device installation failed...
     ndv: {Core Device Install - exit(0x00000436)} 12:21:08.488
     dvi: {DIF_DESTROYPRIVATEDATA} 12:21:08.488
     dvi:      CoInstaller 1: Enter 12:21:08.488
     dvi:      CoInstaller 1: Exit
     dvi:      Class installer: Enter 12:21:08.489
     dvi:      Class installer: Exit
     dvi:      Default installer: Enter 12:21:08.490
     dvi:      Default installer: Exit
     dvi: {DIF_DESTROYPRIVATEDATA - exit(0xe000020e)} 12:21:08.490
     ump: Server install process exited with code 0x00000436 12:21:08.496
<<<  Section end 2015/05/21 12:21:08.505
<<<  [Exit status: FAILURE(0x00000436)]


     dvi:                          Manufacturer=Cambridge Silicon Radio Limited
     dvi:                          Matching DeviceID={128cfe23-5667-45db-9c1b-23370da73831}\csravrcp_110e
     dvi:                          Strong Name=oem113.inf:csravrcp_Mfg.NTamd64:csravrcp_DDI:2.1.51.0:{128cfe23-5667-45db-9c1b-23370da73831}\csravrcp_110e
     dvi:                     {Writing Device Properties - Complete}
     inf:                     {Install Inf Section [csravrcp_DDI.NT.Services]}
     inf:                          Addservice=csravrcp,0x00000002,csravrcp_Service  (csravrcp.inf line 57)
     inf:                          ServiceType=0x00000001  (csravrcp.inf line 63)
     inf:                          StartType=0x3  (csravrcp.inf line 64)
     inf:                          ErrorControl=0x00000001  (csravrcp.inf line 65)
     inf:                          ServiceBinary=C:\Windows\system32\DRIVERS\csravrcp.sys  (csravrcp.inf line 66)
     inf:                          DisplayName="Bluetooth AVRCPプロファイル"  (csravrcp.inf line 62)
     inf:                          LoadOrderGroup="Extended Base"  (csravrcp.inf line 67)
!!!  dvi:                          Add Service: Failed to create service 'csravrcp'.
!!!  dvi:                          Error 1078: The name is already in use as either a service name or a service display name.
!!!  inf:                     {Install Inf Section [csravrcp_DDI.NT.Services] exit(0x00000436)}
!!!  inf:                     Error 1078: The name is already in use as either a service name or a service display name.
!!!  dvi:                     Error while installing services.
!!!  dvi:                     Error 1078: The name is already in use as either a service name or a service display name.
!!!  dvi:                     Cleaning up failed installation
!!!  dvi:                     Error 1078: The name is already in use as either a service name or a service display name.
     dvi:                {Install DEVICE exit (0x00000436)}
!!!  dvi:                Cleaning up failed installation (00000436)
!!!  dvi:           Default installer: failed!
!!!  dvi:           Error 1078: The name is already in use as either a service name or a service display name.
     dvi:      {DIF_INSTALLDEVICE - exit(0x00000436)} 12:20:50.351
!!!  ndv:      Error(00000436) installing device!
     ndv:      Device install status=0x00000436
     ndv:      Performing device install final cleanup...
!    ndv:      Queueing up error report since device installation failed...
     ndv: {Core Device Install - exit(0x00000436)} 12:20:50.389
     ump: Server install process exited with code 0x00000436 12:20:50.447
<<<  Section end 2015/05/21 12:20:50.830
<<<  [Exit status: FAILURE(0x00000436)]

ぱっと見ると csrbthav.inf csravrcp.inf でエラーが出ている事が見て取れます。ただ、やはりエラーはサービス名か表示名がコンフリクトしている旨を伝える物しか無く、Bluetooth AVプロファイル、Bluetooth AVRCPプロファイルがインストール出来ないという症状が出ています。

csrbthav.infやcsravrcp.infはインストールされる際にoem???.infというファイル名に置換されますが、先のエラーログを辿る事で発見することが出来ます。インストールの設定を参照する事で解決のヒントが得られるかも知れません。

コンフリクト原因

conflict csr driver inf

コンフリクトという事で単純にInf内の文字列を検索してみたところ、古いドライバを発見しました。

ファイルのタイムスタンプがデバイスを購入した日なっていたのでWindows Updateにより取り寄せられたOS標準のドライバだと思われます。これがCSR Harmony stackとコンフリクトしてエラーが出ているようです。

もう片方のドライバも同じ理由によるものなので、双方の古いドライバーをドライバーストア(oem???.infとしてインストールされているもの)から削除すれば正しくインストールが進むはずです。

ドライバーパッケージの削除

ドライバーストアからドライバを削除方法に関してはThecNetで解説されていました。

ドライバー パッケージをドライバー ストアから削除する
https://technet.microsoft.com/ja-jp/library/cc730875.aspx?f=255&MSPPError=-2147217396

今回の例だと、管理者権限でコマンドプロンプトを起動して"pnputil.exe -d Oem98.inf"または"pnputil.exe -f -d Oem98.inf"を実行すると目的の物が削除できます。

uninstall old csr avrcp profile failed

再セットアップ

そして再びセットアップを試みると…、

csr-bluetooth-driver-reinstall-info

Bluetoothオーディオはインストールが成功しましたが、Bluetooth AVRCPプロファイルのインストールに失敗しました。

原因はどうやらドライバ削除時にサービスが削除出来なかったためらしく、以下のレジストリを削除しWindowsを再起動します。

remaining registry bthavrcp

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\BthAvrcp

再起動後に再びデバイスを認識させると、今度は無事にインストールが完了しました。

csr bluetooth driver installed

実際にA2DPの音声ソースをPCで聴いてみましたが、急激な処理負荷でノイズが載りがちです。他のネットワーク越し等のオーディオストリームが安定して再生できるような状態でもプチノイズが載ったりします。

音質に関しては聞くに堪えないというほどでは有りませんが小さなホワイトノイズが気になる感じでしょうか、比較的良い音質の部類には入ると思います。

同期やバッファリングに問題があるような気がしますが、遅延の程度と音質から行くと許容範囲なんですかね…、aptXが使えるデバイスを買ってきて試してみたいような気もします。

remote and avstreaming pc from android

総評としてはドライバさえインストール出来てしまえば悪い製品では無いという気がします。

因みにA2DPでAndroidから受けた音声をA2DPでBluetoothのサウンドバーから流そうとしましたが、どちらか片方しか接続できないようです。まぁ…、そういう使い方をするものじゃありませんね;p

 

Android,Windowsbluetooth

Posted by redchat