sndcpyでAndroidのサウンドをUSB経由でPCに転送

AndroidのオーディオをPCに転送して視聴ということをよくやるのですが，昔は3.5mmオーディオミニジャックで最近はBluetooth A2DP sourceで転送しています．
今回USBで転送できる sndcpy を試してみました．

rom1v/sndcpy: Android audio forwarding (scrcpy, but for audio)

Audio forwarding on Android 10 · ~rom1v/blog

Tip

sndcpy はAndroid 10以降が必要です．別途クライアントPCにVLCも必要です．導入していない場合は導入しておきましょう．

$ sudo apt install vlc

sndcpyのReleasesから最新を入手します．現在は v1.1 が最新でLinux版(sndcpy-v1.1.zip)とWindows版(sndcpy-with-adb-windows-v1.1.zip)があります．
今回Linuxなので　sndcpy-v1.1.zipとチェックサムとその署名ファイルをダウンロードして確認します．

$ wget https://github.com/rom1v/sndcpy/releases/download/v1.1/sndcpy-v1.1.zip \
https://github.com/rom1v/sndcpy/releases/download/v1.1/SHA256SUMS.txt \
https://github.com/rom1v/sndcpy/releases/download/v1.1/SHA256SUMS.txt.asc
$ sha256sum -c ./SHA256SUMS.txt
sndcpy-v1.1.zip: 完了
$ gpg --verify ./SHA256SUMS.txt.asc

適当なディレクトリに展開します．

$ unzip -l ./sndcpy-v1.1.zip
Archive: ./sndcpy-v1.1.zip
Length Date Time Name
--------- ---------- ----- ----
95591 2021-11-30 07:13 sndcpy.apk
799 2021-11-30 07:13 sndcpy
1028 2021-11-30 07:13 sndcpy.bat
--------- -------
97418 3 files
$ mkdir ./sndcpy
$ cd sndcpy
$ unzip ../sndcpy-v1.1.zip

準備が出来たのでAndroid端末をUSB接続した状態で実行します．

$ ./sndcpy
Waiting for device...
* daemon not running; starting now at tcp:5037
* daemon started successfully
Performing Streamed Install
Success
28200
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.rom1v.sndcpy/.MainActivity }
Playing audio...
VLC media player 3.0.16 Vetinari (revision 3.0.13-8-g41878ff4f2)
[00005616cdcf65e0] dummy interface: using the dummy interface module...
[00007f5a800015c0] main stream error: connection error: Connection refused
[00007f5a94000c80] main input error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 0 ms)
[00007f5a94000c80] main input error: ES_OUT_SET_(GROUP_)PCR is called too late (pts_delay increased to 1 ms)

この状態でAndroid側で音を再生してみるとPC側から聞こえます．このときAndroid側はミュートでもOKで，音量を上げるとAndroid/PC両方から音が出ました．

ということで簡単に動作したのですが問題が．かなり音が悪いです．音質はいいけど細かく途切れる感じです．以下のIssueが近いかな?

Audio crackling when playing short sounds · Issue #104 · rom1v/sndcpy

ということで一旦使うのをやめることにします．sndcpyはAndroidにsndcpy.apkをインストールするのでこれを削除します．

$ adb uninstall com.rom1v.sndcpy
Success

これで元に戻ったはずです．

sndcpy は現段階では環境を選ぶ(Android 10以降)し音もいまいちなのでこれからに期待です．とりあえずはこれまで通りBluetooth A2DPで繋ごうと思います．(これはこれで2台同時に接続できないという問題があります)

環境

$ dpkg-query -W adb
adb 1:10.0.0+r36-7