재부팅 시 호스트 시스템에서 녹음 장치를 식별하기 위해 사용 가능한 채널 및 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
.