再起動時に、ホストシステムで録音デバイスを識別するために使用可能なチャンネルとIDとともに、すべてのオーディオ入力デバイスを一覧表示する必要があるアプリケーションを作成しています。
arecord -lが(一部?)オーディオ入力デバイスを一覧表示できることがわかりましたが、-cフラグを使用して特定のチャネル数を記録できますが、チャネル数を一覧表示する方法はないようです。
失敗するまで、ますます多くのチャンネルで録音しようとするループを書いてみましたが、チャンネルが1つしかないのに常に65で失敗します。
さらに、IDは一意ではなく、他のホストシステムで使用するのに安全ではありません。
Bashでこれを達成する方法についてのアイデアはありますか?
理想的には、ホスト(ALSA、Pulseaudio、Pipewire、Jack、Wireplumberなど)とは独立して使用されるオーディオシステムですか?
答え1
/proc
私はこれにファイルシステムを使います。これは、ALSAサウンドカードモデルの側面をファイルシステムに公開します。
例:
SoC(System on Chip)I2Sインターフェースを介して接続された2チャンネルADC:
$ cat /proc/asound/card0/pcm0c/sub0/hw_params
access: RW_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 192
buffer_size: 2304
8チャンネルUSBオーディオデバイス:
$ cat /proc/asound/card0/pcm0c/sub0/hw_params
access: RW_INTERLEAVED
format: S32_LE
subformat: STD
channels: 8
rate: 48000 (48000/1)
period_size: 192
buffer_size: 2304
便利な他のファイルがあります。/proc/asound/card0/stream0
USBオーディオデバイスのチャンネル数はありますが、SoCデバイスのチャンネル数はありません。いずれにしても、カードが複数ある場合は列挙の順序は保証されませんので、目的のカードを見つけるにはカードをすべて列挙する必要があります。
amixer
を使用してコントロールの数を確認することもできますが、解析がより簡単であることがわかりprocfs
ましたsysfs
。